jjzjj

Finalize

全部标签

c# - 为什么 Finalize/Destructor 示例在 .NET Core 中不起作用?

我正在尝试了解终结和析构函数在C#中的工作方式,我尝试运行System.Object.Finalize中的代码示例(代码复制粘贴,未做任何更改),但输出与预期的不一样,它表明从未调用过析构函数。代码是:usingSystem;usingSystem.Diagnostics;publicclassExampleClass{Stopwatchsw;publicExampleClass(){sw=Stopwatch.StartNew();Console.WriteLine("Instantiatedobject");}publicvoidShowDuration(){Console.Writ

c#终结器抛出异常?

引自MSDN:如果Finalize或Finalize的重写抛出异常,运行时将忽略该异常,终止该Finalize方法,并继续完成过程。但如果我有:~Person(){thrownewException("meh");}然后它会导致运行时异常?附注我知道这永远不应该发生,但是我只是对这种行为感到好奇。我们的一个客户在他们所有的终结器周围都有一个空的trycatch。它甚至没有在出现问题或恢复对象时记录:/ 最佳答案 链接引用的来源很重要。我不得不假设它谈论的是旧版本的.NET,也许是1.x版。它试图“容忍”未处理的异常,不吱声地吞下它们

java - 是否需要java的finalize方法?

我读到的关于javafinalize方法的所有内容都说不要使用它。似乎它几乎永远不会被调用,即使被调用也可能会出现问题。还有一些其他问题询问何时使用它,似乎普遍的共识是从不。我自己从未使用过它(主要是因为警告不要使用),我也没有看到它在任何地方使用过。是否存在适合的情况?有没有别无选择的情况?如果不是,为什么它在那里?是否有内部类使用它并要求该方法可用?或者它只是一些不应该存在的东西?我对什么时候应该使用它不太感兴趣(已经用“从不”回答),但澄清了为什么它甚至在那里给出了“从不”的回答。如果它是如此无用和危险,为什么它没有被贬值和移除? 最佳答案

java - 在 Java 中如何将对象标记为已完成(以便不会第二次调用 finalize 方法)?

主要问题在主题中,但让我展示一下我对Java终结过程的看法,以便我可以问你更多。好吧,gc通过标记所有Activity对象来开始垃圾收集。当所有可达对象都标记为“Activity”时。所有其他对象都不可访问。下一步是检查每个无法到达的对象,并确定是可以立即清除还是应该首先确定。如果对象的finalize方法有主体,那么gc会考虑下一个方法,那么这个对象是可终结的,应该被终结;如果对象的finalize方法有一个空主体(protectedvoidfinalize(){}),那么它是不可终结的,可以立即被gc清除。(我说得对吗?)所有可终结的对象将被放入同一个队列中,以便稍后被一个一个地终

java - 如何定义析构函数?

publicclassA{doublewage;A(doublewage){this.wage=wage;}}//在这段代码中,我应该定义构造函数和析构函数。定义析构函数的代码是什么? 最佳答案 在Java中,没有析构函数,但您可以使用方法Object#finalize()作为解决方法。TheJavaprogramminglanguagedoesnotguaranteewhichthreadwillinvokethefinalizemethodforanygivenobject.Itisguaranteed,however,that

java - 重写Object类的finalize()方法有什么用?

据我所知,在java中,如果我们想手动调用垃圾收集器,我们可以执行System.gc()。1.我们在覆盖的finalize()方法中执行了哪些操作?2.手动调用JVM垃圾回收器是否需要重写finalize()方法? 最佳答案 Whataretheoperationsthatwedoinsideouroverridenfinalize()method?手动分配的空闲内存(通过一些native调用),即不由GC管理。这是一种非常罕见的情况。有些人也放在那里检查,与对象连接的其他资源已经被释放-但它仅用于调试目的并且它不是很可靠。你必须记

java - 对象未被终结且 Finalizer 线程未执行任何操作

在我们的服务器上,我们开始遇到OutOfMemoryError问题。我们使用EclipseMemoryAnalysis分析了堆转储,发现有许多对象被保留以进行终结(大约占堆的2/3):我们发现,它可能是一些finalize()方法阻塞。我发现了几个关于这个问题的错误报告(here或here),它总是在Finalizer线程堆栈中表现出来,它在某处被阻塞。但在我们的例子中,这个线程正在等待:"Finalizer"daemonprio=10tid=0x43e1e000nid=0x3ffinObject.wait()[0x43dfe000]java.lang.Thread.State:WAI

java - finalize 方法中的异常

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:methodfinalizeandexceptions当对象即将从内存中释放时,垃圾收集器调用finalize()方法。在finalize()方法中引发异常时会发生什么情况?GC会继续进行并释放内存,还是GC会停止该对象的进程?

java - 为什么在覆盖 finalize() 方法时首选调用 super.finalize()?

我收到SonarQube错误:“强烈建议在此方法实现结束时调用super.finalize(),以防父实现也必须释放一些系统资源。”但我发现Object类没有实现finalize方法。protectedvoidfinalize()throwsThrowable{}那么为什么需要调用super.finalize()呢? 最佳答案 这不是必须的,它是应该遵循的finalizer写成语。如果在未来的任何时候,您重构了您的代码并且您的类扩展了一些可能具有finalize方法的其他类,这种做法将防止出现奇怪的错误。成语是try{//Dowha

java - 优雅地完成 SoftReference 引用对象

我正在使用一个搜索库,它建议将搜索句柄对象保持打开状态,因为这有利于查询缓存。随着时间的推移,我观察到缓存趋于膨胀(几百兆并不断增长)并且OOM开始出现。没有办法强制执行此缓存的限制,也没有计划它可以使用多少内存。所以我增加了Xmx限制,但这只是解决问题的临时方法。最终我想使这个对象成为java.lang.ref.SoftReference的referent。因此,如果系统的可用内存不足,它会释放该对象,并根据需要创建一个新对象。这会在重新启动后降低一些速度,但这是比遇到OOM更好的选择。我看到的关于SoftReferences的唯一问题是没有干净的方法来最终确定它们的引用对象。在我的