如果您从Java JNI分配的本机代码中泄漏内存会发生什么?

时间:2014-01-29 16:25:28

标签: java c++ memory-leaks java-native-interface

我已经使用JNI来调用分配内存的C方法。我有释放内存的方法,但是如果没有调用那些方法,那么当JVM停止时分配的内存会发生什么?

如果卸载已加载的库,“泄露的”内存会发生什么情况(请参阅How to unload library (DLL) from java JVM)?

3 个答案:

答案 0 :(得分:3)

当JVM停止(被终止或退出)时,操作系统将回收该进程的所有相关内存。这包括在您的本机代码中分配的任何内存。

答案 1 :(得分:1)

普通C代码会发生所有相同的事情。除非smth回收它,否则这个记忆将被泄露。对于大多数现代操作系统,它意味着在进程退出时将释放资源。卸载JVM意味着什么。

答案 2 :(得分:1)

避免此问题的常用方法是让C分配的内存与某些java对象强烈关联,并在该java对象上有一个终结器,它调用JNI方法释放内存。这样事情就会被垃圾收集器清理干净,你的库的用户也不需要记得清理JNI方法。

相关问题