Java 8之后的JVM
-XX:metaspaceSize的大小时,它将触发gc。-XX:metaspaceSize和-XX:maxMetaspaceSize,metaspace的初始大小通常是64位服务器上的一个固定值(20.8M)。-XX:metaspaceSize是20G --例如,metaspace的当前大小为18 m,并且必须分配大量新对象(约100 m),JVM必须为这些新对象调整元空间的大小,JVM会在调整大小之前触发完整的GC吗?发布于 2019-07-26 01:00:22
首先,“metaspace的大小”是模棱两可的,因此没有上下文就没有意义。至少有五种度量标准:保留的、提交的、容量和使用这个答案中描述的内存,以及高水区标记,也称为。

Metaspace不仅仅是一个连续的内存区域,所以它在常识上不会调整大小。相反,当分配发生时,上述指标中的一个或多个会发生更改。
used内存会增加,仅此而已。capacity就会增加。在此之前不发生GC。committed大小将超过capacity_until_gc。capacity_until_gc阈值,JVM将触发GC循环。GC后,基于以下JVM标志对高水标值进行调整。
-XX:MinMetaspaceFreeRatio (用于计算在元空间中需要多少自由空间,以决定增加多少HWM);-XX:MaxMetaspaceFreeRatio (用于在减少HWM之前决定在元空间中需要多少自由空间);-XX:MinMetaspaceExpansion (元空间的最小扩展,以字节为单位);-XX:MaxMetaspaceExpansion (无完全GC的Metaspace的最大扩展)。TL;博士--这不是那么简单。JVM可以在不触发GC的情况下提交更多的Metaspace内存。然而,当达到HWM时,会触发GC,并根据人机工程学策略重新计算HWM。
发布于 2019-07-24 07:19:13
您可以配置metaspace大小,但是JVM可以通过依赖的平台来增加或减小大小。请参阅甲骨文医生。
-XX:MetaspaceSize=size 设置分配的类元数据空间的大小,该空间将在第一次超过垃圾收集时触发垃圾收集。垃圾回收的这个阈值会根据使用的元数据数量而增加或降低。默认大小取决于平台。
https://stackoverflow.com/questions/57176806
复制相似问题