JVM
2022-02-25 12:05:00 8 举报
AI智能生成
JVM 学习的内容
作者其他创作
大纲/内容
JVM堆内存
新生代
Eden区
默认占 80%
Survior区
Survior 1区
默认占 10%
Survior 2区
默认占 10%
TLAB(Thread Local Allocation Buffer)
线程私有的分配缓存区,以提升对象分配时的效率
是否使用 TLAB:-XX:+/-UseTLAB
Minor GC/Young GC
对老年代空间大小做检查
老年代空间分配担保规则
-XX:-HandlePromotionFailure
默认打开,会进行第二步检查,
jdk1.6之后废弃
jdk1.6后默认判断规则
老年代可用空间 > 新生代对象总和
老年代可用空间 > 历次Minor GC升入老年代对象的平均大小
老年代有空间
1.Minor GC过后,剩余的存活对象的大小,是小于Survivor区的大小的,那么此时存活对象进入Survivor区域即可
2.Minor GC过后,剩余的存活对象大小,是大于Survivor区域的大小,但是小于老年代可用内存的大小,此时就直接进入老年代即可
老年代无空间
3.很不幸,Minor GC过后,剩余的存活对象的大小,大于了Survivor区域的大小,也大于了老年代可用内存的大小,此时老年代都放不下这些存活对象了,就会触发一次“Full GC”
进入老年代
躲过gc 15次,年龄达到15岁的对象
-XX:MaxTenuringThreshold
设置多少岁进入老年代,默认15岁
动态对象年龄判断
Survior区的一批对象总大小大于这块Survior区域的内存大小的50%,那么大于等于这批年龄的对象直接进入老年代
大对象直接进入老年代
-XX:PretenureSizeThreshold
设置字节数,大于这个字节数的对象直接进入老年代
老年代
每次Full GC后都会产生大量的内存碎片,太多的内存碎片会导致增加频繁的Full GC
0 条评论
下一页