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

What happens if you leak memory in native code allocated from Java JNI?

本文关键字:泄漏 什么 内存 本机代码 Java JNI 如果 分配      更新时间:2023-10-16

我使用JNI调用分配内存的C方法。我有释放内存的方法,但是如果未调用这些方法,则停止JVM时分配的内存会发生什么?

如果您卸载已加载的库(请参阅Java JVM卸载库(DLL)),"泄漏"内存会发生什么?

停止JVM(被杀死或退出),操作系统将使用该过程回收所有相关的内存。其中包括本机代码中分配的任何内存。

将发生与普通C代码发生的所有相同的事情。除非SMTH会收回,否则此内存将被泄漏。对于大多数现代操作系统,这意味着当过程退出时将释放资源。卸载JVM一无所有。

避免此问题的常用方法是使C分配的内存与某些Java对象密切相关,并在该JAVA对象上具有最终确定器,该Java对象称为JNI方法,以释放内存存储器。这样,垃圾收集器和库的用户就不需要记住清理JNI方法来清理事情。