垃圾收集器与内存分配策略--判断对象是否可被回收
2019-02-19 18:23
281 查看
1.引用计数法
给每个对象添加一个以引用计数器,缺点:难以解决循环引用问题
2.可达性分析算法
通过一系列GC Roots 对象作为起点,从这个节点往下搜索,如果一个对象是GC Roots不可达的,则被认为是可回收的。
GC Roots主要包括1)虚拟机栈的局部变量表中引用的对象,2)静态字段引用的对象,3)常量池中引用的对象,4)本地方法栈中引用的对象
3.不同的引用强度
4.生存还是死亡
被列入回收名单的对象是否就一定被回收,答案是不确定的。
因为一个对象进行可达性分析之后发现没有与GC Roots相链接 的引用链,如果发现对象的finalize被重写了,并且未被执行过,则该对象还有挣扎的空间。Finalizer线程来执行这些回收名单中有挣扎空间的对象,如果在finalize方法中对象把自己(this)赋值给某个类变量或者对象的成员变量,那么对象挣扎成功不会被回收。但是finalize不确定性很大,不建议使用,try-catch相对来说释放资源更稳定有效。
5.回收方法区
主要回收废弃常亮和无用的类
判断类无用的三个条件:1)该类的所有实例已被回收,2)加载该类的ClassLoader已经被回收,3)该类对应的java。lang。class对象没有在任何地方引用,无法通过反射访问该类
垃圾收集算法
1.标记-清除算法
2.复制算法,用于“朝生夕死”的新生代。HotSpot默认将内存分为一块较大的Eden和两块较小的Survivor
3.标记-整理算法,与“标记-清除”算法原理类似,区别在于,标记-整理之后的内存是连续的,适用于老年代
相关文章推荐
- 垃圾收集器与内存分配策略——判断对象是否存活
- 1-3 (JVM)垃圾回收---内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定
- Java 垃圾收集器与内存分配策略(一):对象“死亡判断”和四种引用
- jvm学习记录--06 垃圾回收对象内存分配策略
- Java的垃圾收集算法、垃圾收集器以及内存分配与回收策略
- 深入理解java虚拟机(六):java垃圾收集分析实战(内存分配与回收策略)
- 垃圾收集器与内存分配策略-内存分配与回收策略
- 垃圾收集与分配策略——(五)内存分配与回收策略
- 深入理解JAVA虚拟机—第三章垃圾收集器和内存分配策略(一)对象的引用和判断对象是否可用
- 垃圾收集器与内存分配策略——内存分配策略与回收策略
- 深入理解java虚拟机(六):java垃圾收集分析实战(内存分配与回收策略)
- [jvm解析系列][四]Java的垃圾回收(二)垃圾收集算法,内存分配和回收策略
- java虚拟机之垃圾收集器、内存分配与回收策略、GC都干了些什么
- 垃圾收集器与内存分配策略-对象已死吗?
- 对象引用算法、垃圾收集算法、内存分配策略
- 垃圾收集器与内存分配策略——对象的生命、垃圾收集算法
- 垃圾收集器与内存分配策略——(一)对象已死吗?
- JAVA虚拟机(JVM)划重点 第三章 第一节 Java垃圾收集与内存分配策略 之 垃圾回收机制
- 垃圾收集器与内存分配策略
- 【java虚拟机序列】java中的垃圾回收与内存分配策略