JNI中的GlobalReferences是否会阻止GC清理对象?

时间:2017-10-11 08:33:34

标签: java memory-leaks garbage-collection java-native-interface

根据thisthis,对JNI中对象的GlobalReferences,保持对象的引用和所有可访问的子字段。这是一个内存泄漏,不能立即手动释放它。

未明确说明的是,全局引用是否会阻止对象成为GC,或者泄漏是否在引用本身中。换句话说,我试图理解GlobalReference是否会阻止对象进入GC,就像我在Java空间中有一个额外的引用,或者如果obejct可能是GC那样但是泄漏在参考物体本身。

我倾向于认为是前者,因为弱的全球参考存在,根据文档会让GC原始对象死亡 - 但我决定要求安全。

1 个答案:

答案 0 :(得分:2)

  

如果GlobalReference将使对象停止GC'

是的,就是这样。 GC了解JNI全局引用并将其视为GC根源。

JNI全局引用也在JVMTI中公开,您可以在JProfiler等工具中看到它们。