finalization相关内容
主要问题在主题中,但让我展示一下我对 Java 中完成过程的看法,以便我可以问你更多问题. gc 通过标记所有活动对象开始垃圾收集.当所有可达对象都被标记为“活动"时.所有其他对象都无法访问.下一步是检查每个无法到达的对象,并确定它是否可以立即被清扫,或者应该首先完成.如果对象的 finalize 方法有一个主体,那么 gc 会考虑下一个方法,那么这个对象是可终结的并且应该被终结;如果对象的
..
Java允许写: new PhantomReference(new Object(), null) 这种情况下new Object()会被收集吗? 据我了解,幻像引用是 finalize() 方法用法的替代方法. 在队列中出现引用后,我需要做一些额外的操作,然后运行 clear() java 文档保留: 可以使用空队列创建幻像引用,但是这样的引用是完全没用的:它的
..
我听说在 Joshua Bloch 写的书中,如果我们重写 finalize 方法,分配和内存收集可能会增加到 430 次. 对我来说很明显,内存收集可能会更慢,因为 gc 需要额外的迭代来释放内存. 但是为什么分配阶段可以增加呢? 解决方案 我已经搜索了原文: 在我的机器上,创建和销毁一个简单对象的时间大约是5.6 纳秒.添加终结器会将时间增加到 2,400 ns.换句
..
我最近和一位同事讨论了 Dispose 的值和实现 IDisposable 的类型. 我认为为应该尽快清理的类型实现 IDisposable 是有价值的,即使没有要清理的非托管资源. 我的同事想法不同;如果您没有任何非托管资源,则无需实施 IDisposable,因为您的类型最终会被垃圾回收. 我的论点是,如果您有一个想要尽快关闭的 ADO.NET 连接,那么实现 IDispos
..
如果我有一个可分配的可终结派生类型的数组,当数组超出范围时,是否会在每个单独的元素上调用终结器? 这是一个说明问题的小代码示例: 模块 LeakyTypeModule隐式无私人的类型,公共 :: LeakyType真实的,指针:: dontLeakMe(:) =>空值()包含程序 :: 新final :: 终结器端型包含子程序 New(self, n)类(LeakyType),意图(出):
..
我有一个使用静态链接的运行时包以及使用它们的设计时包的应用程序。由于某些原因,任何单元最终确定部分中的代码都不会在运行时运行(我不知道何时开始发生)。 完成 ShowMessage('Goodbye'); 结尾。 关闭Delphi会显示该消息,但不会显示我的应用程序关闭时的消息。奇怪的是,如果我在ShowMessage上放置一个断点,它将在此处中断但不执行该行。如果终结
..
在Java中,重载finalize方法会带来糟糕的说唱声,尽管我不明白为什么.诸如FileInputStream之类的类使用它来确保在Java 8和Java 10中都调用close.但是,Java 9引入了java.lang.ref.Cleaner,它使用PhantomReference机制而不是GC终结.起初,我认为这只是将终结处理添加到第三方类中的一种方法.但是,其javadoc 显示了一个用
..
我们注意到有关VB中内存管理的一个有趣的问题,我们不了解.如果有人可以帮助我们,请这样做. 我们有一个简单的类,只有一个事件.我们创建并销毁了5000个此类的实例,在运行测试之前,我们先读取了进程的内存使用情况.最后,我们强制GC并再次检查内存.我们注意到的是,我们的内存不断增长.我们在C#中进行了相同的示例,但没有遇到此问题.现在是有线点.如果我们省略类中的事件声明,则将按预期清除内存.是
..
Java中可终结对象的讨论通常讨论当最终化对象(及其相关资源)无法快速垃圾收集时发生的常见间接成本。 我是目前,更感兴趣的是,无论是在内存方面还是在对象分配时间内,可以最终确定的实际直接成本。我已经在很多地方看到了这种成本存在的倾向性,例如, Oracle关于最终化内存保留问题的文章说明: 当 obj 时在分配时,JVM在内部记录 obj 是可终结的。这通常会减慢现代JVM的快速分配路
..
我对最终化的理解是: 为了清理或回收对象占用的内存,垃圾收集器开始运行。 (自动被调用?) 垃圾收集器然后取消引用该对象。有时,垃圾收集器无法访问该对象。然后调用finalize进行最后的清理处理,之后可以调用垃圾收集器。 这是否是对finalization的准确描述? 解决方案 垃圾收集器在后台自动运行(虽然它可以被显式调用,但对此的需求应该很少)。它基本上只清理其他对
..
Java允许编写: $ p $ 新的PhantomReference(new Object(),null) 在这种情况下将会收集新的Object()吗? 据我所知,幻像引用是 finalize()方法的一种替代方法。 在队列中出现引用后,我需要执行一些额外的操作,然后运行 clear() java文档保留: 可以用空队列创建幻影引用,但 这样的引用是完全的无用
..
我的程序崩溃了,它是VS的可视化工具,所以它很难调试它,我试图做出转储并使用WinDbg来研究它,但它不成功。 所以,现在我尝试以编程方式将我的手放在该列表上,但我不知道如何。感谢。 解决方案 我不认为有一种方法可以通过.NET的托管框架类库获得终止队列FCL)。我怀疑如果你想以的方式执行而不是使用WinDbg进行调试,你(就像WinDbg和类似的工具)需要使用CLR的非托管调试&为
..
我听说在Joshua Bloch的书中写道,如果我们重写finalize方法,分配和内存集合可能增加到430倍。 对我来说很清楚内存集合可以工作得更慢,因为gc需要额外的迭代才能释放内存。 但为什么可以增加分配阶段? 解决方案 我已经搜索了原始声明: 在我的机器上,创建并销毁一个简单的对象大约是 5.6 ns。添加终结器可将时间增加到2,400 ns。换句话说,使用终结
..
主题是主题,但让我展示我对Java最终化过程的看法,以便我可以多问你一点。 gc通过标记所有活动对象来启动垃圾收集。当所有可到达的对象被标记为“活着”时。所有其他对象都无法访问。下一步是检查每一个无法访问的对象,并确定它现在是否可以被修改,或者应该首先完成。 gc认为如果对象的finalize方法有一个body,接下来的方法是这个对象可以finalizable并且应该被finalized;如
..
如果我有一个可终结派生类型的可分配数组,那么当数组超出范围时,会在每个单独元素上调用终结器? 这是示例问题的小代码示例: module LeakyTypeModule 隐式无 私有 type,public :: LeakyType real,pointer :: dontLeakMe(:) => null() 包含 过程::新建 final ::终结符 结束类型
..
我有两个单位unitA和unitB。 TFU在unitB中声明。 是否可以安全地调用B.Free完成unitA? 如何依赖于在dpr中unitA和unitB的顺序? 在执行unitA定稿时,我可以确定unitB是否存在? unit unitB; 接口 type TFoo = class // code ... end; // code ....
..
我将代码放在单独的单元中,并将其首先包含在dpr文件的uses子句中,如下所示: project Project1; 使用 MyUnit,//
..
我最近有关于的Dispose 和实现类型的IDisposable 。 我觉得这是在实施的IDisposable 为应清理各类尽快,即使没有非托管资源清理 我的同事认为,不同的;实施的IDisposable 如果你没有任何非托管资源为你的类型,最终会被垃圾收集是没有必要的。 我的观点是,如果你有一个ADO.NET连接,你想使用新的,然后实施的IDisposable 和尽快关闭MyThingWi
..
摘要: C#/。NET被认为是垃圾收集。 C#有一个析构函数,用来清洁资源。当对象A被垃圾回收在同一行我尝试克隆它的可变成员之一发生什么事?显然,在多处理器上,有时,垃圾收集胜... 问题 今天,在C#的一堂训练课上,老师给我们看了其中载有关于多处理器上运行,只有当错误一些code。 我会总结说,有时,编译或JIT砸了从其调用的方法返回前调用C#类对象的终结。 满code,在Visual
..