【发布时间】:2018-09-26 03:06:03
【问题描述】:
我对 JVM 垃圾收集器如何处理不同的 Xmx 和 Xms 值以及机器内存大小有一些疑问: 垃圾收集器将如何在以下情况下工作:
1. Machine memory size = 7.5GB
Xmx = 1024Mb
Number of processes = 16
Xms = 512Mb
我知道 16*512Mb 已经超过了机器内存大小。在这种情况下垃圾收集器将如何工作。我认为在这种情况下,内存使用量将是整个 7.5GB。这些流程将能够在这方面做任何事情吗?或者他们都会被卡住?
2. Machine memory size = 7.5GB
Xmx = 320MB
Xms is not defined.
Number of Processes = 16
在此,16*320Mb 应该小于 7.5GB。但就我而言,内存使用量再次达到 7.5GB。是否可以?或者我的应用程序中可能存在内存泄漏?
所以,基本上我想了解垃圾收集器何时运行?它是否在应用程序使用的内存达到恰好 Xmx 值时运行?还是根本没有关系?
【问题讨论】:
-
垃圾收集器不需要对你使用超过物理内存做任何事情。实现虚拟内存是操作系统的职责。除此之外,还有更多的堆内存。有程序代码、类元数据、堆栈、I/O 缓冲区等等。因此内存消耗可能高于您的最大堆大小。