根据thisthis,JNI中对对象的GlobalReferences保留了该对象的引用以及所有可访问的子字段。而且这是内存泄漏,不及时手动释放它。

没有明确说明的是全局引用是否阻止对象进行GC引用,还是泄漏本身存在于引用本身中。换句话说,我试图了解GlobalReference是否会停止将对象进行GC处理,例如,如果我在Java空间中对此对象有了额外的引用,或者对象是否可以被GC处理但泄漏仍在参考对象本身。

我倾向于认为是前者,因为存在弱的全局引用,根据文档,这将使GC原始对象死亡-但我决定要求保持安全。

最佳答案

如果GlobalReference将停止要进行GC处理的对象


是的,就是这种情况。 GC知道JNI全局引用,并将其视为GC的根。

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

09-10 08:59
查看更多