网站大量收购独家精品文档,联系QQ:2885784924

SL_Java_内存与优化.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
J2EE平台与应用开发培训 张文举 zwj03@ 上海交大慧科南洋教育中心 Agenda(课程安排) Agenda(课程安排) Agenda Java内存管理的基本概念 内存不足和内存泄漏错误的原因和症状 诊断、定位和解决内存不足和内存泄漏错误 使用分析工具解决内存不足和内存泄漏错误 预防内存不足和内存泄漏 OutOfMemory错误实例 Java内存管理的基本概念 Java内存 Java 堆内存(heap) Permanent区(Sun/Hp JDK) Java 堆内存(heap): 是 JVM 用于分配 Java 对象的内存,包含活动对象 和不可用对象 堆大小通常是在服务器启动时使用 java 命令中的 –Xms(最小) –Xmx(最大)标志来定义。 Permanent区: 是Sun JDK和HP JDK用来加载类(class)的专门的内存区 这个区域不归属Java 堆内存(heap)范围 如果Java应用很大,例如类(class)很多,那么建议增大这个区域的大小来满足加载这些类的内存需求 通过–XX:PermSize=***M –XX:MaxPermSize=***M调整 Java内存管理的基本概念 本地内存(native memory): 是 JVM 用于其内部操作的本地内存(非Java内存) JNI 代码和第三方本地模块(例如,本地 JDBC 驱动 程序)也使用本地内存 最大本地内存大小取决于以下因素: 操作系统进程内存大小限制 已经指定用于 Java 堆的内存 进程内存大小: 32位操作系统,理论最大值2的32次方=4G 进程内存 = Java 内存 + 本地内存 + 加载的可执行文件和库 + 操作系统保留内存 Java内存管理的基本概念 Java堆内存大小的决定因素: 进程大小限制,=4G “加载的可执行文件和库+系统保留内存”不同操作系统和应用不一样,通常在百M到1G间 JVM的本地内存在不同的JDK之间也不一样。JRockit相对Sun JDK,做了非常好的JIT优化,但是本地内存要求更多的空间 通常Java堆内存大小推荐不大于2G 大部分操作系统默认也上不到2G,需要做内核调整--大内存模式 Java堆内存的大内存模式: AIX上Java堆内存有大内存模式(LAM),最大支持到3.25G(/developerworks/java/jdk/aix/142/sdkguide.aix32.html#lpm) Window上有连续地址空间限制,通常不大于1.5G。Windows Advance Server最大支持3G模式。(/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/BootIni_de16d3ec-c437-4628-805f-8945ea598a92.xml.asp) 其他操作系统请查看操作系统文档和对应JVM文档 Java内存管理的基本概念 垃圾回收 (Garbage Collection, GC): JVM自动检测和释放不再使用的内存。 Java 运行时JVM会执行 GC,这样程序员不再需要显式 释放对象。 通常在空闲内存降低到某一水平或内存分配达到某一 数量后自动触发。 各种JDK的垃圾回收都有多种算法和策略 以下OutOfMemory 简称 OOM 以下Memory Leak 简称 ML Heap简称“堆” Java内存问题的两种表现形式 Java内存问题的两种表现形式: 内存不足错误 内存泄漏错误 内存不足错误--明确显示出java.lang.OutOfMemoryError 没有空闲内存可供 JVM 或本地代码用于分配新对象或内存块 在 Java 堆或本地内存中都可能发生 内存泄漏错误--没有错误信息,但是内存几乎耗尽 已经分配好的内存或对象,当不再需要,没有得到释放 内存曲线是一条斜向上的曲线 对 Java 堆或本地内存都可能产生这个问题 通常最终的状态就会导致 OOM 错误 通常内存泄漏ML会导致 OOM错误,因此两者的探查方法完全相同! Java内存问题的两个主要发生区段 Java内存问题的两个主要发生区段: Java内存--包括heap堆内存和permanent区 本地内存--包括JVM进程内存和java使用的第三方本地代码 Java内存不足 Java堆内存heap不足,无法再分配新对象或内存块 permanent区内存不足,无法再加载类到内存中(Sun Hp JDK) 本地内存不足 物理内存不够,无法再得到内存 第三方本地代码有内存泄漏的Bug,例如oracle oci driver本地代码 JVM的JIT或者JVM本身的Bug 物理内存和

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档