垃圾收集算法/三色标记/读写屏障
垃圾判断算法
判断jvm中对象,哪些是可回收对象(垃圾对象),哪些是存活对象
引用计数法
- 在对象中添加一个计数属性用于标记对象被引用的次数,每多一个引用,计数+1,当引用失效时,计数-1,如果计数=0,表示整个对象没有被引用了,可以被回收(可对比sync可重入锁/LockSport理解)
可达性分析算法
- 通过GC Root根对象作为起始点,从这些节点开始,根据引用关系链向下搜索
- 如果某个对象无法被搜索到,就表明该对象没有被引用了,可以被回收
- 反之则对象存活,不能回收
哪些对象可以作为GC Root:
- 所有Java线程当前活跃的栈帧里指向GC堆里的对象的引用;即: 当前所有正在被调用的方法的引用类型的参数/局部变量/临时值。
- VM的一些静态数据结构里指向GC堆里的对象的引用,例如HotSpot VM里的Universe里有很多这样的引用。
- JNI handles,包括global handles和local handles
- (看情况)所有当前被加载的Java类
- (看情况)Java类的引用类型静态变量
- (看情况)Java类的运行时常量池里的引用类型常量(String或Class类型)
- (看情况)String常量池(StringTable)里的引用
内存分配算法
指针碰撞
retry:
HeapWord* compare_to = *Universe::heap()->top_addr();
HeapWord*