美文网首页JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统
java虚拟机如何判断对象已经死亡,需要被GC回收.

java虚拟机如何判断对象已经死亡,需要被GC回收.

作者: 励志做一名老中医 | 来源:发表于2018-04-28 15:41 被阅读13次

    java的一个优点就是不用程序员手动回收垃圾,虚拟机会自动帮用户进行操作.

    那么虚拟机是如何知道这个对象已经无用可以被回收了那?


    1.引用计数器(java虚拟机并不用他,有bug,太菜)

        引用计数法,简单解释就是在对象上添加一个计数器,有人引用他就给他加1,引用失效了就减1,为0就是没人要的,就得被回收.

    但是这种方法有bug,比如

    我们这里有AA,BB两个对象,如果他俩都new对象 ,然后指定自己的bb属性为对方,那么他俩永远是1,也就不可能被回收了.

    这样如果是使用程序计数器的就完犊子了.

    2.可达性分析算法

        从字面上看,意思就是不可到达就该被回收了,那在虚拟机中是哪里到哪里那?

    虚拟机中有个GC ROOTS(这是个泛称),我们一GC ROOTS为起点,想下搜索引用,当一个GC ROOTS对象没有与任何对象有引用链的存在,就证明这个对象不可用的.

    那么究竟哪些对象可以做GC ROOTS那?

    在虚拟机栈的栈帧中引用的对象,在方法区引用的对象,在本地方法栈引用的变量都可以作为GC ROOT.

    未完待续...

    相关文章

      网友评论

        本文标题:java虚拟机如何判断对象已经死亡,需要被GC回收.

        本文链接:https://www.haomeiwen.com/subject/ejuglftx.html