第三章 垃圾回收器和内存分配策略
第一节 判断对象是否死亡和回收方法区
一 判断对象是否死亡:
1)在Java主流的虚拟机中是通过 可达性分析算法。
可达性分析算法:是指通过CG Roots的节点集通过引用关系开始搜索对象,搜索到的对象的路径称之为“可达链”,若搜索到的对象还在这条链上则该对象还可以使用 ,反之对象不能使用。
2)而对于引用计数算法是通常用在python,游戏的脚本语言中微软的com(component object model)技术中。
引用计数算法:在Java堆单独开辟一个存储引用计数器的内存空间,当对象被引用该计数器值就加一,当引用失效时,该计数器的值就减一,当计数器的值为0时,该对象就会消亡。
二 回收方法区主要包括 废弃的常量 和 不在使用的类型:
1)常量回收要求:例如 “Java”字符串, 没有字符串对象引用常量池中如 “java”这个常量,在虚拟机中没有任何地方引用这个字面量
2)一个类型是否属于“不在被使用的类”:1 所有实例都被回收。2加载该类的类加载器被卸载了。3该类的对象没有被任何地方引用,无法通过反射访问到该类的方法。
总结:为什么要了解垃圾收集和内存分配?
主要时对于我们排查各种内存溢出,内存泄漏问题。
未完待续!!!