Java JNI:内存分配/分区
使用JNI时,JNI二进制文件是使用自己的内存,还是使用分配给JVM的部分内存?
详细信息
当您指定 -Xmx1024m
作为 JVM 选项时,JVM 是否将所有 1024 mb 内存分配给 Java 对象?
它是否将其中的一部分用于 Java 对象,并将其中的一部分用于 JNI 二进制文件,或者 JNI 二进制文件是否必须使用除此数量之外的内存?在这种情况下,JVM 如何分配/分区/管理内存使用?
相关问题:
When using JNI, does the JNI binary use its own memory, or use part of the memory allocated to the JVM?
Details
When you specify -Xmx1024m
as a JVM option, does the JVM allocate all 1024 mb of memory to Java objects?
Does it use part of this for Java objects and part of this for the JNI binary, or does the JNI binary have to use memory in addition to this amount? How does the JVM allocate/ partition/ manage memory use in this scenario?
Related questions:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
正如我在某些 JNI 代码中出现内存泄漏时第一手发现的那样,JNI 二进制文件在任何 JVM 堆空间之外的 JVM 进程中使用自己的内存。我们看到 Linux 实际上杀死了 JVM,因为整个 JVM 的虚拟内存超过了 3GB。但是我们使用
-Xmx384m
并且在 Java 对象方面只使用了大约 40MB,这几乎证明了 JNI 使用 JVM 堆空间之外的内存。As I discovered first hand when we had a memory leak in some JNI code, the JNI binary uses its own memory within the JVM process outside of any JVM heap space. We were seeing Linux actually kill off the JVM because the JVM as a whole was exceeding 3GB of virtual memory. But we were using
-Xmx384m
and were only using about 40MB of that on the Java objects side of things, which pretty much proves that JNI uses memory outside of the JVM heap space.