【问题标题】:Do GlobalReferences in JNI prevent GC from cleaning up object?JNI 中的 GlobalReferences 会阻止 GC 清理对象吗?
【发布时间】:2017-10-11 08:33:33
【问题描述】:

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

没有明确说明的是全局引用是否会阻止对象被 GC,或者泄漏是在引用本身中。换句话说,我试图了解 GlobalReference 是否会阻止对象被 GC 处理,就像我在 Java 空间中有一个额外的引用一样,或者对象是否可以被 GC 处理但泄漏在引用对象本身。

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多