当前位置: 首页 > 知识库问答 >
问题:

调整大小时 JVM 元空间是否总是触发 GC

聂宜
2023-03-14

对于Java 8之后的JVM

  1. 当metaspace的大小

共有2个答案

谭裕
2023-03-14

您可以配置元空间大小,但是JVM可以根据依赖的平台增加或减少大小。请参见Oracle文档。

-XX:元空间大小=大小

设置第一次超过时将触发垃圾回收机制的已分配类元数据空间的大小。垃圾回收机制的此阈值根据使用的元数据量增加或减少。默认大小取决于平台。

贺浩漫
2023-03-14

首先,“元空间的大小”是模棱两可的,因此没有上下文就没有意义。至少有五个指标:此答案中所述的预留、已提交、容量和已用内存,以及高水位线(也称为capacity_until_gc)。

元空间不仅仅是一个连续的内存区域,所以它不会按照通常的方式调整大小。相反,当分配发生时,上述一个或多个指标会发生变化。

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

GC之后,根据以下JVM标志调整高水位标记值:

    < Li > < code >-XX:MinMetaspaceFreeRatio (用于计算元空间容量中需要多少可用空间,以决定HWM增加多少); < Li > < code >-XX:MaxMetaspaceFreeRatio (用于确定在减少HWM之前,metaspace容量中需要多少可用空间); < Li > < code >-XX:minmetaspace expansion (元空间的最小扩展,以字节为单位); < Li > < code >-XX:maxmetaspace expansion (不使用完全GC时Metaspace的最大扩展)。

太长别读没那么简单。JVM绝对可以在不触发GC的情况下提交更多的Metaspace内存。但是,当达到HWM时,会触发GC并根据人体工程学策略重新计算HWM。

 类似资料:
  • 问题内容: 调整浏览器窗口大小时,有什么方法可以调整jqGrid的大小?我已经尝试过这里描述的方法,但是该技术在IE7中不起作用。 问题答案: 作为后续措施: 由于不可靠,本文中显示的先前代码最终被放弃了。我现在按照jqGrid文档的建议使用以下API函数调整网格大小: 为了进行实际的大小调整,将实现以下逻辑的函数绑定到窗口的resize事件: 使用其父级的clientWidth和(如果不可用)o

  • 下面是有问题的代码: 目前,在

  • 问题内容: 在放入HashMap期间发生冲突时,是否会调整地图大小或将条目添加到该特定存储桶中的列表中? 问题答案: 当您说“冲突”时,您是指相同的哈希码吗?哈希码用于确定要使用HashMap中的哪个存储桶,并且该存储桶由具有相同哈希码的所有条目的链表组成。然后在返回或引导(获取/放入)之前比较条目的相等性(使用.equals())。 请注意,这是专门用于HashMap的(因为这是您所要求的),而

  • 问题内容: 我想定期执行一个程序,如何在MySQL中做到这一点? 问题答案: 如果您拥有MySQL 5.1,则可以使用事件。 http://dev.mysql.com/doc/refman/5.1/zh- CN/events.html

  • 问题内容: 当前,在我们的测试环境中,最大和最小JVM堆大小设置为相同的值,基本上与专用服务器计算机为我们的应用程序所允许的大小相同。这是性能最佳的配置,还是给JVM一个更好的范围? 问题答案: 设置- Xms的主要原因是,如果您在启动时需要一定的堆。(防止OutOfMemoryErrors在启动时发生。)如上所述,如果您需要启动堆来匹配最大堆,则是匹配它的最大时间。否则,您将不需要它。只是要求应

  • 为了增强用户体验,CSS3 中新增了一个非常实用的 resize 属性,该属性允许用户通过拖动的方式来自由缩放元素的尺寸,在此之前要实现类似的效果还需要借助大量的 JavaScript 代码。resize 属性的语法格式如下: resize: none|both|horizontal|vertical; 语法说明如下: none:用户无法调整元素的尺寸; both:用户可调整元素的高度和宽度; h