Java 堆转储(hprof 文件)比常驻内存小得多

标签 java garbage-collection heap-memory

当运行 top 时,看到我的 RES 是 4.7GB,这很好,因为我设置了 -Xmx8g,但是当我将其转储到 hprof 文件时,我得到了大约一半的 gig 文件。

不是应该包含所有内存吗? 顺便说一句,即使我强制 GC(使用 jcmd),我仍然看到 4.7G 驻留。​​

最佳答案

堆转储文件(hprof)不是内存转储,而是对象堆转储。它仅包含 java 对象。

堆转储文件不包括 - 非堆内存区域(例如代码缓存、元空间等) - 一些堆对象(例如类)不包含在转储中 - 保留但未在堆中使用的空闲区域

就您而言,您可能有大量未使用的堆空间。 GC 不会将已用空间归还给 OS,因此 RES 大小仍为 4.7G

关于Java 堆转储(hprof 文件)比常驻内存小得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36964475/

相关文章:

java - Spring MVC 教程项目不基于 IntelliJ 构建

c - realloc() 浪费了很多空间,我做错了什么?

C++ 变量/对象和堆内存管理

c - Boehm GC如何为C程序工作?

java - 在垃圾收集例程运行之前程序何时终止

java - 垃圾收集和 Picasso 的问题

java - 使用 Jmap 在 OutOfMemoryError 上转储 Java 堆文件

java - 如何在 Java 中获取 "datasheet"功能

java - Hibernate 没有更新记录 - Wicket

java - 迭代数组列表并打印数组中的每个元素