强制 Java 调用我的 C++ 析构函数 (JNI)

2024-03-23

我以为这个问题以前有人问过,但我在这里找不到......

我使用 SWIG 围绕 C++ 类创建 JNI 包装器。一切都很好,只是 Java 似乎从不调用类的 Finalize(),因此,反过来,我的类的析构函数永远不会被调用。该类的析构函数执行一些最终文件 I/O,因此不幸的是,这不仅仅是一个轻微的内存泄漏。

通过Google搜索,似乎没有办法强制Java进行GC并销毁对象。真的?

我知道我可以操作我的 SWIG 文件并创建一个调用 C++ 析构函数的 java 函数,但此类由多种不同平台/语言的最终用户使用,因此添加仅 Java 会造成我们的技术不一致作家不会喜欢的。


您不能使用 System.gc() 强制 GC。 此外,也不能保证会运行 GC,例如,如果您的应用程序只运行很短的时间,然后您的终结器根本不会运行(JVM 在退出时不会运行它)。您应该为您的类创建一个 close() 或 destroy() 或任何函数,当您使用完此类的实例时调用它,最好是从finally块中调用它,例如。


MyClass x = null;
try{
    x = new MyClass();
    x.work();
} finally {
    if (x!=null)
        x.close();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

强制 Java 调用我的 C++ 析构函数 (JNI) 的相关文章

随机推荐