'JNI Global reference'是什么?

11 浏览
0 Comments

'JNI Global reference'是什么?

我正在使用jProfiler来找出Java swing应用程序中的内存泄漏。我已经确定了一个JFrame实例的数量不断增加的情况。

这个窗口被打开,然后关闭。

使用jProfiler并查看GC根路径,只有一个引用,即“JNI全局引用”。

这是什么意思?为什么它要钩住每个框架实例?

admin 更改状态以发布 2023年5月21日
0
0 Comments

维基百科对Java Native Interface有一个很好的概述,它本质上允许Java与使用其他语言编写的本地操作系统库之间进行通信。

JNI全局引用容易发生内存泄漏,因为它们不会自动垃圾回收,程序员必须显式地释放它们。如果您没有自己编写任何JNI代码,那么您使用的库可能存在内存泄漏。

编辑这里有关于本地引用和全局引用的更多信息,以及为什么使用全局引用(以及如何释放它们)

0
0 Comments

JNI全局引用是从“本地”代码到由Java垃圾收集器管理的Java对象的引用。其目的是防止在Java代码中没有任何活动引用的情况下,仍在本地代码中使用的对象被收集。\n\nJFrame是一个java.awt.Window,并与“本地”Window对象相关联。当您完全使用特定JFrame实例时,应调用其dispose()方法进行清理。\n\n我不确定是否有本地代码正在创建JFrame的全局引用,但这似乎很可能。如果是这样,这将防止JFrame被垃圾收集。如果您正在创建许多窗口(或子类),并且发现它们从未被收集,请确保它们被处理。

0