对象是否已死
- 可达性分析算法
- 在虚拟机桟中引用的对象,例如:各个线程被调用的方法堆栈中是使用到的参数、局部变量、临时变量等
- 在方法区中静态属性引用的对象,例如:java类的引用类型静态变量
- 在方法区中常量引用的对象,例如:字符串常量池里的引用
- 在本地方法桟中JNI引用的对象
- java虚拟机内部的引用,例如:基本数据类型对应的Class对象、常驻的异常对象等,还有系统类加载器
- 所有被同步锁持有的对象
- 反映java虚拟机内存情况的JMXBean、JMVTI中注册的回调、本地代码缓存等
- 引用
- 强引用
- 程序代码中普遍存在的引用赋值
- 类似Object obj=new Object()
- 软引用
- 一些还有用但非必须对象
- 在系统将要发生内存溢出异常前,对这些应用进行第二次回收,如果这次回收还没有足够的内存才会抛出内存溢出异常
- 弱引用
- 非必须对象
- 只能生存到下一次垃圾收集发生为止
- 虚引用
- 强引用
- 宣告对象死亡至少经历2次标记过程
- 回收方法区
垃圾收集算法
- 分代收集理论
- 标记-清除算法
- 标记-复制算法
- 标记-整理算法