JVM笔记(4)--对象已死?和方法区回收

第三章 垃圾回收器和内存分配策略

            第一节 判断对象是否死亡和回收方法区

    一 判断对象是否死亡:

      1)在Java主流的虚拟机中是通过 可达性分析算法

      可达性分析算法:是指通过CG Roots的节点集通过引用关系开始搜索对象,搜索到的对象的路径称之为“可达链”,若搜索到的对象还在这条链上则该对象还可以使用 ,反之对象不能使用。

      2)而对于引用计数算法是通常用在python,游戏的脚本语言中微软的com(component object model)技术中。

            引用计数算法:在Java堆单独开辟一个存储引用计数器的内存空间,当对象被引用该计数器值就加一,当引用失效时,该计数器的值就减一,当计数器的值为0时,该对象就会消亡。

    二 回收方法区主要包括 废弃的常量 和 不在使用的类型:

      1)常量回收要求:例如 “Java”字符串, 没有字符串对象引用常量池中如 “java”这个常量,在虚拟机中没有任何地方引用这个字面量

      2)一个类型是否属于“不在被使用的类”:1 所有实例都被回收。2加载该类的类加载器被卸载了。3该类的对象没有被任何地方引用,无法通过反射访问到该类的方法。

    总结:为什么要了解垃圾收集和内存分配?

                       主要时对于我们排查各种内存溢出,内存泄漏问题。

未完待续!!!

原文地址:https://www.cnblogs.com/linyu1/p/13831135.html