繁体   English   中英

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

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

我已经使用JNI调用了分配内存的C方法。 我有释放内存的方法,但是如果不调用这些方法,那么在JVM停止时分配的内存会如何处理?

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

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

将发生与普通C代码相同的所有事情。 除非smth将其回收,否则该内存将被泄漏。 对于大多数现代OS,这意味着在进程退出时将释放资源。 卸载JVM毫无意义。

避免此问题的常用方法是使C分配的内存与某个Java对象紧密关联,并在该Java对象上具有终结器,该终结器调用JNI方法以释放内存。 这样,垃圾收集器将清理所有内容,并且库的用户无需记住要校准清理JNI方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM