Fla*_*vio 5 java-native-interface reference invocation
我正在使用JNI调用API,它在C程序中启动JVM; 在这种情况下,您将获得一个JNIEnv指针,该指针在您明确销毁JVM之前一直有效.本地/全球的区别是否仍然适用于此?由于JNIEnv始终保持在范围内,因此对新创建的对象的本地引用的含义是什么?
JNI的书对这种情况略显简洁,但如果你研究得足够久,你可以弄明白.基本上,当您将本机C线程附加到JVM时,您将创建一个可以存储一些本地引用的本地上下文.
在使用DeleteLocalRef手动释放它们之前永远不会释放这些本地引用,或者通过调用DetachThread来销毁本地上下文.由于您可能没有对JVM进行大量附加和分离,因此在您创建的每个本地引用上调用DeleteLocalRef非常重要.
自然的下一个问题是"为什么要创建全局引用,如果本地引用在JVM分离之前没有得到GC?" 好吧,线程之间不能共享本地引用.所以你仍然需要创建全局引用来做到这一点.
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |