MaxMetaspaceSize和CompressedClassSpaceSize是控制元空间大小的旋钮
现在,这些参数可能有点混乱。首先,它们有两种,它们有着微妙的不同含义,它们相互影响。
所以让我们仔细看看。我们将详细解释这些参数是如何工作的。然后,我们将分析单个类平均需要多少元空间。最后,我们将尝试导出一些粗略的经验法则,并检查默认行为是什么。
这里再明确两个概念:
MaxMetaspaceSize:这是对提交的元空间最大值的“软”限制。它包括非类空间和类空间。从这个意义上说,它是“软”的,因为除了希望有一个限制之外,没有紧迫的技术原因。它是完全可选的,实际上在默认情况下是关闭的。
CompressedClassSpaceSize:这是一个硬限制,定义压缩类空间的虚拟大小。“很难”,因为我们需要在VM启动时修复它,而且永远无法更改它。如果我们省略它,它默认为1G。
此图说明了这些限制是如何工作的:
红色部分是Metaspace的提交部分的总和,包括非类空间节点和一个巨大的类空间节点。此总和受-XX:MaxMetaspaceSize限制。尝试提交超过-XX:MaxMetaspaceSize的内存将导致OutOfMemoryError("Metaspace")。
-XX:MaxMetaspaceSize的目的当然很简单:对提交的Metaspa