如何确定 JNI 全局引用内存泄漏的原因?

2024-03-07

我正在使用 Tomcat,停止我的 Web 应用程序后仍然存在对类加载器的引用我的网络应用程序的实例。 结果是大量内存(主要与静态数据相关)将不会被释放。迟早这会导致OutOfMemoryError.

我拍了一张heap dump我意识到它是由一个JNI 全局参考 http://java.sun.com/docs/books/jni/html/refs.html which prevents类加载器将是垃圾收集 http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/html/jni_gc.html.

我的应用程序不使用JNI。我也没有使用Apache Tomcat 本机库。我使用的是 Sun/Oracle JDK。
我想追踪这个全球参考的原因/起源。 (我的猜测是 JVM 在内部引用类加载器 - 但为什么/在哪里?)。

问题:

  • 有哪些方法/工具集可以实现这一目标?

UPDATE

看来bestsss是对的,jvm调试模式引入了JNI全局引用。这帮助了我,但它没有回答问题,所以我仍然很好奇得到这个问题的答案,这可能在未来有所帮助。


除了明显的情况:线程之外,还有一个:

您是否在调试模式下使用您的应用程序?

除了系统类加载器之外,JVM 不保存对任何类加载器的引用,但它与您无关。其余的 JNI 引用要么是线程,要么只是调试持有的对象(前提是您不使用 JNI 并自己锁定对象)。

JNI 引用只是根,编辑您的答案并发布这些引用到底包含哪些对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 JNI 全局引用内存泄漏的原因? 的相关文章

  • Java将字符串解析为double

    如何解析字符串中的这个 Double 00034800 变成 Double 值 最后两位数字实际上是小数点 所以我正在寻找的结果是348 00 是否有这样的格式可以与十进制格式一起使用 Well String s 00034800 doub
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • 在不支持 CAS 操作的处理器上进行 CompareAndSet

    今天 我在一次采访中被问到下一个问题 如果您在具有不支持 CAS 操作的处理器的机器上调用 AtomicLong 的compareAndSet 方法 会发生什么情况 您能否帮我解决这个问题 并在可能的情况下提供一些全面描述的链接 From
  • Java 中的 <-- 是什么? [复制]

    这个问题在这里已经有答案了 我遇到了下面的片段 它输出到4 3 2 1 我从来没有遇到过 lt 在爪哇 Is lt 使 var1 的值变为 var2 的运算符 public class Test public static void mai
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 有人用过 ServiceLoader 和 Guice 一起使用吗?

    我一直想通过我们的应用程序 构建系统进行更大规模的尝试 但更高的优先级不断将其推到次要地位 这似乎是加载 Guice 模块的好方法 并且避免了关于 硬编码配置 的常见抱怨 单个配置属性很少会自行更改 但您几乎总是会有一组配置文件 通常用于不
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • Azure Java SDK:ServiceException:ForbiddenError:

    尝试了基本位置检索器代码 如下所示 String uri https management core windows net String subscriptionId XXXXXXXX 5fad XXXXXX 9dfa XXXXXX St
  • titledBorder 标题中的图标

    您好 是否可以在 titledBorder 的标题中放置一个图标 例如以下代码 import java awt GridLayout import javax swing JFrame import javax swing JLabel i
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 如何让 Firebase 与 Java 后端配合使用

    首先 如果这个问题过于抽象或不适合本网站 我想表示歉意 我真的不知道还能去哪里问 目前我已经在 iOS 和 Android 上开发了应用程序 他们将所有状态保存在 Firebase 中 因此所有内容都会立即保存到 Firebase 实时数据

随机推荐

  • 使用 HTML5 服务器事件和 Java Servlet 时如何防止 net::ERR_INCOMPLETE_CHUNKED_ENCODING?

    我刚刚开始玩服务器事件 遇到了一条我想了解的 chrome 错误消息 我很快在网上搜索 但没有找到解释 所以我想我可能做了一些非常错误的事情 在服务器端 我有一个简单的 servlet 它接受请求并创建一个虚拟事件创建器任务 private
  • Rails 4:如何访问 ActiveRecord_Relation-Object 的属性?

    我有一个国家模型和一个游记模型 一个国家有很多游记 一篇游记属于一个国家 在 Rails 控制台中 TravelNote published country 248
  • VBA 哈希字符串

    如何使用 Excel VBA 获取长字符串的短哈希 给予什么 输入字符串不超过80个字符 有效输入字符为 0 9 A Z 有效输出字符为 0 9 AZ az 大小写均可 输出哈希值不应超过 12 个字符 越短越好 根本不需要唯一 因为这会导
  • React Routing 在本地有效,但在 Heroku 中无效

    我的问题与中概述的问题即使不完全相同 也非常相似this https stackoverflow com questions 41772411 react routing works in local machine but not her
  • Remix 上没有自动完成/代码完成功能?

    我在 Youtube 上观看 Remix 上的教程 他在输入代码时具有自动完成功能 但我没有 有谁知道如何启用它 这将帮助我更轻松地编写代码 但我在任何地方都找不到解决方案 对我来说 只需点击左下角的 设置 按钮并启用 在编辑器中启用代码完
  • Docker构建特定的本地git分支

    我是 docker 新手 想要容器化我的应用程序的特定 git 分支 如果我运行 docker build 并给出 dockerfile 的位置 则会构建一个图像 但默认情况下从本地 master 分支构建 我希望能够要构建另一个分支 请说
  • 将 node.js 服务器端代码移植到 HTML5 WebSockets

    注意 这不是关于同时使用 node js 和 HTML5 套接字 我也没有兴趣讨论我所描述的设置的优点 node js 在服务器上运行 并且由于它支持通过套接字连接作为客户 它可以充当 HTML5 JS 客户端和使用 TCP IP 的服务器
  • 为什么.NET中没有IDateTimeProvider而DateTime有Now getter?

    目前 我正在为执行日期时间特定验证的组件编写单元测试 我创造了IDateTimeProvider接口 用作DateTime UtcNow包装器和业务对象使用接口而不是DateTime直接地 看来 DateTime 有点过载 应该分为一个值和
  • 页内分析不起作用

    当尝试在 Firefox 中查看页内分析时 我收到以下消息 加载页内分析时出现问题 我们发现您的设置存在问题 这些可能会导致加载页内分析时出现问题 您的网站不会从 Google 加载 ga js 如果您在自己的服务器上托管 Google 跟
  • 在 NGS 数据中查找 CDR

    我有数百万个fasta格式的序列 想要提取CDR CDR1 CDR2和CDR3 我只选择了一个序列作为示例 并尝试提取CDR1 但无法提取CDR1 顺序 FYSHSAVTLDESGGGLQTPGGGLSLVCKASGFTFSSYGMMWVR
  • Pycharm 安装抱怨 OpenJDK

    我尝试在 Ubuntu 12 04 上安装 Pycharm 我有以下信息 user user Pobrane pycharm 2 5 2 bin sh pycharm sh OpenJDK Runtime Environment IcedT
  • 通过 SSL 的 REST WCF 服务

    我正在尝试通过 SSL 配置 REST WCF 服务 但我不断收到 找不到基地址 与端点的方案 https 匹配 与绑定 WebHttpBinding 注册基地址方案是 http 有人可以看一下我的配置文件吗 谢谢
  • 如何在 OpenSSL 中使用 AES-128-ECB Alg 生成带有 PEM 编码的 PKCS8 密钥

    我想知道如何使用 openssl cmd 生成以下密钥 AES 128 ECB BEGIN PRIVATE KEY Proc Type 4 ENCRYPTED DEK Info AES 128 ECB 379AB79E55059F9A ga
  • C++ Typedef 和运算符重载

    如果你定义一个类似的类型typedef int MY INT 并继续重载 MY INT 的加法运算符 例如 MY INT operator MY INT a MY INT b will MY INT a b a b 不同于 int A B
  • FirstOrDefault() 无法与 ?? 结合操作员

    据我所知 linq 方法FirstOrDefault 回报null如果记录集为空 为什么不能使用 针对函数的运算符 就像这样 Double d new Double FirstOrDefault 0 0 Update 我不想检查是否d is
  • Abs、sign 等在 F# 中是如何实现的

    我找到 abs 10 abs 10L 两者都有效 于是我想知道F 是如何实现的 并在源代码中进行了搜索 type AbsDynamicImplTable lt T gt let AbsDynamic x AbsDynamicImplTabl
  • 给定一个完全由字符串元组列表表示的线性顺序,将该顺序输出为字符串列表

    给定形式的项目对 a b where a b means a gt b 例如 best better best good better good 我想输出一个表单列表 best better good 由于某种原因 这非常困难 有什么想法吗
  • 如何使用node.js基于id(transectionid)组合两个集合?

    我有横切和购买集合 其中包含横切和购买详细信息 现在我想将其转换为单个集合 基于横断面 我们需要合并文档 以下是我的横断面收集数据 transectionid 1 transectionamount 2000 transectiondate
  • 如何从备份文件中检索数据库的逻辑文件名

    我正在研究如何的步骤使用 SQL 脚本 T SQL 恢复数据库备份 http blog sqlauthority com 2007 02 25 sql server restore database backup using sql scr
  • 如何确定 JNI 全局引用内存泄漏的原因?

    我正在使用 Tomcat 停止我的 Web 应用程序后仍然存在对类加载器的引用我的网络应用程序的实例 结果是大量内存 主要与静态数据相关 将不会被释放 迟早这会导致OutOfMemoryError 我拍了一张heap dump我意识到它是由