jvm学习之gc垃圾回收机制
1、什么是垃圾回收?
堆中使用对象,但是不能一直放在那里,会占内存,所以需要垃圾回收,释放多余内存,从而保证程序的正常运行。
2、垃圾回收之前应该判断到底什么是垃圾?
- 引用计数法:对象保存着被引用的次数,被引用一次就+1,删除引用一次-1,如果引用个数为0,那么会被回收,但是有个问题无法解决
堆中A,B没有别的对象引用,双方互相依赖,这样的话,两个对象永远无法被回收
- 可达性分析(reachable anaylisis)
从GC Roots往下追踪,如果在roots的引用链上,则表示对象是可达的,否则,表示对象不可达,对象是可以回收的
GC Roots都有哪些:
- 虚拟机栈中的对象(线程正在使用的对象)
- 方法区中的对象
2、垃圾回收的算法