2017-10-11 476 views
0

根据thisthis,GlobalReferences为JNI中的对象,保留对象的引用和所有可访问的子字段。这是内存泄漏,不要手动将其释放。JNI中的GlobalReferences是否阻止GC清除对象?

没有明确说明的是,如果全局引用阻止对象被GC'd或泄漏在引用本身中。换句话说,我想了解一个GlobalReference是否会停止对象被GC'ed,就像我在Java空间中有一个额外的引用,或者如果obejct可能是GC'd,但泄漏是在参考对象本身。

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

+0

您是否考虑过咨询JNI规范? – EJP

+0

这里http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_local没有清楚说明实际做了什么。 – Panayotis

+0

全局引用只有在您丢失时才会泄漏。 –

回答

2

如果GlobalReference将停止对象被GC'ed

是的,是这样的。 GC知道JNI全局引用,并将它们视为GC根。

JNI全局引用也暴露在JVMTI中,您可以在像JProfiler这样的工具中看到它们。

相关问题