首页 > 试题广场 >

下面关于垃圾收集的说法正确的是

[单选题]
下面关于垃圾收集的说法正确的是
  • 一旦一个对象成为垃圾,就立刻被收集掉。
  • 对象空间被收集掉之后,会执行该对象的finalize方法
  • finalize方法和C++的析构函数是完全一回事情
  • 一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此
A,B其实是一个知识点,既一个对象到GC Roots没有任何引用链相连时就是一个可回收对象,可回收对象在被回收之前,JVM会判断是否有finalize方法,如果有则会调用finalize方法,在这个方法里面对象可以自救的。  
C 肯定不对啦 
1.与C++的析构函数不同,析构函数调用确定,而finalize()方法是不确定的,因为finalize()方法在对象被GC回收时调用。 
2.JVM将重写了finalize方法的对象放置于F-Queue队列,稍后会被一个优先级很低的Finalizer线程执行。Finalizer线程随时会终止,为了防止对象的finalize方法执行缓慢,或者发生死循环。
 3.finaliz的设计目的是保证对象在被垃圾收集前完成特定资源的回收或给予对象最后一次重生机会等。 
4. finalize是个不太可控的方法因此并不常用,并且在JDK9+版本被标注为过时方法。
编辑于 2019-08-25 08:39:56 回复(1)
  1. 当对象不再被任何对象引用时,GC会调用该对象的finalize()方法
发表于 2019-09-02 21:06:29 回复(0)
对于D选项(引用计数法),Java虚拟机不是采用的可达性分析法吗?
发表于 2019-08-20 11:32:01 回复(2)
选D,......我误选了B,查资料,得知finalize(),是在垃圾回收之前调用;深入理解JAVA虚拟机中提过,如果想深入理解,请看深入理解JAVA虚拟机,第3.2.4生存还是死亡
发表于 2019-08-16 12:48:19 回复(0)