JVM学习笔记

2020-02-29  本文已影响0人  MonkeySolider

1. young GC 和 full GC

2.JVM内存分配与回收

2.1 对象分配时优先进入Eden
2.2 大对象直接进入老年代
2.3 长期存活对象进入老年代
2.4 对象动态年龄判断

+survivor区中,一批对象占据的大小大于survivor区的50%时,大于这批对象最大年龄的对象都放入老年代(一般在young gc之后执行)

2.5 young gc之后,存活的对象survivor区域放不下,这些对象也会直接放入老年代
2.6 老年代空间分配担保机制

在young gc之前,进行判断
(1)如果老年代的剩余大小>=年轻代所有对象的大小之和,则触发young gc;否则执行步骤2
(2)如果没有设置担保参数 -XX:HandlePromotionFailure(jdk8之后默认设置了该值),则执行full gc;否则执行步骤3
(3)判断老年代的可用空间是否大于之前每次young gc之和进入老年代对象的平均值大小,如果剩余空间较大,则执行young gc,否则执行full gc


老年代空间分配担保机制.png

3.如何判断对象是否可被回收

优点:实现简单,效率高
缺点:可能出现循环引用

可以作为GC Roots的节点:线程栈中的本地变量,静态变量,本地方法栈中的变量

4.垃圾回收算法

5.垃圾收集器

所谓垃圾收集器,其实就是垃圾搜集算法的具体实现。没有一个一劳永逸的垃圾搜集器,每种垃圾收集器都有其使用场景

上一篇下一篇

猜你喜欢

热点阅读