java虚拟回收垃圾对象时,一份分为两步:
1、虚拟机在回收堆空间在之间,会先判断哪些对象已经死亡;
2、然后再对这些死亡对象通过特定的回收算法进行回收
一、判断对象是否死亡
1、引用计算器算法
给对象添加一个引用计算器,如果其他地方引用它,计算器就加1,当引用失效时,计算器就减1。当计算器为0时,这个对象不能被再次使用,需要被回收了。
优点:实现简单
缺点:不能解决对象之间相互循环引用的问题。
2、根搜索算法GC Roots Tracing
通过一系列的名为GC Roots作为对象为起始点,从这些节点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连,也就是不可达(图论中迪杰斯特拉算法),证明此对象是不可用的。
在java语言里,可作为GC Roots的对象包括以下几种:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 方法区中的类静态属性引用的对象
- 方法区中的常量引用的对象
- 本地方法栈中JNI(即一般说的Native方法)的引用的对象
ps:会进行二次判断,在判断对象为死亡对象后,虚拟机会吧对象放到F-QUEUE队列里,然后启动一个线程去扫描,如果发现扫描后依然没有被引用,那么就直接回收了。
二、垃圾回收算法
1、标记-清除算法
分为标记和清除两个阶段,首先标记处需要清除的对象,标记完成之后统一回收掉所有被标记的对象。
缺点:效率低,造成碎片比较多
2、复制算法
把可用内存分为相等的两份,每次只是用一块。当这一块内存用完了,就把所有的存活的对象都复制到另外一份内存块中,然后一次性全部把这块内存清除掉。
现在很多虚拟机就是采用这种方式回收新生代。新生代分为一块大的Eden空间,和两块小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,把Eden和Survivor还存活的对象一次性全部拷贝到另外一块Survivor空间上,最后清理掉Eden和刚才使用的Survivor空间。如果Survivor空间不够时,会向老年代进行借一部分内存。
优点:简单高效,碎片率也比较低。
3、标记-整理算法
如果存活率比较高,那么使用复制算法就不适用。
把所有的存活对象都往前端转移,然后直接清理掉端边界以外的内容。
针对老年代使用。
4、分代收集算法
现在的虚拟机一般都是采用这种方式。
把java堆分为新生代和老年代,新生代则采用复制算法,老年代则采用标记-整理算法。
相关推荐
四大垃圾回收算法:复制算法、标记-清除算法、标记-整理算法、分代收集算法 七大垃圾回收器:Serial、Serial Old、ParNew、CMS、Parallel、Parallel Old、G1 JVM调优:命令行指令,设置堆内存大小的参数
1.4 JVM调优总结(三)-基本垃圾回收算法 9 1.5 JVM调优总结(四)-垃圾回收面临的问题 12 1.6 JVM调优总结(五)-分代垃圾回收详述1 14 1.7 JVM调优总结(六)-分代垃圾回收详述 1.8 JVM调优总结(七)-典型配置...
第四节:垃圾回收算法 1.1标记清除算法 1.2复制算法 1.3 标记整理(标记压缩)算法 第五节:垃圾回收器 1.1Serial/Serial Old收集器 1.2 ParNew收集器 1.3Parallel Scavenge收集器 1.4Parallel Old收集器 1.5CMS...
很好的学习资料,很详细的讲述了JVM性能调优,JVM内存模型,垃圾回收原理算法等等,很适合JAVA程序员阅读。
jvm+ 垃圾算法+垃圾回收概述
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2408349
2.有哪些重要的垃圾回收算法? 图画详细介绍常见的三种垃圾回收算法,包括标记-清除算法、标记-整理算法和标记-复制算法。 3.垃圾回收的具体流程是怎样的? 图画分析介绍垃圾回收机制额分区和算法过程
深入理解JVM垃圾收集算法与垃圾收集器
1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾回收面临的问题 1.5 JVM调优总结(五)-分代垃圾回收详述1 1.6 JVM调优总结(六)-分代垃圾回收详述2 1.7 JVM调优总结(七)-典型配置举例1 1.8 ...
JVM:组成部分、垃圾回收机制和算法、对内存的管理办法。
个人整理 jvm相关知识 包括内存分配机制 垃圾回收机制 垃圾收集器相关 及 垃圾收集算法
Jvm垃圾回收机制 by linux_14胡嘉辉1.如何确定某个对象是“垃圾”? 2.典型的垃圾收集算法3.典型的垃圾收集器
- 了解下我们为什么要学习JVM优化 ...- 了解什么是垃圾回收 - 掌握垃圾会回收的常见算法 - 学习串行、并行、并发、G1垃圾收集器 - 学习GC日志的可视化查看 - Tomcat8的优化 - 看懂Java底层字节码 - 编码的优化建议
1.1 对象优先在Eden区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年代
JVM的内容分享,包含JVM的优化目标、优化原则、JVM组成、内存区域划分、垃圾回收算法、垃圾回收器、FullGC触发时机、对象布局、元空间存储、GC调优
java工程师高级面试之JVM虚拟机底层原理篇:VM种类,内存结构,运行原理,垃圾回收算法,各种垃圾回收器等。
JVM参数调优、垃圾回收算法及原理体系.docx
资源描述: 1.JVM中[垃圾回收相关算法]的所有内容-pdf 2.资源内容:JVM中[垃圾回收相关算法]所有内容 3.学习目标:了解jvm底层原理 4.特点:简单易懂,容易上手 5.使用说明:需要使用pdf打开
NULL 博文链接:https://chenkangxian.iteye.com/blog/1871050
JVM调优总结(三)基本垃圾回收算法.pdf