繁体   English   中英

如何验证Java中的内存泄漏

[英]How to verify memory leak in Java

使用 Java 创建内存泄漏的问题来看,有很多方法可以在 Java 中创建内存泄漏,但我只是尝试创建一个简单的内存泄漏并能够以某种方式观察其效果。 事实上,在尝试创建内存泄漏后,我想验证(以数字或其他方式),以便确保已成功创建内存泄漏。 我们可以不使用第三方应用程序,仅通过在我们的代码中插入例如 runtime.maxMemory() 来调查我们代码中内存泄漏的发生吗?

这是一个穷人的内存分析工具的替代品:

public static long bytesOccupied() {
   final Runtime rt = Runtime.getRuntime();
   for (int i = 0; i < 2; i++) rt.gc();
   return rt.totalMemory()-rt.freeMemory();
}

我已经多次使用它,并且可以证明它至少在某些设置上有效。 尝试一下,看看它是否为您提供了合理的结果。

否则,启动 VisualVM 真的很容易,它已经用 JDK 安装在您的计算机上。 请务必安装可选的 VisualGC 插件。 让您的代码在循环中进行一些分配,并观察 GC 代的变化。 使用较短的采样时间(100 或 200 毫秒)来获得实时感觉。

处理内存泄漏的非内存分析方法:

第一步

在 IntelliJ 中打开项目。 配置错误警告。 打开项目的任何类后,使用右上角的代码检查警告弹出窗口访问“配置检查”按钮。

在新选项卡中,在“内存”和“资源管理”组中,将其严重性级别更改为“错误”。

执行分析:

 Menu Analize > Inspect Code.

这将在窗口底部打开一个“问题”视图选项卡。

检查我们之前更改严重性的那些错误。 列出所有这些。 分析它们是否有意义,或者它们是否可以被忽略。 (这可能要花点时间)

列出所有这些。

从列表中删除任何不适合修复的错误。

第二步

在 Eclipse 中打开项目。 配置错误警告。

Menu Window > Preferences > Java > Compiler > Error/Warnings

在新选项卡中,将“潜在编程问题”中的所有选项标记为错误。

为了执行分析,清理以前的构建并制作另一个。 Eclipse 将执行分析。 (确保在“项目”菜单中将自动构建设置为“开启”)

Menu Source > Clean up...

这将在窗口底部打开一个“问题”视图选项卡。 您可以将此“报告”从 Eclipse 复制并粘贴到您的列表中,但要进行视觉调整。

检查我们之前更改严重性的那些错误。 将它们包括在列表中。 分析它们是否有意义,或者它们是否可以被忽略。 (这可能要花点时间)

从列表中删除任何不适合修复的错误。

第三步

如果您在寻找更明显的错误时发现潜伏在任何类中的任何额外错误,请将它们添加到列表中。 像搜索“流”一样搜索它们,如下所示。

进行最后一轮搜索。 用:

Ctrl+Shift+F (in IntelliJ)

在一个接一个的模块中搜索“import ...bad class...”、“stream”(必须这样做)或您可能发现的任何新的微妙问题。

使用模块作为您的搜索单位将使您比其他排序选项更有条理,并使您更快地完成项目。

最后,修复列表中的所有问题。 它们可能是 try/catch/finally、try-with-resources 或其他一些解决方案之王。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM