标签: finalize

什么时候在Java中调用finalize()方法?

我需要知道何时finalize()调用该方法JVM.我创建了一个测试类,当finalize()通过覆盖它来调用方法时,该测试类会写入文件.它没有被执行.谁能告诉我它没有执行的原因?

java methods garbage-collection finalize call

320
推荐指数
8
解决办法
47万
查看次数

在C#中,析构函数和类中的Finalize方法有什么区别?

在类中的析构函数和Finalize方法之间有什么区别?

我最近发现Visual Studio 2008认为析构函数与Finalize方法同义,这意味着Visual Studio不会让您同时在类中定义这两个方法.

例如,以下代码片段:

class TestFinalize
{
    ~TestFinalize()
    {
        Finalize();
    }

    public bool Finalize()
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

在析构函数中调用Finalize时出现以下错误:

以下方法或属性之间的调用不明确:'TestFinalize .~TestFinalize()'和'TestFinalize.Finalize()'

如果对Finalize的调用被注释掉,则会出现以下错误:

类型'ManagementConcepts.Service.TestFinalize'已经定义了一个名为'Finalize'的成员,它具有相同的参数类型

c# destructor finalize

91
推荐指数
3
解决办法
6万
查看次数

在Java中,关键字"final","finally"和"finalize"的用途是什么?

在Java中,目的是什么做的关键字final,finallyfinalize履行?

java final finally finalize

82
推荐指数
5
解决办法
10万
查看次数

析构函数,处理和finalize方法之间的区别

我正在研究垃圾收集器如何在c#中工作.我在使用的混乱Destructor,DisposeFinalize方法.

根据我的研究和理解,在我的类中使用Destructor方法将告诉垃圾收集器以析构函数方法中提到的方式执行垃圾收集,该方法无法在类的实例上显式调用.

Dispose方法旨在为用户提供控制垃圾收集.该Finalize方法释放类使用的资源,但不释放对象本身.

我不确定我是否理解正确的方法.请澄清疑虑.欢迎任何进一步的链接或指南.

.net c# dispose destructor finalize

66
推荐指数
2
解决办法
6万
查看次数

如何从Xcode导出已完成的应用程序?

我不得不问这个很傻.我有一个应用程序,我希望派人测试他们的机器,但我不知道如何让Xcode生成一个.app文件供我发送给他们.救命?

xcode compilation finalize

46
推荐指数
3
解决办法
8万
查看次数

如何找出生成的Sandcastle文档中导致差异的原因?

在Noda Time,我们使用Sandcastle和SHFB生成我们的文档.然后,我们将文档提交回源存储库 - 主要是因为这样可以轻松查看最新(和历史)文档.

我是该项目的主要开发人员,但我使用了两台计算机 - 不幸的是,他们正在构建不同的文档,即使它们都更新到同一个源.

这两台电脑在我能想到的每一个重要方面都是一样的:

  • Sandcastle 2.7.2.0
  • SHFB 1.9.6.0
  • VS 2012专业版(均在"程序"中报告版本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"上生成):

<div class="summary">Allows an object to try to free resources and perform
other cleanup operations before it is reclaimed by garbage collection.</div>
Run Code Online (Sandbox Code Playgroud)

版本2(在机器"桑迪"上生成):

<div class="summary">Allows an <a 
   href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">
   Object</a> to attempt to free resources and perform other cleanup operations
   before the <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" 
   target="_blank">Object</a> is reclaimed …
Run Code Online (Sandbox Code Playgroud)

documentation sandcastle finalize shfb

46
推荐指数
1
解决办法
2054
查看次数

如何在java中销毁一个对象?

我在接受以下选项的采访中遇到了这个问题:

如何在java中销毁对象?

a. System.gc();  
b. Runtime.getRuntime.gc();  
c. object.delete();  
d. object.finalize();  
e. Java performs gc by itself, no need to do it manually.
Run Code Online (Sandbox Code Playgroud)
  1. 答案应该是e?

  2. 如果e不存在怎么办?然后 ?显然c不是答案.a和b将为整个应用程序执行gc(问题需要一个对象).我认为这是因为在gc之前调用finalize()(但是在调用gc的最终化之后是否有必要?)或者我错了?我必须在那里回答这个问题吗?

java garbage-collection finalize

42
推荐指数
5
解决办法
12万
查看次数

为什么java.lang.Object中的finalize()方法"受保护"?

出于好奇,

为什么finalize()方法的访问修饰符是作为protected.为什么不能呢public?有人可以解释我背后的具体原因吗?

此外,我开始知道该finalize()方法只被调用一次.如果我在程序内部调用它两次,会发生什么?垃圾收集器会再次调用它吗?

private void dummyCall() {
    try {
        finalize();
        finalize();
    } catch (Throwable e) {
        e.printStackTrace();//NOT REACHES EXCEPTION
    }
}
Run Code Online (Sandbox Code Playgroud)

java finalize

35
推荐指数
3
解决办法
4万
查看次数

Java面试问题:finalize()方法

我在接受采访时得到了以下短语:

调用Object的finalize()方法是在收集对象之前发生的最后一件事.

我不得不回答:

  • 真正

我选择了,True但这是错的.你能解释一下为什么吗?

java garbage-collection finalize

29
推荐指数
2
解决办法
4854
查看次数

在Java中,如何检查AutoCloseable.close()是否已被调用?

我正在创作一个java库.一些旨在由库用户使用的类保存本机系统资源(通过JNI).我想确保用户"处置"这些对象,因为它们很重,并且在测试套件中它们可能导致测试用例之间的泄漏(例如,我需要确保TearDown将丢弃).为此我使Java类实现了AutoCloseable,但这似乎不够,或者我没有正确使用它:

  1. 我不知道如何使用try-with-resources在测试的情况下(我使用的语句JUnit5Mockito),在"资源"是不是短命的-这是测试夹具的一部分.

  2. 像往常一样勤奋,我尝试finalize()在那里实现和测试闭包,但事实finalize()证明甚至没有调用(Java10).这也被标记为已弃用,我确信这个想法不会受到诟病.

这是怎么做到的?要清楚,如果他们不调用close()我的对象,我希望应用程序的测试(使用我的库)失败.


编辑:添加一些代码,如果它有帮助.它并不多,但这正是我想要做的.

@SuppressWarnings("deprecation") // finalize() provided just to assert closure (deprecated starting Java 9)
@Override
protected final void finalize() throws Throwable {
    if (nativeHandle_ != 0) {
         // TODO finalizer is never called, how to assert that close() gets called?
        throw new AssertionError("close() was not called; native object leaking");
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑2,赏金的结果感谢所有的回复,一半的赏金被自动授予.我的结论是,对于我的情况,最好尝试解决方案Cleaner.但是看起来,虽然已经注册,但是不会调用清理操作.我在这里问了一个跟进问题.

java dispose finalize try-with-resources autocloseable

26
推荐指数
3
解决办法
1695
查看次数