问题标签 [finalization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
281 浏览

delphi - 在从内存中卸载单元之前不释放对象是否可以(完成部分)?

由于该进程将被操作系统杀死,并且无论如何分配的所有内存都将被回收,因此可以不在单元完成部分释放对象/资源吗?

例如,

0 投票
2 回答
1788 浏览

delphi - 记录需要最终确定 - 文件中不允许

我是 delphi 的初学者,我遇到了最终错误 e2155。我正在使用 RAD 10 并尝试在移动设备上运行我的程序。它在我的 Windows 机器上运行良好,但是当我更改为 Android 或 IOS 时,它给了我最终确定错误。

编码:

我已经尝试用 [] 限制字符串的长度,但它告诉我:';' 预期但找到了“[”。希望我能得到一些答案,因为我花了一段时间没有任何成功。提前致谢!!

0 投票
1 回答
195 浏览

c# - 最终确定并推广到第 1 代

我的问题是,我在第 0 代中有对象,并且我还覆盖了终结方法。

当 gc 收集到 gen0 时,看到它必须最终确定,所以不立即释放它们,并将这些对象提升到 gen1?因此,只有当 gc 收集到 gen1 时,这些才会被释放。假设这些对象不会再被使用,它们就是垃圾

谢谢!

0 投票
1 回答
1212 浏览

c# - 终结句柄保留在内存中。如何删除此引用?

我需要优化我的应用程序的内存使用。所以我使用了 .net 性能分析器......但是我的应用程序中的一些引用仍然存在,即使我强制它收集,GC 也不会收集它。

活动的引用是“终结句柄”类型。我不知道该怎么做才能删除这种参考......请帮忙。

这张照片就是我的意思

0 投票
0 回答
107 浏览

gcc - 编译错误 GNU Fortran - 完成

我正在尝试使用 GNU 编译器编译大代码。但是,当我尝试使用 GNU Fortran (GCC) 6.1.0 编译附加的代码时,一些使用 type 的例程会fn_grid_nodes_t抛出此错误消息:

@bld .. 链接,... 架构 x86_64 的未定义符号:
“___final_fn_core_grids_dts_Fn_grid_nodes_t.3665”,引用自:___fn_depot_utils_MOD_fn_clean_depot in fn_depot_utils.o

注意使用 Intel 编译器 > 15.0,编译成功。我怀疑这是由于 GNU 和英特尔如何处理最终确定。

有没有人对此有任何建议/解决方法?

感谢您的回答 - 一些额外的细节:

  • 操作系统 = MacOS Sierra 10.12.1
  • 编译:生成文件
  • 标志:-g -Wall -Wextra -fbacktrace -fbounds-check -fcheck-array-temporaries
  • 优化:-O2

模块编译示例:

导致问题的makefile部分:

请注意,fn_depot_common.mod 包含模块 fn_core_grids_dts。这绝对不是与缺少的模块相关的问题,而没有包含在需要的地方。

0 投票
1 回答
114 浏览

java - 如果我们覆盖 finalize 方法,为什么可以增加分配阶段?

我听说在 Joshua Bloch 写的书中,如果我们重写 finalize 方法,分配和内存收集可能会增加到 430 倍。

对我来说很明显,内存收集可能会更慢,因为 gc 需要额外的迭代来释放内存。

但是为什么分配阶段可以增加呢?

0 投票
1 回答
436 浏览

java - 具有空队列的 PhantomReference

Java允许编写:

在这种情况下new Object()会被收集吗?

据我了解,幻影参考是finalize() 方法使用的替代方法。

在队列中出现参考后,我需要做一些额外的动作然后运行clear()

java doc 保留:

可以使用空队列创建幻像引用,但这样的引用完全没有用:它的 get 方法将始终返回 null,并且由于它没有队列,因此永远不会入队

如果它永远不会入队是什么意思?

据我了解,这意味着在 finalize 方法调用之后不会将引用添加到 referenceQueue 中。因此可能会导致:
1. 对象内存将被立即清除
2. 对象内存不会被清除

哪种情况正确?

0 投票
1 回答
476 浏览

c# - 终结器线程 ID

我们看到我们的一个 WCF 应用程序存在内存泄漏,我想知道是否有人可以为我澄清一些事情。使用 windbg 我运行了 !finalizequeue,它显示每个堆集中的数千个对象为“准备完成”。

这告诉我终结器线程被卡住了。所以我在 windbg 中运行了 !Threads 命令来获取终结器线程 id,这就是它所显示的......

列表中的第一个线程是终结器线程,线程 id 是 XXXX。这意味着什么?我猜这意味着线程不再存在,或者没有运行。有人可以确认或纠正我的理解吗?

更新

我运行了 ~2s;kb 命令,就像评论中建议的 Kjell Gunnar 一样,这是输出。

ZwRemoveIoCompletion 是什么意思?

0 投票
0 回答
603 浏览

.net - Freachable队列的目的是什么

我正在学习 .net 基础知识,但我无法理解为什么 .net 需要易碎队列,为什么最终确定的东西不能在最终确定队列中发生。

任何帮助我理解这一点的帮助将不胜感激。谢谢!

0 投票
1 回答
239 浏览

fortran - 终结例程是否需要元素才能在超出范围的可分配数组的元素上调用?

如果我有一个可终结派生类型的可分配数组,当数组超出范围时,是否会在每个单独的元素上调用终结器?

这是一个说明问题的小代码示例:

请注意,该程序会泄漏在 .方法中dontLeakMe分配的数组。起初这对我来说有点令人惊讶,但是后来我发现可以通过声明 finalizer 来解决这个问题。gfortran 和 ifort 的行为方式相同,因此我假设这种行为遵循 Fortran 2003 标准。New()LeakyTypeelemental

谁能证实这一点?老实说,我很难理解标准在这个特定点上所说的内容。

现在我也看不出声明我所有的终结器元素有多大用处。这有我忽略的任何应用程序吗?