当前位置: 首页 > 知识库问答 >
问题:

重写finalize(),在其中引用对象

翁建弼
2023-03-14

如果重写finalize()并引用一个对象会发生什么。那个对象会被垃圾回收吗?从内存中清除该对象的另一种方法是什么?

共有1个答案

葛勇锐
2023-03-14

Finalize()被设计为由垃圾收集器调用以移除被引用的对象,如果在调用Finalize()之前重新引用了一个对象,那么您可以简单地防止GC销毁它,因为它现在再次有了引用,这是安全的,即假设它在被引用期间没有被引用,这可能会导致问题。

 类似资料:
  • 我们最近将消息处理应用程序从Java7升级到Java8。自升级以来,我们偶尔会发现一个异常,即在读取流时,流已被关闭。日志记录显示终结器线程正在对保存流的对象调用(这反过来会关闭流)。 守则的基本大纲如下: 和是自制的MIME/HTTP库的一部分。扩展,它具有以下特性: 异常发生在的调用链中,如下所示: 写入部件的标题,然后调用 调用我们的实用工具方法将内容流式传输到输出 只返回传入contstr

  • 当我们不知道任何给定对象的finalize()方法何时可以运行时,我们需要在java中重写finalize()方法的哪里?我们可以在finalize()中关闭什么类型的资源?GC调用finalize()方法的最佳机会是什么?

  • 我最近一直在翻阅几本书,以便自学Java幸运的是,主要是由于运气,我遇到的困难很少。这种情况刚刚改变。 我在继承和整个超类子类设置下阅读了下面的一节 --创建新的超类对象时,与所有对象一样,会为其指定一个引用(本例中为superReference) --如果创建了一个新的子类对象(定义子类扩展了超类),然后superReference引用被设置为引用该对象而不是原始对象,我的理解是,由于引用是针对

  • 问题内容: 主要问题在主题中,但是让我展示一下我对Java终结处理的看法,以便我可以再问您一点。 gc通过标记所有活动对象开始垃圾收集。当所有可到达的对象都标记为“活动”时。所有其他对象均不可访问。下一步是检查每个无法到达的对象,并确定是否可以立即将其清除或应首先完成。 如果对象的finalize方法具有主体,则gc会考虑采用另一种方法,然后将此对象终结并应终结。 如果对象的finalize方法的

  • 正在从其他模式访问表数据,并在oracle过程中插入到当前模式表中,但无法编译过程获得错误错误(5,27): PL/SQL: ORA-00942:表或视图不存在。 但当我直接从表中选择数据(在其他模式中)时,我能够获取数据,但不能在过程中获取数据。我也拥有所有必需的权限。 以下是程序。

  • 我不相信为什么下面的陈述是有效的并且不会引发异常。 somelist是空的,首先检查if()是有效的,但是如何获取空引用的大小呢?这不违法吗? 还是它是这样工作的: 仅当条件1为真时,检查条件2? 因为我不相信,虽然我通过编写测试代码来确认。我总是喜欢下面: 请帮助我理解逻辑