首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM metaspace在调整大小时是否总是触发GC?

JVM metaspace在调整大小时是否总是触发GC?
EN

Stack Overflow用户
提问于 2019-07-24 06:46:19
回答 2查看 1.8K关注 0票数 2

Java 8之后的JVM

  1. 当metaspace > -XX:metaspaceSize的大小时,它将触发gc。
  2. 无论您如何配置-XX:metaspaceSize-XX:maxMetaspaceSize,metaspace的初始大小通常是64位服务器上的一个固定值(20.8M)。
  3. JVM将在接近当前容量时自动调整metaspace的大小。
  4. 然后,如果-XX:metaspaceSize是20G --例如,metaspace的当前大小为18 m,并且必须分配大量新对象(约100 m),JVM必须为这些新对象调整元空间的大小,JVM会在调整大小之前触发完整的GC吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-26 01:00:22

首先,“metaspace的大小”是模棱两可的,因此没有上下文就没有意义。至少有五种度量标准:保留的提交的容量使用这个答案中描述的内存,以及高水区标记,也称为

Metaspace不仅仅是一个连续的内存区域,所以它在常识上不会调整大小。相反,当分配发生时,上述指标中的一个或多个会发生更改。

  1. 在最快的路径上,从当前块中分配一个元数据块。在这种情况下,used内存会增加,仅此而已。
  2. 如果当前块中没有足够的空间,JVM将搜索一个可能是空闲的现有块。如果它成功地重用了块,capacity就会增加。在此之前不发生GC。
  3. 如果没有空闲块,JVM将尝试提交更多内存,除非新的committed大小将超过capacity_until_gc
  4. 如果达到capacity_until_gc阈值,JVM将触发GC循环。
  5. 如果GC没有释放足够的内存,则会增加高水标记,以便分配另一个虚拟空间。

GC后,基于以下JVM标志对高水标值进行调整。

  • -XX:MinMetaspaceFreeRatio (用于计算在元空间中需要多少自由空间,以决定增加多少HWM);
  • -XX:MaxMetaspaceFreeRatio (用于在减少HWM之前决定在元空间中需要多少自由空间);
  • -XX:MinMetaspaceExpansion (元空间的最小扩展,以字节为单位);
  • -XX:MaxMetaspaceExpansion (无完全GC的Metaspace的最大扩展)。

TL;博士--这不是那么简单。JVM可以在不触发GC的情况下提交更多的Metaspace内存。然而,当达到HWM时,会触发GC,并根据人机工程学策略重新计算HWM。

票数 4
EN

Stack Overflow用户

发布于 2019-07-24 07:19:13

您可以配置metaspace大小,但是JVM可以通过依赖的平台来增加或减小大小。请参阅甲骨文医生。

-XX:MetaspaceSize=size 设置分配的类元数据空间的大小,该空间将在第一次超过垃圾收集时触发垃圾收集。垃圾回收的这个阈值会根据使用的元数据数量而增加或降低。默认大小取决于平台。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57176806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档