我正在使用Jconsole来监控Java应用程序。内存选项卡显示不同的堆和非堆内存,例如:
- 堆内存使用
- 非堆内存使用
- 内存池 "CMS Old Gen"
- 内存池 "Par Eden Space"
- 内存池 "Par Survivor Space"
- 内存池 "Code Cache"
- 内存池 "CMS Perm Gen"
这些术语之间有什么区别?另外,请提供一些关于如何通过监视这些参数来查找应用程序行为异常的信息。
我正在使用Jconsole来监控Java应用程序。内存选项卡显示不同的堆和非堆内存,例如:
这些术语之间有什么区别?另外,请提供一些关于如何通过监视这些参数来查找应用程序行为异常的信息。
在所有基于C语言(以及大多数其他语言)中,存储可以分为三个类别:
你熟悉堆。
栈也很熟悉,但你只是不知道它而已。当你有一个带有“本地”变量的方法时,“本地”变量会被分配到“调用帧”中。“调用帧”在调用该方法时分配,在从该方法返回时删除,因此最有效的实现方式是使用一个随调用增长并随返回缩小的“栈”。
静态是你没有明确分配的东西,而且从程序执行开始就存在。
栈所需的空间通常相当小,与上述类别中的“非堆内存”混合在一起。
非堆内存指的是JVM为除了堆以外的目的所分配的所有内存空间。这包括:
在您的列表中,“CMS Old Gen”,“Par Eden Space”,“Par Survivor Space”和“CMS Perm Gen”都指向堆的各个部分。