1、如何判断一个对象死亡?
当一个对象已经不再被任何的存活对象继续引用时(即没人用),就可以宣判为已经死亡。
判断对象存活的算法一般有两种:引用计数算法和可达性分析算法。
2、 什么是引用计数算法?
引用计数算法(Reference Counting)比较简单,对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。
对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计数器就减1。
只要对象A的引用计数器的值为0,即表示对象A不可能再被使用,可进行回收。
3、引用计数算法的优缺点:
优点:实现简单,垃圾对象便于辨识;判定效率高,回收没有延迟性,缺点:
它需要单独的字段存储计数器,这样的做法增加了存储空间的开销。每次赋值都需要更新计数器,伴随着加法和减法操作,这增加了时间开销。引用计数器有一个严重的问题,即无法处理循环引用的情况。这是一条致命缺陷,导致在]ava的垃圾回收器中没有使用这类算举


4、java是否采用的引用计数法
-Xms30M-Xmx30M-XX:+PrintGCDateStamps-XX:+PrintGCDetails-XX:+PrintHeapAtGC

Java 中的垃圾回收机制没有使用引用计数法,而是基于可达性分析算法来判断对象是否可被回收。


5、什么是可达性分析算法
可达性分析算法也称为引用链法(GCRoots),它的核心目的就是判断Java对象是否存活?相对于引用计数算法而言,可达性分析算法不仅同样具备实现简单和执行高效等特点,更重要的是该算法可以有效地解决在引用计数算法中循环引用的问题,防止内存泄漏的发生。

6、哪些对象可以作为GCROOTs


7、可达性分析算法如何判定一个对象死亡

8、如何把一个死亡对象复活?


9、关于:Object对象中的finalize() 方法
1.调用finalize0 方法的时机: 当JVM 确定不再有指向该对象的引用时,垃圾收集器在对象上调用该方法。2.fnalize( )方法的作用: JVM 调用该方法,表示该对象即将"死亡",之后VM就可以回收该对象了。有点类似对象生命周期的临终方法。
3.通过使用finalize方法可以实现对象的自我拯救,但是只能拯救一次
4.打开jvisualvm 查看 Finalizer线程

10、内存溢出怎么办,GCROOTs分析定位原因


11、OOM分析

