垃圾收集器
判断对象是否需存活
- 回收堆
- 判断对象是否存活:
- 方法一:引用计数法。对象被引用一次就+1,当为0时回收对象。缺点:无法解决循环引用问题。
- 方法二:可达性分析算法。记录当前对象是否有和GC Roots中对象的引用链。(其中,可以作为GCRoots对象的有:虚拟机栈中引用的对象、方法去中类静态属性引用的对象、方法区中常量引用的对象、本地方法栈中引用的对象。)
- 不可达对象并不是一定被垃圾收集的,当这个对象有必要执行finalize()并finalize里自己和某个对象建立关联,即可在第二次标记时被移出“即将回收”的集合。但强烈建议不在finalize()里来拯救对象,使用try-finally等其他方式或许更好。
- 引用分为:强引用(new出来的)、软引用(SoftReference类实现)、弱引用(WeakReference类实现)、虚引用(PhantomReference类实现)。是为了描述一类对象:内存空间还够的时候能保存在内存,不够就可以抛弃这些对象。
- 判断对象是否存活:
- 回收方法区
- 主要是回收方法区中的废弃常量和无用的类。
- 无用的类必须满足三点:Java堆中不存在该类实例;加载该类的ClassLoader已经被回收;该类对应的java.lang.Class对象没有在其他地方被引用。
- 无用的类不一定要被回收,可以通过参数与进行控制。
- 主要是回收方法区中的废弃常量和无用的类。
垃圾收集算法(内存回收方法论)
HotSpot的算法实现(HotSpot如何发起内存回收)
垃圾收集器(内存回收的具体实现、特点)
内存分配
原文地址:https://www.cnblogs.com/coding-gaga/p/11255289.html
时间: 2024-11-03 05:11:13