use*_*142 0 java garbage-collection jvm jvm-hotspot jvm-arguments
当我启动JVM时,它至少保留{{xms}}个内存,对吗?这意味着这个内存对于JVM进程是私有的(它是malloced),是吗?当JVM需要增加堆储备(mallocs)的内存时.但是多少钱?我不相信它保留的确尽可能多,可能有一定的步骤(池?)大小.
如何配置这个"步长"?
所有这一切都会发生,直到达到{{xmx}}并抛出OOM,对吧?
当JVM启动GC时?不是说xmx,而是保留堆大小(这个池的顶部)?
如果是这样,最好将xms设置为接近xmx以防止许多无用的GC.我会有一个巨大的GC,而不是很多小的,每个GC冻结我的JVM的bug,所以最好有一个,对吗?
当JVM需要增加堆储备(mallocs)的内存时.但是多少钱?
你不应该真的在乎.它只是有效.许多建议使用相同的Xmx,Xms以便JVM在启动时分配所有内存.这是合理的,请进一步阅读.
如何配置这个"步长"?
它不能,它完全实现,可能依赖于操作系统.
当JVM启动GC时?不是说xmx,而是保留堆大小(这个池的顶部)?
GC比你想象的要复杂一点.当年轻一代被填满时执行次要GC .主要GC被称为老一代没有剩余空间.
所有这一切都会发生,直到达到{{xmx}}并抛出OOM,对吧?
不,Xmx到达时,JVM稳定并且没有任何错误发生.OutOfMemoryError在GC之后,JVM无法为新对象找到足够的空间(这是一个主要的简化).
如果是这样,最好将xms设置为接近xmx以防止许多无用的GC.
您必须再次了解GC的工作原理.使用Xmx等Xms于是一个很好的选择,因为它避免了应用程序运行时不必要的分配(一切都在启动时发生,没有进一步的开销).GC与此无关.
而不是很多小的,每个GC冻结我的JVM的bug,所以最好有一个,对吧?
不.轻微GC通常需要几十毫秒而且几乎不可见,除非您正在使用实时系统.主要(停止世界)GC可能需要几秒钟,对于最终用户来说肯定是值得注意的.在正确调整的JVM中,主要的GC应该很少发生.