需要准备的知识点
内存的限制来源
- 相关操作系统的数据模型(32-bt还是64-bit)限制
- 系统的可用虚拟内存限制;
- 系统的可用物理内存限制
一般32位系统内存可用的最多1.5G,64位就比较大,虽不是无限,基本上可以说没有限制
测试最大内存的简易命令:
java -Xmx16g –version 使用16g内存运行
GC的效率
MinorGC:新生代垃圾收集动作,回收速度很快
MajorGC/FullGC:老年代回收,效率慢于MinorGC10倍左右
内存分配:
堆:年轻代(Eden + Survivor) + 老年代
非堆:持久代,对应JVM内存模型的方法区
调整命令及参数
持久代
持久代(非堆)设置一般较为固定,可根据需要进行设置,如下参考命令:
-XX:MaxPermSize=16m 最大持久代内存为16m
年轻代与老年代的分配
年轻代又可以分为Eden和Survivor,Eden为新对象创建,Survivor为年轻代到老年代过渡的一代,年轻代和老年代并不是直接设置内存大小而是通过设置比例实现的:
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。
GC的配置:
垃圾收集器参数总结
-XX:+option 启用选项
-XX:-option不启用选项
-XX:option=number
-XX:option=string
**-XX:+UseSerialGC:**Jvm运行在Client模式下的默认值,打开此开关后,使用Serial + Serial Old的收集器组合进行内存回收
-XX:+UseParNewGC:打开此开关后,使用ParNew + Serial Old的收集器进行垃圾回收
-XX:+UseConcMarkSweepGC :使用ParNew + CMS + Serial Old的收集器组合进行内存回收,Serial Old作为CMS出现“Concurrent Mode Failure”失败后的后备收集器使用。
**-XX:+UseParallelGC:**Jvm运行在Server模式下的默认值,打开此开关后,使用Parallel Scavenge + Serial Old的收集器组合进行回收
-XX:+UseParallelOldGC :使用Parallel Scavenge + Parallel Old的收集器组合进行回收
-XX:SurvivorRatio:新生代中Eden区域与Survivor区域的容量比值,默认为8,代表Eden:Subrvivor = 8:1
-XX:PretenureSizeThreshold: 直接晋升到老年代对象的大小,设置这个参数后,大于这个参数的对象将直接在老年代分配
-XX:MaxTenuringThreshold: 晋升到老年代的对象年龄,每次Minor GC之后,年龄就加1,当超过这个参数的值时进入老年代
-XX:UseAdaptiveSizePolicy: 动态调整java堆中各个区域的大小以及进入老年代的年龄
-XX:+HandlePromotionFailure: 是否允许新生代收集担保,进行一次minor gc后, 另一块Survivor空间不足时,将直接会在老年代中保留
-XX:ParallelGCThreads: 设置并行GC进行内存回收的线程数
-XX:GCTimeRatio: GC时间占总时间的比列,默认值为99,即允许1%的GC时间,仅在使用Parallel Scavenge 收集器时有效
-XX:MaxGCPauseMillis: 设置GC的最大停顿时间,在Parallel Scavenge 收集器下有效
-XX:CMSInitiatingOccupancyFraction: 设置CMS收集器在老年代空间被使用多少后出发垃圾收集,默认值为68%,仅在CMS收集器时有效,-XX:CMSInitiatingOccupancyFraction=70
-XX:+UseCMSCompactAtFullCollection:由于CMS收集器会产生碎片,此参数设置在垃圾收集器后是否需要一次内存碎片整理过程,仅在CMS收集器时有效
-XX:+CMSFullGCBeforeCompaction:设置CMS收集器在进行若干次垃圾收集后再进行一次内存碎片整理过程,通常与UseCMSCompactAtFullCollection参数一起使用
-XX:+UseFastAccessorMethods:原始类型优化
-XX:+DisableExplicitGC:是否关闭手动System.gc
-XX:+CMSParallelRemarkEnabled:降低标记停顿
-XX:LargePageSizeInBytes:内存页的大小不可设置过大,会影响Perm的大小,-XX:LargePageSizeInBytes=128m