问题标签 [finalize]
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.
c# - 在 C# 中正确处理对象层次结构
我正在开发一个特定类层次结构实现 IDisposable 的项目。
一些类还实现了一个 Finalize 方法( ~MyClass() )
一般来说,它看起来像这样:
我想知道处理对 Dispose 的调用的正确方法是什么,因为似乎这些对象是通过调用 Dispose() 来处理的,然后由于调用了 Finalize 方法而导致崩溃。
最好将标志保留在层次结构中的最低类(受保护的布尔处理),并在类层次结构的每个级别中检查它?
我发现每个可能的解决方案都需要一些代码重复,这不是我想要的。
java - java中的内存泄漏
我使用 jprofiler 检测客户端代码的内存泄漏。在启动时 java.util.hashmap$entry 使用的内存急剧增加到 1700KB。之后它也减少了。堆转储显示 java.lang.ref.finalizer 正在使用最大内存。它得出什么结论?当我尝试在我的源代码中找到 finalize() 时,它不存在。在 HTML 文件中 finalize() 是这样使用的。 finalize,是什么意思?原因是 finalize() 还是引用 hashmap$entry 导致了泄漏?
java - 如何在java中销毁一个对象?
我在接受以下选项的采访时遇到了这个问题:
如何在java中销毁对象?
答案应该是 e?
如果 e 不存在怎么办?然后 ?显然 c 不是答案。a 和 b 将为整个应用程序执行 gc(问题需要一个对象)。我认为它是 d 因为 finalize() 在 gc 之前被调用(但是在 finalize gc 被调用之后是否有必要?)或者我错了?e 必须在那里回答这个问题吗?
c# - 使用 dispose/finalize 模式释放 socket/event/ummaged 代码的正确技术
当我的类包含套接字和事件时如何实现 Dispose 模式?
应该是这样的吗?
我很困惑......套接字类是“托管代码c#版本的winSock”吗?所以它应该在用户调用 dispose 的情况下被释放(“isDisposing IS true”)事件处理程序呢?
所以在最终的评论部分应该只释放 Inptr 对象?谢谢。
c# - 析构函数、dispose 和 finalize 方法的区别
我正在研究垃圾收集器如何在 c# 中工作。Destructor
我对,Dispose
和Finalize
方法的使用感到困惑。
根据我的研究和理解,在我的类中有一个 Destructor 方法将告诉垃圾收集器以析构方法中提到的方式执行垃圾收集,而不能在类的实例上显式调用。
该Dispose
方法旨在为用户提供对垃圾收集的控制。该Finalize
方法释放了类使用的资源,但不释放对象本身。
我不确定我是否以正确的方式理解它。请澄清疑惑。欢迎任何进一步的链接或指南。
garbage-collection - dispose 方法是否也会处理调用对象?
我在 MSDN 上找到了以下代码:
现在我在这里的困惑是,如果我调用 obj.dispose,它会处理在 MyResources 类中创建的对象,即句柄、组件等。但是 obj 是否也会从堆中删除?同样适用于析构函数。如果我不调用 dispose,则有时会调用析构函数。析构函数中的代码删除了包含的对象。但是obj呢?其次,如果我没有在类中定义析构函数并且我什至不调用 dispose,那么 GC 是否永远不会出现在这里?
java - 完成数组的第一个元素
说,我有一个类,其中包含一个整数数组。
另外,我有一些简单的构造函数来初始化我的数组:
如您所见,我有一个11
元素数组。
关键是我永远不会用 index 改变第一个0
。
有没有办法完成我的数组的第一个元素,所以它不能改变?
就像final
变量一样。
documentation - 如何找出导致生成的 Sandcastle 文档存在差异的原因?
在 Noda Time 中,我们使用 Sandcastle 和SHFB生成我们的文档。然后,我们将文档提交回源存储库 - 主要是因为这样可以轻松查看最新(和历史)文档。
我是该项目的主要开发人员,但我使用两台计算机 - 不幸的是,目前他们正在构建不同的文档,即使它们都更新到相同的源。
这两台计算机在我能想到的所有重要方面都是相同的:
- 沙堡 2.7.2.0
- SHFB 1.9.6.0
- VS 2012 Professional(在“程序”中都报告了版本 11.0.50727.1,在“关于”页面中都报告了“版本 11.0.51106.01 更新 1”)
- .NET Framework 4.5 本地帮助内容的最新版本(其他框架版本没有本地帮助内容)
为确保构建干净而采取的步骤:
- 删除了 SHFB 缓存文件夹 (
C:\Users\Jon\AppData\Local\EWSoftware\Sandcastle Help File Builder\Cache
) - 删除了生成文档的文件夹
- 删除了与 SHFB 工程文件相关的用户设置文件
- 删除了 Visual Studio 中的符号缓存
仍然存在差异。它们似乎仅限于从 MSDN 本身继承的文档,尤其是Object.Finalize
.
版本 1(在机器“Chubby”上生成):
版本 2(在机器“Sandy”上生成):
两者都链接到相同的 MSDN 文档,该文档看起来像第 1 版(没有指向 的链接Object
)。
查看一些更改的文件,更改是一致的并且仅限于此成员。
Sandcastle 可能从哪里获得此文档,我怎样才能让两台计算机以相同的方式运行?
编辑:还有一个信息片段 - 在两台机器上清理缓存并重建文档后,SHFB 缓存目录中有三个文件:
- Reflection.cache 在两台机器上的大小相同
- MsdnUrl.cache 在两台机器上的大小相同
- .NETFramework_4.0.0319_E8879A28.cache 在 Chubby 上的大小为 13,377,733 字节,在 Sandy 上为 13,337,949 字节
编辑:重大进展!我发现差异可能来自哪里......
文件c:\Windows\Microsoft.NET\Framework\v2.0.50727\en\mscorlib.xml
:
- 在 Chubby 上是 8,005,263 字节,日期为 2011 年 12 月 12 日,非链接文本为
Finalize
- 在 Sandy 上是 9,740,370 字节,日期为 2009 年 8 月 31 日,
Finalize
其中包含链接的文本
在两台机器上,mscorlib.dll
其本身大小相同(4,550,656 字节),修改日期为 2012 年 9 月 13 日。
但是我怎样才能让它们相同呢?这种差异从何而来?(服务包?)
编辑:好的,版本c:\Windows
是红鲱鱼 - 这是c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework
应该受到指责的版本。我要看看我是否能找出为什么安装之间可能会有所不同......
java - 最终确定方法中的位图回收无法正常工作
当我尝试加载大小接近应用程序堆最大大小的图像时,我的应用程序崩溃了。我第一次加载图像时很好,然后我删除了对 Bitmap 对象的引用,并在我调用 mBitmap.recycle() //nativeRecycle 的地方完成了它。显然内存使用减少了,但是当我尝试再次加载图像时,我得到了 OutOfMemory 的崩溃。有趣的是,如果我在删除引用的同一个类中调用回收,似乎内存被释放,我可以再次加载图像。所以基本上,如果我直接调用 mBitmap.recycle() 与将 mBitmap.recycle() 放在引用位图的对象的最终确定中,我会得到不同的结果。知道为什么会这样吗?
java - 为什么我需要调用 close() 或 shutdown() 方法?
我是 Java 新手,高中时有 C++ 方面的背景。现在我正在尝试做点什么,我选择了 Java 作为编程语言。
我已经完成了我的功课,并且看了很多关于 Java 的“析构函数”、finalize()方法和close()或shutdown()方法的信息。但我仍然认为我不知道这应该如何工作(当然下面有更多信息)
好的,具体问题是为什么我需要调用close()或shutdown()方法?
在我的特殊情况下,我正在使用一个我没有开发的处理智能卡读卡器的类,但我已经看到文件管理的情况,你必须调用close()方法,将是相似的.
调用close()方法与在 C++ 中释放内存的想法不同(很糟糕)吗?意思是,我必须处理对象的删除或销毁......不是GC吗?
我尝试用于智能卡读卡器的类可能不是最好的,这可能是一个选项,这个类实现finalize()方法可能会更好,这样当不再使用并准备好进行 GC 时,释放内存(很可能是本机代码)和/或释放 GC 可能不知道如何做的硬件资源。
但是文件管理类呢?这些都非常使用和维护,为什么仍然需要close()方法?我明白存在的目的,解锁文件,但为什么我要记得关闭它?一旦不再使用对象,然后自动解锁文件,至少在最常见的情况下是这样。
最后,用实现finalize()方法的类包装需要关闭或关闭的类,并在那里调用close()或shutdown()方法是否是一种适当的解决方法?
我已经看到finalize()方法不是很流行,所以这就是为什么我要问这个问题应该如何解决。
提前致谢
胡安
PS:我所看到的:
http://www.codeguru.com/java/tij/tij0051.shtml