gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:28:29 34 4
gpt4 key购买 nike

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

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

Google 了一下,似乎没有办法强制Java GC 并销毁一个对象。真的吗?

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

最佳答案

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


MyClass x = null;
try{
x = new MyClass();
x.work();
} finally {
if (x!=null)
x.close();
}

关于java - 强制 Java 调用我的 C++ 析构函数 (JNI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1014584/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com