JVM应用程序在Oracle Hotspot JVM上运行,它以默认JVM设置启动,但初始堆大小为100 1GB,最大堆大小为1GB。
在何种情况下,JVM将决定增加当前堆的大小,而不是尝试GC?
发布于 2014-01-16 14:12:53
HotSpot JVM不断监视分配率和对象的生存期。它试图实现两个关键因素:
简单地说,您可以将其描述为HotSpot具有一些配置的阈值,这表明在运行垃圾收集器后,分配的堆总数中有多少是空闲的。例如,如果将此阈值配置为70%,并且在运行完完整的GC堆后,使用率将为80%,则将分配额外的内存以达到阈值。当然,更大的堆意味着更长的暂停时间,而较小的堆意味着更频繁的集合。
但是您必须记住JVM非常复杂,您可以通过使用标志来改变这种行为:
AdaptiveSizePausePolicy,它将选择堆大小以实现最短的暂停。AdaptiveSizeThroughPutPolicy,它将选择堆大小以达到最高吞吐量。GCTimeLimit和GCTimeRatio,用于设置应用程序执行所花费的时间。发布于 2014-01-16 14:05:33
占用Heap的对象数量增加,而垃圾收集是不可能的。
当对象由于被当前进程使用而无法作为垃圾收集时,JVM需要增加它的堆大小以允许创建新对象。
https://stackoverflow.com/questions/21163932
复制相似问题