`

JVM判断对象存活的算法

    博客分类:
  • JVM
 
阅读更多
   JVM判断对象存活的算法
引用计数算法(reference counting):垃圾收集的早期策略。一个对象被创建时,为该对象分配一个引用计数器。当有地方引用它时,计数加1。当一个对象的引用超过了生存期或者被设置一个新的值时,引用计数减1。任何引用计数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集的时候,它引用的任何对象计数值减1。在这种方法中,一个对象被垃圾收集后可能导致后续其他对象的垃圾收集行动。

此算法实现简单,判断效率高;但很难解决对象之间的相互循环引用,如,A对象有一个对B对象的引用,B对象又反过来引用A对象,除此之外这两个对象无任何引用,但引用计数都不会为0,无法回收它们。另外,每次引用计数的增加或者减少也带来额外开销。

根搜索算法(GC Roots Tracting):通过一系列的名为“GC Roots”对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则此对象是不可用的。

可作为GC Roots的对象包括:

1.虚拟机栈(栈帧中的局地变量表)中的引用的对象;
2.方法区中的类静态属性引用的对象和常量引用的对象;
3.Native方法栈中JNI的引用的对象
关于引用:强-->软-->弱-->虚

强引用(Stong Reference):指程序代码中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收被引用的对象;

软引用(Soft Reference):用来描述一些还有用,但并非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中并进行第二次回收。如果这次回事还是没有足够的内存,才会抛出内存溢出异常;

弱引用(Weak Reference):用于描述非必需对象,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收弱引用关联的对象;

虚引用(Phantom Refenrece):对对象的生存时间无影响,无法通过虚引用来取得对象实例。它的唯一目的就是希望能在这个对象别回收时收到一个系统通知。
分享到:
评论

相关推荐

    详解JVM的垃圾回收算法来做细节.docx

    我们知道目前的JVM的垃圾回收器都是采用 可达性分析算法 标记存活对象,该算法首先需要找到GC Roots,然后通过这些根节点向下搜索,能搜索到的就标记为存活对象,未被标记的最后就会被垃圾回收器回收。那你是否想...

    JVM 知识点整理:GC垃圾收集器及相关算法

    JVM 知识点整理:GC垃圾收集器判断哪些对象需要回收引用计数器算法可达性分析算法引用还有分类(了解)“缓刑” finalize(了解)开始垃圾收集标记 – 清除算法复制算法标记 – 整理算法分代收集算法HotSpot 算法...

    Jvm1.8_GC.mmap

    再次发生gc时,From区超过年龄的对象会被移入年老代,其他存活对象和Eden中的存活对象被复制到To区,Eden无法完成移动的对象被移入年老区。 Major GC发生在Old Generation区域被占满时,Major GC与Minor GC算法...

    03-VIP-JVM内存分配机制与垃圾回收算法1

    1.1 对象优先在Eden区分配 1.2 大对象直接进入老年代 1.3 长期存活的对象将进入老年代

    深入理解JVM内存结构及运行原理全套视频加资料.txt

     第34讲 垃圾回收-判断对象是否存活算法-可达性分析法详解 00:07:09  第35讲 垃圾回收算法-标记清除算法 00:04:36  第36讲 垃圾回收算法-复制算法 00:14:35  第37讲 垃圾回收算法-标记整理算法和分代收集...

    JVM面试题.pdf

    * 引用链法:通过一种 GC ROOT 的对象(方法区中静态变量引用的对象等)来判断,如果有一条链能够到达 GC ROOT 就说明,不能到达 GC ROOT 就说明可以回收。 五、SafePoint SafePoint 是 JVM 中的一种机制,用于...

    深入理解Java虚拟机视频教程(jvm性能调优+内存模型+虚拟机原理)视频教程

    第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:07:09分钟 | 第35节垃圾回收算法-标记清除算法00:04:36分钟 | 第36节垃圾回收算法-复制算法00:14:35分钟 | 第37节垃圾回收算法-标记整理算法和分代收集...

    Java新生代老年代的划分及回收算法

    JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。 Java堆是垃圾回收器管理的主要区域,百分之九十九的垃圾回收发生在Java堆,另外百分之一发生在方法区,因此又称之为”GC堆”。根据JVM规范规定的内容,...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    65 3.5.1 对象优先在Eden分配 / 66 3.5.2 大对象直接进入老年代 / 68 3.5.3 长期存活的对象将进入老年代 / 69 3.5.4 动态对象年龄判定 / 71 3.5.5 空间分配担保 / 73 3.6 本章小结 / 75 第4章 虚拟机性能监控...

    超硬核!!!一篇文章搞定整个JVM的垃圾回收系统

    JVM的垃圾回收机制JVM的垃圾回收机制1 什么是垃圾回收机制2 finalize方法作用3 新生代、老年代、永久代(方法区)的区别3.1 为什么要这样分代:3.2 Minor GC、Major GC、Full GC区别及触发条件4 如何判断对象是否存活...

    JVM面试相关1

    1. 标记和清除的效率都不高 2. 会产生大量的碎片,而导致频繁的回收 1. 需要浪费额外的内存作为复制区 2. 当存活率较高时,复制算法效率会下降 1. 当

    java核心知识点整理.pdf

    * 复制算法(Copying):将内存划分为等大小的两块,每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉。 Java线程 Java线程是Java语言的一种基本组件,用于实现多线程...

    java虚拟机知识点整理

    自己看书整理的 java虚拟机精品知识点 java内存区域与内存溢出处理 虚拟机栈和本地方法栈区别 对象定位访问 ...3 标记-整理算法:与标记清除算法类似,不过在清除阶段不是直接回收,而是首先让所有存活的对象

    Java虚拟机

    3.6.3 长期存活的对象将进入老年代 3.6.4 动态对象年龄判定 3.6.5 空间分配担保 3.7 本章小结 第4章 虚拟机性能监控与故障处理工具 4.1 概述 4.2 JDK的命令行工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 ...

    个人对JVM五大部分的总结(欢迎网友指点、补充、指出错误)

    新分配的对象先到新生代的Eden区,要是Eden放不下,就会触发Minor GC垃圾回收,新生代使用的GC算法为引用计数法,首先Eden中存活的对象(仍然有在程序运行中被引用,这个引用可能是Method方法区中的常量池存储的引用...

    超级有影响力霸气的Java面试题大全文档

    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 15、final, finally, finalize的区别。  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 ...

    Java并发编程(学习笔记).xmind

    基于一种可能失效的观察结果来做出判断或执行某个计算 复合操作:执行复合操作期间,要持有锁 锁的作用 加锁机制、用锁保护状态、实现共享访问 锁的不恰当使用可能会引起程序性能下降 对象的...

    java 面试题 总结

    Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 12、final, finally, finalize的区别。  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 ...

Global site tag (gtag.js) - Google Analytics