首页 > 解决方案 > 在任务管理器和 Profiler 中监控 java 应用程序内存,哪个是正确的?

问题描述

我正在监视从 Netbeans 运行的应用程序的内存使用情况。我对两个不同的结果感到有些困惑。

任务管理器为我提供了一个值,而 Netbeans 中的 Profiler 显示了不同的值。

例如,这是应用程序内存使用量为 2,927.3 MB 的任务管理器屏幕截图 在此处输入图像描述

但是分析器显示了这一点(查看右上图): 在此处输入图像描述 总堆大小超过 3GB,但使用的堆看起来不到 2GB。

所以对我来说,探查器和任务管理器之间的值不匹配。

哪一个更准确地表示应用程序的内存使用情况?

标签: javamemorygarbage-collectionprofilervisualvm

解决方案


这是因为,至少据我所知,Java 进程消耗的内存是由两部分组成的。

Heap,这是每次代码执行语句时分配对象的段,例如 CExample Exam = new CExample();

Non-heap,这是您找到每个线程的堆栈和元数据类的部分,以前称为永久代,现在称为元空间。据我所知,非堆还包含由 Just In Time 编译器生成的本机代码,以提高应用程序的性能。

我认为您可以查看这些链接以获得有关堆和非堆段的更多见解。

https://betsol.com/java-memory-management-for-java-virtual-machine-jvm/

https://docs.oracle.com/javase/8/docs/api/java/lang/management/MemoryMXBean.html


推荐阅读