如何查找 Java 内存泄漏

2023-12-13

如何发现 Java 中的内存泄漏(例如使用 JHat)?我尝试在 JHat 中加载堆转储来进行基本查看。但是,我不明白我应该如何找到根引用(ref)或无论它被称为什么。基本上,我可以看出有几百兆字节的哈希表条目([java.util.HashMap$Entry 或类似的东西),但是地图到处都在使用......有什么方法可以搜索大地图,或者也许找到大型对象树的一般根?

[编辑] 好吧,到目前为止我已经阅读了答案,但我们只能说我是一个小气的混蛋(这意味着我对学习如何使用 JHat 更感兴趣,而不是支付 JProfiler 的费用)。此外,JHat 始终可用,因为它是 JDK 的一部分。当然,除非 JHat 除了暴力之外别无他法,但我不敢相信会出现这种情况。

另外,我认为我无法实际修改(添加日志记录all地图大小)并运行足够长的时间让我注意到泄漏。


我使用以下方法来查找 Java 中的内存泄漏。我使用 jProfiler 取得了巨大成功,但我相信任何具有图形功能的专用工具(差异更容易以图形形式分析)都可以工作。

  1. 启动应用程序并等待其进入“稳定”状态,此时所有初始化均已完成并且应用程序处于空闲状态。
  2. 多次运行怀疑产生内存泄漏的操作,以允许进行任何缓存、与数据库相关的初始化。
  3. 运行 GC 并拍摄内存快照。
  4. 再次运行该操作。根据操作的复杂性和所处理的数据的大小,操作可能需要运行几次到多次。
  5. 运行 GC 并拍摄内存快照。
  6. 对 2 个快照运行差异并进行分析。

基本上,分析应该从最大的正差异开始,例如对象类型,并找出导致这些额外对象保留在内存中的原因。

对于在多个线程中处理请求的 Web 应用程序,分析变得更加复杂,但通用方法仍然适用。

我做了很多专门旨在减少应用程序内存占用的项目,这种通用方法加上一些特定于应用程序的调整和技巧总是效果很好。

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

如何查找 Java 内存泄漏 的相关文章

  • Java 中的 XPath 节点集

    我在 eclipse 中有这段代码 NodeSet nodes NodeSet xPath evaluate expression inputSource XPathConstants NODESET 它给我 NodeSet 上的编译时错误
  • 解决错误:日志已在具有多个实例的atomikos中使用

    我仅在使用atomikos的实时服务器上遇到问题 在我的本地服务器上它工作得很好 我在服务器上面临的问题是 init 中出错 日志已在使用中 完整的异常堆栈跟踪 java lang RuntimeException Log already
  • 使用 ANTLR 为 java 源代码生成抽象语法树

    如何使用 ANTLR 从 java src 代码生成 AST 有什么帮助吗 好的 步骤如下 前往ANTLR站点 http www antlr org 并下载最新版本 下载Java g和JavaTreeParser g文件来自here htt
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 一种使用 Java Robot API 和 Selenium WebDriver by Java 进行文件上传的解决方案

    我看到很多人在使用 Selenium WebDriver 的测试环境中上传文件时遇到问题 我使用 selenium WebDriver 和 java 也遇到了同样的问题 我终于找到了解决方案 所以我将其发布在这里希望对其他人有所帮助 当我需
  • OnClick 事件中的 finish() 如何工作?

    我有一个Activity一键退出Activity 通过layout xml我必须设置OnClick事件至cmd exit调用 this finish 效果很好 public void cmd exit View editLayout thi
  • Clip 在 Java 中播放 WAV 文件时出现严重延迟

    我编写了一段代码来读取 WAV 文件 大小约为 80 mb 并播放该文件 问题是声音播放效果很差 极度滞后 你能告诉我有什么问题吗 这是我的代码 我称之为doPlayJframe 构造函数内的函数 private void doPlay f
  • 从 android 简单上传到 S3

    我在网上搜索了从 android 上传简单文件到 s3 的方法 但找不到任何有效的方法 我认为这是因为缺乏具体步骤 1 https mobile awsblog com post Tx1V588RKX5XPQB TransferManage
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Java - 不要用 bufferedwriter 覆盖

    我有一个程序可以将人员添加到数组列表中 我想做的是将这些人也添加到文本文件中 但程序会覆盖第一行 因此这些人会被删除 如何告诉编译器在下一个空闲行写入 import java io import java util import javax
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError

    我有一个 Play Framework 应用程序 并且我was使用 Hibernate 4 2 5 Final 通过 Maven 依赖项管理器检索 我决定升级到 Hibernate 4 3 0 Final 成功重新编译我的应用程序并运行它
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • 自定义 Android Intent.ACTION_SEND

    我正在使用 Intent 来共享 url 和主题 在此意图过滤器中显示所有共享应用程序 我只想要 facebook gmail message skype twitter 弹出窗口中的这些选项 是否可以自定义共享意图过滤器 Intent s
  • INET_NTOA 和 INET_ATON 的 .NET 等效项

    任何 C Net 等效方法 或 INET NTOA 和 INET ATON 的托管代码示例 The IPAddress类有静态方法 HostToNetworkOrder NetworkToHostOrder 具有各种过载
  • 查找标签之间的文本并将其与标签一起替换

    我正在使用以下正则表达式模式来查找之间的文本 code and code tags lt code code 它返回我这两个标签之间的任何内容 例如这 code return Hi There code 给我return Hi There
  • python exe中的图像文件夹放在哪里?

    我已经将我设计的一个python游戏转换成了exe 运行 exe 本身会导致它闪烁然后关闭 这意味着发生了错误 从命令提示符运行它也会导致错误 但会记录它 Cannot load image Playfield png Couldn t o
  • urlread()、urlwrite() 不适用于 Octave for Windows 中的 https 页面

    当我使用 Cygwin 中安装的 Octave 3 8 1 时 我可以成功下载 https 页面 如下所示 urlwrite https www google com downloaded html 但是 当我使用 Windows 7 SP
  • 为什么某些 .wav 文件无法在 Firefox 中解码

    我有一个网页 由于某些原因可以解码波形文件 Chrome 和 Safari 似乎运行良好 Firefox 有时无法解码该文件并给出错误 传递给decodeAudioData 的缓冲区包含无法成功解码的无效内容 我创建了一个jsfiddle这
  • Typescript:属性的类型依赖于同一对象中的另一个属性

    我有一个具有两个属性的 TypeScript 接口 type string and args object The args可能具有不同的属性 具体取决于type 我需要应用什么类型定义args这样编译器 自动完成就会知道允许哪些属性arg
  • 使用 .htaccess 重写多个参数的 URL

    我想使用 htaccess 重写 url 请阅读代码 你就会明白我的意思 My URL article php id 1 title example 在 htaccess 中使用它 RewriteRule article 0 9 0 9a
  • Matlab bsxfun()代码

    这是做什么的 u 5 6 s 1 1 data1 randn 10 1 1 ones 10 1 data2 randn 10 1 ones 10 1 data data1 data2 deviance bsxfun minus data u
  • 如何将 Protractor 测试用例与 Hiptest 集成?

    对于使用 Angular js 制作的网站 我们的组织使用 Protractor 作为自动化测试用例的工具 我们的组织提出了一个名为 HipTest 的新工具来管理测试用例自动化 如何将量角器测试用例与 HipTest 集成 我访问了以下链
  • 无论页面刷新如何,持续计数器

    我有一段 jQuery 目前每 5 秒将数字增加 1 我遇到的问题是它的客户端 因此每次刷新页面时它都会重置 相反 我希望即使您离开站点并且无论您刷新页面多少次 计数器也能继续 这就是为什么我认为 PHP 等服务器端脚本更适合我的用例 如果
  • jQuery 验证插件 - 密码检查 - 最低要求 - 正则表达式

    我的密码检查器有点问题 有一个包含一些字段的注册表 我使用 jQuery Validate 插件来验证用户输入 除了密码验证之外 一切都有效 密码应满足一些最低要求 最小长度 8 gt 我只使用 minlength 8 至少一个小写字符 至
  • 奇怪的DNS服务器导致Hadoop和HBase出现故障

    我的网络有一些奇怪的 据我所知 DNS 服务器 这会导致 Hadoop 或 HBase 出现故障 它将我的主机名解析为我的机器不知道的某个地址 即没有这样的接口 如果 etc hosts 中有以下条目 Hadoop 确实可以工作 127 0
  • 将 QDate 转换为秒

    我的日期来自QDateTimeEdit并将其转换为秒 如下所示 import time from datetime import datetime date self ui dateTimeEdit date toString dd MM
  • 如果下面行中的值非空,则连接列标题

    我有一个表格 其中的数据格式如下 Data 我希望完成的表格具有要填充的空白列 如下面突出显示的那样 Finished Table 因此 我需要一个公式或 VBA 来返回并连接每行中非空白单元格的标题 使用以下内容作为数组公式 TEXTJO
  • 仅创建创建表语句中的第一个表

    表 credentials 确实显示在 adb shell 中 我检查了 logcat 它似乎没有报告问题 private static final String DATABASE CREATE create table credentia
  • Scala 工具的现状如何?

    在过去的一年里 我听到了越来越多关于 Scala 语言的炒作 我知道有几个现有项目计划将 Scala 支持与 IDE 集成 然而 整合到底有多好并不总是很清楚 他们目前是否像 Eclipse 和 Netbeans 对 Java 语言一样支持
  • 在过程中操作运行时堆栈

    我正在开发一个包含两个过程的程序 一种是将 N 个无符号双字的数组压入堆栈 另一种将 N 个无符号双字从堆栈中弹出并将它们存储在数组中 我能够成功地将所有元素推入堆栈 但随后该过程无法返回主程序 因为堆栈指针 esp注册 已更改 我已经能够
  • Xdebug + XAMPP + Netbeans = 失败。无法让调试器在 Netbeans 中工作

    我读过有关此主题的其他问题 列出的解决方案不起作用 安装 XAMPP 1 7 7 网豆7 1 1 X调试2 1 4 phpinfo 显示 Xdebug 已安装并具有所有正确的参数 zend extension C xampp php ext
  • 如何查找 Java 内存泄漏

    如何发现 Java 中的内存泄漏 例如使用 JHat 我尝试在 JHat 中加载堆转储来进行基本查看 但是 我不明白我应该如何找到根引用 ref 或无论它被称为什么 基本上 我可以看出有几百兆字节的哈希表条目 java util HashM