1.如何判断对象可以回收
2 可达性分析算法
Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象
扫描堆中的对象,看是否能够沿着 GC Root对象 为起点的引用链找到该对象,找不到,表示可以
回收
哪些对象可以作为 GC Root ?
3垃圾回收算法
-
1、标记清除(一般在老年代回收垃圾时可能会使用)
定义: Mark Sweep
优点:速度较快
缺点:会产生碎片化空间 -
2、标记整理(标记压缩)(一般在老年代回收垃圾时可能会使用)
定义:Mark Comp
优点:空间连续
缺点:对象地址要重新移动,效率较慢 -
3、复制算法(一般在新生代的回收垃圾使用)
不会有内存碎片
需要占用双倍内存空间
4、分带垃圾回收
对象首先分配在伊甸园区域
新生代空间不足时,触发 minor gc,伊甸园和 from 存活的对象使用 copy 复制到 to 中,存活的
对象年龄加 1并且交换 from to
minor gc 会引发 stop the world,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行
当对象寿命超过阈值时,会晋升至老年代,最大寿命是15(4bit)
当老年代空间不足,会先尝试触发 minor gc,如果之后空间仍不足,那么触发 full gc,STW的时
间更长