当前位置: 首页 > 面试题库 >

什么是“ JNI全球参考”

皮自明
2023-03-14
问题内容

我正在使用jProfiler查找Java swing应用程序中的内存泄漏。我确定了数量不断增长的JFrame实例。

此框架被打开,然后关闭。

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

这是什么意思?为什么将它挂在框架的每个实例上?


问题答案:

Wikipedia很好地概述了Java本机接口,从本质上讲,它允许Java与以其他语言编写的本机操作系统库之间进行通信。

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

*
在这里


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



 类似资料:
  • 我试图找出为什么使用在python(以及一般编程)中被认为是不好的做法。有人能解释一下吗?更多信息的链接也将不胜感激。

  • 我读过几篇关于JNI本地和全球的参考文献。但是我找不到一个明确的答案,作为参数传递给JNI函数的Java对象是局部引用还是全局引用。我认为它应该是全球性的,但是有一个问题: 首先,我获取Java对象指针并保存它。然后,本机回调函数调用该对象的方法。回调函数是从单独的线程调用的。线程是使用AttachCurrentThread()创建的,因此JVM知道它。JNIEnv*变量也是有效的,对象没有被垃圾

  • 问题内容: 我知道在Java中进行JNI调用时“跨越边界”很慢。 不过,我想知道什么是它,使得它慢?进行JNI调用如此之慢时,底层jvm实现会做什么? 问题答案: 首先,值得注意的是,“慢”是指可能花费数十纳秒的时间。对于琐碎的本机方法,2010年,我在Windows桌面上测得的平均呼叫时间为40 ns,在Mac桌面上测得的平均呼叫时间为11 ns。除非你打很多电话,否则你不会注意到。 也就是说,

  • 在我正在做的一个项目中,应用程序是使用类似于以下命令启动的: 我从未见过选项。稍微搜索一下,它似乎用于在Java应用程序中配置随机数生成。 是这样吗?什么时候应用?

  • 问题内容: 我该怎么做: 在全球范围内,就像在主应用程序或功能中一样,是否有任何iFrame,img src等都可以使用? Docs在解释这一点方面很差。 问题答案: 我只是阅读了您先前回答中的评论。不知道您是否找到解决方案。似乎您在寻找事物的白名单类型。最近,我发现$ sce有一个白名单功能。 摘自AngularJS文档中的$ sceDelegateProvider : 有了这个,您可以像这样在

  • 在我的GUI应用程序中,我从中的嵌套函数中为赋值。 这当然会返回一个无限的LocalError。 我的问题是,为什么使用declaration关键字来解决这个问题是件坏事? 因为它实现了与相同的最终结果,即的值被更改,而不是创建一个新的局部变量;为什么这是一个坏的,或者不-蟒蛇的方法来解决这个问题?