问题标签 [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.
delphi - 在从内存中卸载单元之前不释放对象是否可以(完成部分)?
由于该进程将被操作系统杀死,并且无论如何分配的所有内存都将被回收,因此可以不在单元完成部分释放对象/资源吗?
例如,
delphi - 记录需要最终确定 - 文件中不允许
我是 delphi 的初学者,我遇到了最终错误 e2155。我正在使用 RAD 10 并尝试在移动设备上运行我的程序。它在我的 Windows 机器上运行良好,但是当我更改为 Android 或 IOS 时,它给了我最终确定错误。
编码:
我已经尝试用 [] 限制字符串的长度,但它告诉我:';' 预期但找到了“[”。希望我能得到一些答案,因为我花了一段时间没有任何成功。提前致谢!!
c# - 最终确定并推广到第 1 代
我的问题是,我在第 0 代中有对象,并且我还覆盖了终结方法。
当 gc 收集到 gen0 时,看到它必须最终确定,所以不立即释放它们,并将这些对象提升到 gen1?因此,只有当 gc 收集到 gen1 时,这些才会被释放。假设这些对象不会再被使用,它们就是垃圾
谢谢!
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。这绝对不是与缺少的模块相关的问题,而没有包含在需要的地方。
java - 如果我们覆盖 finalize 方法,为什么可以增加分配阶段?
我听说在 Joshua Bloch 写的书中,如果我们重写 finalize 方法,分配和内存收集可能会增加到 430 倍。
对我来说很明显,内存收集可能会更慢,因为 gc 需要额外的迭代来释放内存。
但是为什么分配阶段可以增加呢?
java - 具有空队列的 PhantomReference
Java允许编写:
在这种情况下new Object()
会被收集吗?
据我了解,幻影参考是finalize()
方法使用的替代方法。
在队列中出现参考后,我需要做一些额外的动作然后运行clear()
java doc 保留:
可以使用空队列创建幻像引用,但这样的引用完全没有用:它的 get 方法将始终返回 null,并且由于它没有队列,因此永远不会入队
如果它永远不会入队是什么意思?
据我了解,这意味着在 finalize 方法调用之后不会将引用添加到 referenceQueue 中。因此可能会导致:
1. 对象内存将被立即清除
2. 对象内存不会被清除
哪种情况正确?
c# - 终结器线程 ID
我们看到我们的一个 WCF 应用程序存在内存泄漏,我想知道是否有人可以为我澄清一些事情。使用 windbg 我运行了 !finalizequeue,它显示每个堆集中的数千个对象为“准备完成”。
这告诉我终结器线程被卡住了。所以我在 windbg 中运行了 !Threads 命令来获取终结器线程 id,这就是它所显示的......
列表中的第一个线程是终结器线程,线程 id 是 XXXX。这意味着什么?我猜这意味着线程不再存在,或者没有运行。有人可以确认或纠正我的理解吗?
更新
我运行了 ~2s;kb 命令,就像评论中建议的 Kjell Gunnar 一样,这是输出。
ZwRemoveIoCompletion 是什么意思?
.net - Freachable队列的目的是什么
我正在学习 .net 基础知识,但我无法理解为什么 .net 需要易碎队列,为什么最终确定的东西不能在最终确定队列中发生。
任何帮助我理解这一点的帮助将不胜感激。谢谢!
fortran - 终结例程是否需要元素才能在超出范围的可分配数组的元素上调用?
如果我有一个可终结派生类型的可分配数组,当数组超出范围时,是否会在每个单独的元素上调用终结器?
这是一个说明问题的小代码示例:
请注意,该程序会泄漏在 .方法中dontLeakMe
分配的数组。起初这对我来说有点令人惊讶,但是后来我发现可以通过声明 finalizer 来解决这个问题。gfortran 和 ifort 的行为方式相同,因此我假设这种行为遵循 Fortran 2003 标准。New()
LeakyType
elemental
谁能证实这一点?老实说,我很难理解标准在这个特定点上所说的内容。
现在我也看不出不声明我所有的终结器元素有多大用处。这有我忽略的任何应用程序吗?