如何判断对象是否存活

java可通过可达性算法判断一个对象是否还存活

通过一组名为:“GC Roots”的根对象,进行递归扫描,无法从根对象到达的对象就是“垃圾”,可以被回收。

如何判断对象是否存活_第1张图片

这也是G1、CMS等主流垃圾回收器使用的主要算法。

什么是引用计数法

每个对象都有一个引用计数器,记录引用它的次数。当计数器为零时,对象可以被回收。

如何判断对象是否存活_第2张图片

引用计数器无法解决循环引用的问题。列如:两个对象互相引用,但不会被其他对象引用,他们的引用次数不会计为零,因此不会被回收。

做可达性分析的时候,应该有哪些前置性的操作?

在进行垃圾回收之前,JVM会暂停所有正在执行的应用线程。

这是因为可达性分析过程必须确保正在分析时,内存中的对象关系不会被应用线程修改。如果不暂停应⽤线程,可能会出现对象引⽤的改变,导致垃圾回收过程中判断对象是否可达的结果不⼀致,从⽽引发严重的内存错误或数据丢失。

你可能感兴趣的:(八股:JVM篇,jvm,java,面试,八股文)