Windows 任务管理器 javaw.exe 内存与 Java 任务控制

Windows task manager javaw.exe memory vs Java Mission Control

我正在使用我的 Windows 7 机器帮助开发一个 java 应用程序,该机器有 Java 8 Update 45。我注意到内存大小存在很大差异 Windows 任务管理器说正在被应用程序使用(通过 javaw.exe 图像),以及 Eclipse 内存 Analyzer/Java 任务控制报告的内容。

示例:Java Mission Control 报告使用了 150 MB 的 Java 堆内存,而 Windows 表示 javaw.exe 使用了 303 MB 的工作集。我知道 JVM 本身、GC 等可能会有一些开销。

但我也看到它在进行 GC。在点击一下以增加内存后,JMC 显示已执行 GC 并表示已使用 200 MB 的堆。 Windows 报告 619 MB(它从未下降)。 Windows 是否没有正确显示 Java 的内存使用情况?应用程序的某些问题导致了这种情况发生?

当JVM启动时,它会为堆分配一块连续的内存区域。此内存可以延迟转换为实际内存,但几乎不会传回操作系统。

堆只是 JVM 使用的一个内存区域。它对您来说可能是最重要的,但是当您的堆非常小时,与 JVM 使用的其他区域相比它可能很小。这包括

  • 本机内存,例如直接字节缓冲区。
  • GUI 本机组件。
  • 共享库。
  • jar 文件。
  • 元空间(或永久代)
  • 线程堆栈内存。

Is Windows not displaying memory usage by Java properly?

Windows 显示所有使用的内存,而不仅仅是堆使用的部分。

Something with the application cause this to happen?

Windows 不知道您使用的最大堆大小是多少。