Eden区 中文叫 伊甸园区。
年轻代:Eden区+存活区,存活区包括(S0+S1)。
jdk1.8之后取消了永久代,而是变成了元空间(不在堆内存里保存,而是直接利用物理内存保存)。
伸缩区有这么大的处理范围,所以在进行堆内存分配的过程时当用户访问量增大的时候就一定会导致不断的判断空间是否充足,不断的进行空间的增长,不断的进行内存空间的收缩和释放。也会影响效率!!
参数说明:
-Xms:设置初始化的内存分配大小 默认值(总大小的1/64)
-Xmx:设置最大的可用内存空间。(总大小的1/4)
例如:-Xms16g -Xmx16g
设置为一样大小,可以减少堆内存的收缩处理操作。
当堆内存的空间很大的情况下,就需要考虑GC的执行效率,所以在这时候就需要考虑两个技术名词:BTP、TLAB.
年轻代
---BTP在Eden区采用栈的形式将最晚创建的对象保存在栈顶。
---TLAB分块保存,适合于多线程的处理操作上。
-Xmn:设置年轻代的空间大小,默认采用物理内存的1/64
-Xss:设置每一个线程所占用的栈的大小。
-X:SurvivorRator设置Eden区与两个存活区之间的内存分配比 8:1:1
老年代
与年轻代比率:-XX:NewRatio
当对象很大的时候,往往不在年轻代进行保存,而是直接晋级到老年代。利用“-XX:PretenureSizeThreshold”。
GC算法
主流:G1 未来ZGC
MinorGC
MajorGC(Full GC)
Sytem.gc();
jdk1.7 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.8 默认垃圾收集器Parallel Scavenge(新生代)+Parallel Old(老年代)
jdk1.9 默认垃圾收集器G1
-XX:+PrintCommandLineFlagsjvm参数可查看默认设置收集器类型
-XX:+PrintGCDetails亦可通过打印的GC日志的新生代、老年代名称判断