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

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

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

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

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

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

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

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

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

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

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

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

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

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

9得票2回答
终结器统计

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

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

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

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

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