欢迎来到天天文库
浏览记录
ID:15970461
大小:1.16 MB
页数:60页
时间:2018-08-06
《jvm 内存管理机制分析与oom问题浅析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、JVM内存管理机制分析与OOM问题浅析主讲内容如下了解Java基本内存管理基本概念了解Jvm参数的参数配置及其作用了解发生内存不足/内存泄露错误的主要原因如何诊断内存不足/内存泄露使用分析工具分析内存不足和内存泄露OOM错误实例了解Java基本内存管理基本概念Java内存包括哪几部分?Java堆内存(Heap)Permanent区(Sun/HpJDK)本地内存(NativeMemory)Java堆内存(Heap):是JVM用于分配Java对象的内存,包含活动对象和freed对象堆大小使用java命令中的–Xms(最小)–Xm
2、x(最大)标志来定义。Permanent区:是SunJDK和HPJDK用来加载类(class)的专门的内存区这个区域不归属Java堆内存(Heap)范围如果Java应用很大,例如类(class)很多,那么建议增大这个区域的大小来满足加载这些类的内存需求通过–XX:PermSize=***M–XX:MaxPermSize=***M调整了解Java基本内存管理基本概念本地内存(NativeMemory)是JVM用于其内部操作的本地内存(非Java内存)JNI代码和第三方本地模块(例如,本地JDBC驱动程序)也使用本地内存最大本
3、地内存大小取决于以下因素:操作系统进程内存大小限制已经指定用于Java堆的内存进程的内存大小等于什么?32位操作系统,理论最大值2的32次方=4G64位操作系统,理论最大值是一个很大的数字进程内存=Java(Heap)+本地内存+加载的可执行文件和库+操作系统保留内存了解Java基本内存管理基本概念Java堆内存大小的决定因素:进程大小限制,例如:<=4G“加载的可执行文件和库+系统保留内存”不同操作系统和应用不一样,通常在百M到1G间JVM的本地内存在不同的JDK之间也不一样。JRockit相对SunJDK,做了非常好的J
4、IT优化,但是本地内存要求更多的空间通常Java堆内存大小推荐不大于2G大部分操作系统默认也上不到2G,需要做内核调整--大内存模式Java堆内存的大内存模式:PlatformDefaultMaximumHeapSizeWindowsona64bitplatform75%oftotalphysicalmemoryupto3GBLinuxorSolarisona64bitplatform75%ofphysicalmemoryupto3GBWindowsona32bitplatform75%oftotalphysicalmemo
5、ryupto1GBLinuxorSolarisona32bitplatform75%ofphysicalmemoryupto1GB了解Java基本内存管理基本概念垃圾回收(GarbageCollection,GC)的作用:JVM自动检测和释放不再使用的内存。Java运行时JVM会执行GC,这样程序员不再需要显式释放对象。通常在空闲内存降低到某一水平或内存分配达到某一数量后自动触发。各种JDK的垃圾回收都有多种算法和策略(预了解详情请参考附件)以下OutOfMemory简称OOM以下MemoryLeak简称MLJava内存
6、的两种表现形式Java内存问题的两种表现形式:内存溢出错误(OOM)内存泄露错误(ML)现在先不管这两种内存问题是什么愿意导致的,但是最终它们都会抛出同样的内容:java.lang.OutOfMemoryError共同点是什么呢?没有空闲内存可供JVM或本地代码用于分配新对象或内存块通常最终的状态就会导致OOM错误在Java堆或本地内存中都可能发生不同点是什么呢?ML是已经分配好的内存或对象,当不再需要,没有得到释放而OOM则是没有足够的空间来供jvm分配新的内存块ML的内存曲线总体上是一条斜向上的曲线而OOM不是那样子的J
7、ava内存问题的两个主要发生区段Java内存问题的两个主要发生区段:Java内存--包括heap堆内存和permanent区本地内存--包括JVM进程内存和java使用的第三方本地代码Java内存不足Java堆内存heap不足,无法再分配新对象或内存块permanent区内存不足,无法再加载类到内存中(Sun&HpJDK)本地内存不足物理内存不够,无法再得到内存第三方本地代码有内存泄漏的BugJVM的JIT或者JVM本身的Bug(很古老的技术啦)物理内存和虚拟内存计算机的可寻址空间=RAM+交换空间进程A的虚拟内存进程D的虚
8、拟内存进程B的虚拟内存进程C的虚拟内存RAM交换空间进程的虚拟内存由OS映射到物理内存本地内存可执行文件/库Os使用本地内存Os使用本地内存Os使用本地内存Os使用JavaheapJavaheapJavaheapJavaheap可执行文件/库可执行文件/库可执行文件/库当然了,进程大小受到
此文档下载收益归作者所有