JVM Profiler与Mac OS X活动监视器中的内存使用情况

ali*_*air 9 java memory macos memory-leaks memory-management

我一直在分析我的java应用程序,并且对我报告的应用程序的内存使用情况感到困惑(通过eclipse运行).它总是与分析器报告的内存使用量大不相同,并且实际上甚至不匹配.

应用程序的JVM标志是:

-Xmx1G 
-Xms1G 	
-XX:MaxMetaspaceSize=256M
-XX:CompressedClassSpaceSize=256M
Run Code Online (Sandbox Code Playgroud)

此图像显示进程"java"的报告内存为1.67GB.当我双击该过程时,细分显示1.15GB的"实际内存大小"和各种其他内存指标.

报告了Mac OS X内存使用情况

飞行记录器显示应用程序坚持其1GB堆大小.我进行了测试,表明它也符合其元空间限制.

飞行记录器内存使用情况

我的问题有两个:1)任何想法为什么报告的内存使用在过程(由Mac OS X报告)和分析器之间是如此不同?2)知道为什么活动监视器中显示的内存与进程内存崩溃之间存在差异?

D. *_*ács 5

1) 真实内存就是一切:堆 + 堆栈 + MetaSpace(以前称为 PermGen)+ CompressedClassSpaceSize + 等。您将堆限制为 1GiB,如 Flight Recorder 所示。操作系统将所有内容都显示在一起,而不仅仅是堆,这就是这种差异的根源。它不是特定于操作系统/JVM 的(即,在 *nix、Windows 上尝试,您会看到相同的结果)。

2)这是操作系统特定的。对于 Mac OS,请参阅这个非常详细的答案