首页 > 试题广场 >

下列关于垃圾回收的描述正确的是( )

[单选题]
下列关于垃圾回收的描述正确的是( )
  • finalize方法只能被垃圾回收器调用。
  • 一个对象的finalize方法可能被垃圾回收器多次调用。
  • 只有当对象没有任何引用指向时,该对象才能被回收。
  • 当对象不可到达时,该对象可以被垃圾回收器回收。
1. 首先分析选项A: -  finalize 方法不是只能被垃圾回收器调用。在某些情况下,开发人员也可以显式调用对象的 finalize 方法,虽然这种做法不常见且不推荐。所以A错误。 2. 接着看选项B: - 一个对象的 finalize 方法最多只能被垃圾回收器调用一次。如果对象在 finalize 方法执行过程中重新建立了引用,使其可达,那么它就不会被回收了,也不会再次调用 finalize 方法。所以B错误。 3. 再看选项C: - 当对象没有任何引用指向时,该对象可能被回收,但不是绝对的。对象还需要满足其他条件,比如没有在 finalize 方法中重新建立引用等。而且,判定对象是否可回收是一个复杂的过程,不仅仅取决于是否有引用指向。所以C错误。 4. 最后看选项D: - 当对象不可到达时,即没有任何引用链可以到达该对象,该对象可以被垃圾回收器回收。这是垃圾回收的一个基本判断依据。所以D正确。 答案是D。
发表于 2024-10-30 19:13:50 回复(0)
finalize方法在对象被垃圾回收器准备回收之前被调用一次,用于执行清理工作。
发表于 2024-09-24 09:45:39 回复(0)
C项当对象没有任何引用时,并不会被回收,只有当它被判定为不可达之后才能被回收!
发表于 2022-06-12 17:01:36 回复(0)
1.引用计数算法(已被淘汰的算法)
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

目前主流的java虚拟机都摒弃掉了这种算法,最主要的原因是它很难解决对象
之间相互循环引用的问题。尽管该算法执行效率很高。

2.可达性分析算法
目前主流的编程语言(java,C#等)的主流实现中,都是称通过可达性分析(Reachability Analysis)来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。如下图所示,对象object 5、object 6、object 7虽然互相有关联,但是它们到GC Roots是不可达的,所以它们将会被判定为是可回收的对象。

发表于 2021-07-08 17:45:35 回复(0)