问题标签 [finalize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
19591 浏览

java - Java和手动执行finalize

如果我finalize()从我的程序代码中调用一个对象,当垃圾收集器处理这个对象时,JVM是否还会再次运行该方法?

这将是一个近似的例子:

是否会显式调用finalize()使JVM的垃圾收集器不在finalize()对象上运行该方法m

0 投票
6 回答
2388 浏览

java - 幻像引用的对象

幻影参考用于事后操作。Java 规范指出,在清除幻像引用本身之前,不会释放幻像引用的对象。

我的问题是:这个功能(对象未释放)有什么用途?

(我想出的唯一想法是允许本机代码对对象进行事后清理,但这并没有多大说服力)。

0 投票
4 回答
11719 浏览

vb.net - VB.NET - 实现 IDisposable 时是否应该添加 Finalize 方法?

在 Visual Studio 中,当我键入“ Implements IDisposable”行时,IDE 会自动添加:

  • 成员disposedValue变量
  • 一种Sub Dispose() Implements IDisposable.Dispose
  • 一种Sub Dispose(ByVal disposing As Boolean)

应该不理Dispose()会,清理代码应该放在Dispose(disposing).

然而Dispose Finalize Pattern说你也应该重写Sub Finalize()call Dispose(False)。为什么 IDE 也不添加这个?我必须自己添加它,还是以某种方式隐式调用它?

编辑:知道为什么 IDE 会自动添加 80% 的所需内容但忽略 Finalize 方法吗?这种功能的全部意义不在于帮助您不要忘记这些事情吗?

EDIT2:谢谢大家的出色回答,现在这很有意义!

0 投票
21 回答
102608 浏览

java - 你为什么要实现 finalize()?

我一直在阅读很多关于 Java 的菜鸟问题finalize(),发现没有人真正明确说明 finalize() 是一种不可靠的资源清理方式,这有点令人困惑。我看到有人评论说他们用它来清理连接,这真的很可怕,因为接近保证连接已关闭的唯一方法是最终实现 try (catch)。

我没有受过 CS 教育,但我已经专业地使用 Java 编程近十年了,而且我从未见过有人finalize()在生产系统中实现过。这仍然不意味着它没有它的用​​途,或者与我一起工作的人一直在做正确的事情。

所以我的问题是,有哪些用例finalize()无法通过语言中的另一个进程或语法更可靠地处理?

请提供具体的场景或您的经验,只是重复 Java 教科书,或者 finalize 的预期用途是不够的,因为这不是这个问题的意图。

0 投票
25 回答
636818 浏览

java - Java有析构函数吗?

Java有析构函数吗?我似乎无法找到任何有关此的文档。如果没有,我怎样才能达到同样的效果?

为了使我的问题更具体,我正在编写一个处理数据的应用程序,并且规范说应该有一个“重置”按钮,可以将应用程序恢复到其刚启动的原始状态。但是,除非应用程序关闭或按下重置按钮,否则所有数据都必须是“实时的”。

通常作为 C/C++ 程序员,我认为这很容易实现。(因此我计划最后实现它。)我构建了我的程序,使所有“可重置”对象都在同一个类中,这样我就可以在按下重置按钮时销毁所有“活动”对象。

我在想如果我所做的只是取消引用数据并等待垃圾收集器收集它们,如果我的用户反复输入数据并按下重置按钮,会不会出现内存泄漏?我也在想,既然 Java 作为一门语言已经相当成熟,应该有一种方法可以防止这种情况发生或优雅地解决这个问题。

0 投票
1 回答
79 浏览

silverlight-2.0 - Silverlight 2 中的最后一步

我一直在开发多个 silverlight 应用程序,但到目前为止,当我从 Visual Studio 测试它们时,它们才在我的系统中运行。现在我正准备推出它,我无法弄清楚完成它的步骤。

0 投票
6 回答
7198 浏览

java - 调用 System.gc() 或 finalize() 方法时,内部 (JVM) 发生了什么?

调用 System.gc() 或 finalize() 方法时,内部 (JVM) 发生了什么?

这真的是收集垃圾还是降低性能?

0 投票
3 回答
70717 浏览

c# - 在 C# 中,类中的析构函数和 Finalize 方法有什么区别?

类中的析构函数和 Finalize 方法之间有什么区别(如果有的话)?

我最近发现 Visual Studio 2008 将析构函数视为 Finalize 方法的同义词,这意味着 Visual Studio 不会让您在一个类中同时定义这两种方法。

例如,下面的代码片段:

在析构函数中调用 Finalize 时出现以下错误:

以下方法或属性之间的调用不明确:“TestFinalize.~TestFinalize()”和“TestFinalize.Finalize()”

如果对 Finalize 的调用被注释掉,则会出现以下错误:

类型“ManagementConcepts.Service.TestFinalize”已经定义了一个名为“Finalize”的成员,具有相同的参数类型

0 投票
1 回答
572 浏览

clr - 最终确定可达表

如果我在类 Foo 中实现析构函数,则 Foo 的实例将在终结队列上密切跟踪。当 Foo 的实例被垃圾收集时,我知道 CLR 会看到终结队列中的条目,并通过将对象移出堆并进入终结可达表来对该对象进行特殊处理。然后......那个垃圾收集周期没有其他任何事情发生?

在下一个垃圾回收周期中总是会调用 finalize() 吗?

为什么在将我的对象复制到 freachable 表后不立即调用 finalize?(这似乎是额外的不必要的复杂性)

0 投票
1 回答
1442 浏览

c# - close, dispose, finalize, GC, Idisposable,....你对它们有清楚的描述吗?

我对关闭、处置、完成、GC、Idisposable 完全感到困惑。哦,你能把它们的详细描述发给我吗?