如何判断对象是否存活
java可通过可达性算法判断一个对象是否还存活
通过一组名为:“GC Roots”的根对象,进行递归扫描,无法从根对象到达的对象就是“垃圾”,可以被回收。
这也是G1、CMS等主流垃圾回收器使用的主要算法。
什么是引用计数法
每个对象都有一个引用计数器,记录引用它的次数。当计数器为零时,对象可以被回收。
引用计数器无法解决循环引用的问题。列如:两个对象互相引用,但不会被其他对象引用,他们的引用次数不会计为零,因此不会被回收。
做可达性分析的时候,应该有哪些前置性的操作?
在进行垃圾回收之前,JVM会暂停所有正在执行的应用线程。
这是因为可达性分析过程必须确保正在分析时,内存中的对象关系不会被应用线程修改。如果不暂停应⽤线程,可能会出现对象引⽤的改变,导致垃圾回收过程中判断对象是否可达的结果不⼀致,从⽽引发严重的内存错误或数据丢失。