7得票1回答
手动调用 `gc()`,是否会立即执行所有 `finalizer`?

我有一些代码怀疑会出现内存泄漏。由于代码使用了 ccall 并且在指针中维护了重要信息,这些指针应该在 finalizer 调用的代码中被释放。 在我的调试中,我正在调用 gc()。我想知道是否这会立即触发所有已经移出作用域的对象所附加的 finalizer。 答案仅与 julie 0.5...

68得票15回答
“Dispose” 方法只适用于包含非托管资源的类型吗?

最近我和同事就实现Dispose和实现IDisposable接口的类型的价值进行了讨论。 我认为对于应该尽快清理的类型,即使没有未受控资源需要清理,实现IDisposable也是有价值的。 我的同事持不同意见。他认为如果没有未受控资源,实现IDisposable是不必要的,因为您的类型最终会被...

24得票4回答
Java 9清理器是否应该优先于终结器?

在Java中,重写finalize方法有些名声不好,尽管我不明白为什么。像FileInputStream这样的类在Java 8和Java 10中都使用它来确保调用close方法。然而,Java 9引入了java.lang.ref.Cleaner,它使用幻象引用机制而非GC终结。起初,我认为这只...

17得票3回答
我需要在 Delphi 中完成记录数组吗?

在我的应用程序中,我有以下记录:TTransaction = record Alias: string Description: string Creation: TDateTime Count: Integer end; 我正在使用这个数组中的这条记录:Transaction...

31得票1回答
为什么Java 9中废弃了finalize()方法?

为什么Java 9中finalize()方法已被弃用? 是的,它可能会被错误地使用(例如仅一次保存对象免受垃圾收集或尝试在其中关闭一些本地资源,虽然这比不关闭好)。同样,许多其他方法也可能被错误地使用。 那么,finalize()是否真的如此危险或绝对无用,以至于必须将其从Java中删除?...

12得票5回答
Java中finalization的目的是什么?

我对finalization的理解是: 为了清除或回收对象占用的内存,垃圾回收器会开始工作。(自动调用?) 然后,垃圾回收器会取消对象的引用。有时,垃圾回收器无法访问对象。那么,将调用finalize进行最终的清理处理,之后才能唤醒垃圾回收器。 以上描述准确吗?

8得票1回答
如何正确释放OleVariant后面的接口?

我正在尝试找到一种安全/确定的方法来释放封装在OleVariant中的接口。 据我所知,Delphi会在过程结束时释放接口引用,但在我的情况下,我必须提前释放它,因为我需要关闭COM。 procedure Test; var LLibrary: OleVariant; begin ...

9得票2回答
终结器统计

有没有一种方法可以获取使用runtime.SetFinalizer注册的总终结器数量,且这些终结器尚未运行? 我们正在考虑向我们的某些产品中添加带有注册终结器的struct,以释放使用malloc分配的内存,该对象可能具有相对较高的分配速率。如果我们能够监视终结器的数量,就可以确保它们不会堆...

9得票1回答
一个对象成为可终结对象的前期成本是什么?

在Java中,关于可终结对象的讨论通常会涉及当不可快速回收可终结对象(和它们相关的资源)时发生的常见间接成本。 目前,我更感兴趣的是可终结性实际的直接成本,包括内存方面和对象分配时间方面。我在许多地方看到了对这种成本存在的间接引用,例如Oracle的最终化内存保留问题文章中提到: 当分配...

41得票6回答
Java的finalizer在本地对等体对象生命周期管理中也应该避免使用吗?

作为一名C++/Java/Android开发者,我有这样的经验,终结器几乎总是一个坏主意,唯一的例外是管理“本地对等”对象,这些对象需要通过JNI调用C/C++代码。 我知道JNI:正确管理java对象生命周期问题,但是这个问题解决的是不使用终结器的原因,即使是对于本地对等体。所以这是一个关...