我正在监控一个从Netbeans运行的应用程序的内存使用情况。 我对两个不同的结果有些困惑。
任务管理器给了我一个值,而Netbeans中的Profiler却指示了不同的东西。
例如,以下是任务管理器的截图,该应用程序的内存使用量为2,927.3 MB。
但剖析器显示的是这样的(看右上图)。总的堆大小超过了3GB 但使用的堆看起来只有不到2GB。
所以在我看来,Profiler和任务管理器的数值并不一致。
哪一个更准确地表示应用程序的内存使用情况?
这是因为一个Java进程消耗的内存是由两个部分组成的,至少据我所知是这样。
堆CExample exam = new CExample()。
非堆,这是你发现每个线程和元数据类的堆的段,以前叫永久生成,目前叫元空间。据我所知,非堆还包含由Just In Time编译器生成的本地代码,以提高应用程序的性能。
我想你可以查看这些链接,以获得更多关于堆和非堆段的见解。
https:/betsol.comjava-memory-management-for-java-virtual-machine-jvm。
https:/docs.oracle.comjavase8docsapijavalangmanagementMemoryMXBean.html。