Java JVM如何决定扩展内存或执行GC?

Java JVM如何决定扩展内存或执行GC?,java,memory-management,garbage-collection,Java,Memory Management,Garbage Collection,我正在使用一个JBoss实例,它的起始内存为4GB,最大内存为12GB。我的问题是——JVM是如何决定何时扩展内存(从4GB以上)还是何时强制执行完整的GC?我问这个问题的原因是因为我正在观察JVM的内存配置文件,在一个例子中,我注意到它将内存上限从4GB增加到了一个更高的值,以适应内存增长的需求,在另一个例子中,它决定执行完全GC以降低使用的内存。对此有何了解?您没有说您使用的是什么JVM,但据我所知,它们都会增加堆以容纳更多对象。很可能是其他原因导致了完整gc。 如果您有12GB的可用空间(

我正在使用一个JBoss实例,它的起始内存为4GB,最大内存为12GB。我的问题是——JVM是如何决定何时扩展内存(从4GB以上)还是何时强制执行完整的GC?我问这个问题的原因是因为我正在观察JVM的内存配置文件,在一个例子中,我注意到它将内存上限从4GB增加到了一个更高的值,以适应内存增长的需求,在另一个例子中,它决定执行完全GC以降低使用的内存。对此有何了解?

您没有说您使用的是什么JVM,但据我所知,它们都会增加堆以容纳更多对象。很可能是其他原因导致了完整gc。
如果您有12GB的可用空间(如果允许JVM增长,您应该这样做),那么我还建议将Xms设置为12GB。这样,您就可以更容易地了解希望的生成大小,而无需处理堆大小调整。

要求操作系统提供更多内存是一项相对昂贵的操作。我相信只有当一个完整的gc不能为给定的操作提供足够的内存时,才会发生这种情况。