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

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

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

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

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

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

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

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

18得票1回答
C#中的try-finally语句在迭代器中是否会破坏CERs?

显然,约束执行区域保证并不适用于迭代器(可能是因为它们的实现方式),但这是一个错误还是设计如此?[请参见下面的示例。] 即,使用约束执行区域和迭代器的规则是什么?using System.Runtime.CompilerServices; using System.Runtime.Const...

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

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

13得票1回答
C# - "destructors are not inherited"实际上是什么意思?

C# Language Specification 3.0的第10.13节“析构函数”指出: 析构函数不会被继承。因此,除了在该类中声明的析构函数外,类没有其他析构函数。 C# Programming Guide的“析构函数”部分包含一个示例,演示了如何调用继承层次结构中的析构函数,其...

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

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

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

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

9得票2回答
终结器统计

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