我以为以前会问过这个问题,但我在这里找不到...
我使用 SWIG 围绕 C++ 类创建了一个 JNI 包装器。一切都很好,除了 Java 似乎从不调用类的 finalize(),因此,反过来,我的类的析构函数永远不会被调用。该类的析构函数执行一些最终文件 I/O,因此不幸的是,这不仅仅是轻微的内存泄漏。
通过谷歌搜索,似乎没有办法强制 Java 进行 GC 并销毁对象。真的?
我知道我可以操纵我的 SWIG 文件并创建一个调用 C++ 析构函数的 java 函数,但是这个类被最终用户在几种不同的平台/语言中使用,所以添加一个纯 Java 会造成我们的技术不一致作家们不会喜欢的。