Java - JNI C 代码中的内存是如何管理的?

Pin*_*nch 4 c java java-native-interface

假设我通过 JNI 从 Java 调用一些 C 代码,并且在 C 代码中有一些全局数组。这些内存是如何分配和管理的?我假设它不会在 JVM 堆上。

Alm*_*asB 5

它不在 JVM 堆或本机元空间上。内存是从分配给 java 进程(即作为本机操作系统进程启动 JVM 的进程)的本机内存空间分配的。它由分配它的本机代码管理,因此如果您不手动free全部malloc,则会出现内存泄漏。

虽然没有太多可以依赖的具体材料,但是这份Oracle 指南是一个开始挖掘的好地方。