我认为这个问题之前应该已经有人问过了,但是我在这里没找到......
我使用SWIG创建了一个JNI包装器来封装一个C++类。所有功能都很完美,除了Java似乎从未调用该类的finalize()方法,因此我的类的析构函数也从未被调用。该类的析构函数执行一些最终的文件I/O操作,所以不幸的是,这不仅仅是一个小的内存泄漏问题。
通过谷歌搜索,似乎没有办法强制Java进行垃圾回收并销毁对象。是这样吗?
我知道我可以修改我的SWIG文件并创建一个Java函数来调用C++析构函数,但是该类被终端用户在多个不同的平台/语言中使用,因此添加一个仅适用于Java的函数将会产生不一致性,我们的技术作家不会喜欢。