首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在何种情况下,JVM将决定增加堆的大小?

在何种情况下,JVM将决定增加堆的大小?
EN

Stack Overflow用户
提问于 2014-01-16 14:04:00
回答 2查看 650关注 0票数 4

JVM应用程序在Oracle Hotspot JVM上运行,它以默认JVM设置启动,但初始堆大小为100 1GB,最大堆大小为1GB。

在何种情况下,JVM将决定增加当前堆的大小,而不是尝试GC?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-16 14:12:53

HotSpot JVM不断监视分配率和对象的生存期。它试图实现两个关键因素:

  1. 让短命的物体在伊甸园死去
  2. 促进长寿对象按时堆叠,以防止在幸存者空间之间不必要地进行复制。

简单地说,您可以将其描述为HotSpot具有一些配置的阈值,这表明在运行垃圾收集器后,分配的堆总数中有多少是空闲的。例如,如果将此阈值配置为70%,并且在运行完完整的GC堆后,使用率将为80%,则将分配额外的内存以达到阈值。当然,更大的堆意味着更长的暂停时间,而较小的堆意味着更频繁的集合。

但是您必须记住JVM非常复杂,您可以通过使用标志来改变这种行为:

  • AdaptiveSizePausePolicy,它将选择堆大小以实现最短的暂停。
  • AdaptiveSizeThroughPutPolicy,它将选择堆大小以达到最高吞吐量。
  • GCTimeLimitGCTimeRatio,用于设置应用程序执行所花费的时间。
票数 5
EN

Stack Overflow用户

发布于 2014-01-16 14:05:33

占用Heap的对象数量增加,而垃圾收集是不可能的。

当对象由于被当前进程使用而无法作为垃圾收集时,JVM需要增加它的堆大小以允许创建新对象。

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

https://stackoverflow.com/questions/21163932

复制
相关文章

相似问题

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