java - 可能的内存泄漏?

标签 java memory-management memory-leaks profiling

我有一个正在运行的 java webapp,我正在使用 visualVM 进行监控。

这是堆的图:

heap

使用两组请求进行了测试,一组在大约 3:20,另一组在大约 4:40(它们在图中表示为仅有的两个峰值)。

我的问题是:这是否意味着我有内存泄漏?我担心中间部分,虽然 GC 运行,但堆一直保持在 250MB。

非常感谢您的见解。

最佳答案

在 3:20 的第一个请求导致一些内存被占用,但请注意,在第二个请求之后的 GC 回收了大部分内存。另外我认为 major GC 是在 4:40 的第二次请求之后才执行的。

看起来没有泄漏。我的理论是 3:20 的请求导致年轻代被填满,由此产生的次要 GC 将一些对象提升到老年代。由 4:40 的请求引起的下一次主要 GC 清除了大部分内容。

您可以通过在发出与 3:20 时相同的请求之前使用分析器标记堆来验证这一点,强制进行完整的 GC,然后检查哪些对象是延迟的。我不确定 VisualVM 是否允许您 (1) 标记堆和 (2) 强制执行完整 GC,但 OptimizeIt 曾经这样做过。

关于java - 可能的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2029595/

相关文章:

java - 如何捕获事件调度线程 (EDT) 异常?

memory-management - 数据类型和大小如何存储在内存中?

c - 分配内存时内存泄漏

c++ - 如何删除由指针数组组成的成员变量

java - MySql数据库设置: unknown database fcdb

java - Java 语法高亮器

c++ - 保存对象的析构函数地址并在以后调用它是否定义明确的行为?

c++ - libpng 中的内存泄漏?还是我只是愚蠢?

java - Mqtt 客户端 Paho 关闭问题 (Java)

c++ - 符合 STL 的内存分配器库