当 JVM 需要在保留(mallocs)更多内存时增加堆。但是多少钱?
你不应该真的在乎。它只是工作。许多建议使用 equal Xmx
,Xms
以便 JVM 在启动时分配所有内存。这是合理的,请进一步阅读。
如何配置这个“步长”?
它不能,它完全是实现并且可能依赖于操作系统。
JVM什么时候启动GC?不是涉及到 xml,而是涉及到保留的堆大小(这个池的顶部)?
GC 比你想象的要复杂一些。当年轻代被填满时执行 Minor GC 。Major GC 称为老年代没有剩余空间。
在达到 {{xmx}} 并抛出 OOM 之前,所有这一切都会发生,对吧?
不,当Xmx
达到时,JVM 会稳定下来,不会发生任何错误。OutOfMemoryError
在 GC 之后立即抛出,JVM 无法为新对象找到足够的空间(这是一个主要的简化)。
如果是这样,最好将 xms 设置为接近 xmx 以防止许多无用的 GC。
再次,您必须了解 GC 的工作原理。使用Xmx
equal toXms
是一个不错的选择,因为它可以在应用程序运行时避免不必要的分配(一切都发生在启动时,没有进一步的开销)。GC与此无关。
而不是很多小错误,每次 GC 都会冻结我的 JVM,所以最好有一个,对吧?
没有。Minor GC 通常需要几十毫秒并且几乎是不可见的,除非您在实时系统上工作。Major (stop-the-world) GC 可能需要几秒钟,并且对于最终用户来说肯定是显而易见的。在正确调整的 JVM 中,主要 GC 应该很少发生。