【发布时间】:2021-08-10 08:14:48
【问题描述】:
我正在尝试理解一些系统内存概念。
如果我有一个 Java 程序并且它的最大堆大小是 5657m
它的堆使用大小如下:(大约在954M ~ 2.3G之间)
据我了解,如果它的堆大小一旦达到 2.3G,即使它在 JVM 内部下降到 954M,内存分配也会处于这个水平。
从系统 TOP 命令来看,这个进程的 RES 为 2.7G。
*PID USER PR NI VIRT **RES** SHR S %CPU **%MEM** TIME+ COMMAND*
*13523 cloud-u+ 20 0 13.8g **2.7g** 7000 S 5.6 **8.7***
所以我可以得出结论:
-
RES 2.7G = 此 Java 进程“当前已达到的最大堆大小”+“非堆部分”大小?
-
既然Heap曾经达到2.3G,那么RES永远不会低于2.3G?
-
由于最大堆是5657m,所以RES的最大值=5657m +“非堆部分”?
【问题讨论】: