Java堆/池大小
当我启动JVM时,它至少会保留{{xms}}内存,对吗?这意味着这个内存对于JVM进程是私有的(它是malloced),是吗? 当JVM需要增加heap at reserves(mallocs)时,需要更多内存。但是多少钱? 我不相信它的储备完全符合它的需要,可能有一定的台阶(池?)大小 如何配置此“步长” 直到到达{{xmx}}并抛出OOM为止,所有这些都会发生,对吗 JVM何时启动GC?不是在xmx上,而是在保留堆大小(池的顶部)上 如果是这样,最好将xms设置为接近xmx,以防止许多无用的GCs。Java堆/池大小,java,garbage-collection,jvm,jvm-hotspot,jvm-arguments,Java,Garbage Collection,Jvm,Jvm Hotspot,Jvm Arguments,当我启动JVM时,它至少会保留{{xms}}内存,对吗?这意味着这个内存对于JVM进程是私有的(它是malloced),是吗? 当JVM需要增加heap at reserves(mallocs)时,需要更多内存。但是多少钱? 我不相信它的储备完全符合它的需要,可能有一定的台阶(池?)大小 如何配置此“步长” 直到到达{{xmx}}并抛出OOM为止,所有这些都会发生,对吗 JVM何时启动GC?不是在xmx上,而是在保留堆大小(池的顶部)上 如果是这样,最好将xms设置为接近xmx,以防止许多无用的
我将有一个巨大的GC而不是许多小GC,每个GC都会冻结我的JVM,所以最好有一个,对吗?关于开关的含义,你是正确的 我记得开关的方式是 xm*s*=以“s”结尾,类似于“*s*启动内存” xm*x*=以“x”结尾,如“ma*x*imum内存” 由给定的JVM决定如何从起始内存移动到最大内存。假设两者之间不是非常接近,分配将在我所知道的所有JVM上分步进行 我不知道在任何JVM中有任何控制步骤大小的选项。当然没有标准的选择
不同的JVM有不同的GC策略。一些JVM允许您使用多个GC策略中的一个,由命令行开关控制。关于开关的含义,您是正确的 我记得开关的方式是 xm*s*=以“s”结尾,类似于“*s*启动内存” xm*x*=以“x”结尾,如“ma*x*imum内存” 由给定的JVM决定如何从起始内存移动到最大内存。假设两者之间不是非常接近,分配将在我所知道的所有JVM上分步进行 我不知道在任何JVM中有任何控制步骤大小的选项。当然没有标准的选择 不同的JVM有不同的GC策略。一些JVM允许您使用由命令行开关控制的多个GC策略之一 当JVM需要增加heap at reserves(mallocs)时,需要更多内存。但是多少钱 你不应该真的在乎。它只是工作。许多建议使用equal
Xmx
和Xms
以便JVM在启动时分配所有内存。这是合理的,请进一步阅读
如何配置此“步长”
它不能,它是完全实现的,并且可能依赖于操作系统
JVM何时启动GC?不是在xmx上,而是在保留堆大小(池的顶部)上
GC比您想象的要复杂一些。当年轻一代被填满时,执行次要GC。主要的GC被称为旧一代已经没有更多的空间了
直到到达{{xmx}}并抛出OOM为止,所有这些都会发生,对吗
否,当到达Xmx
时,JVM会稳定下来,不会发生任何错误<代码>OutOfMemoryError在GC之后,JVM无法找到足够的空间容纳新对象时抛出(这是一个主要的简化)
如果是这样,最好将xms设置为接近xmx,以防止许多无用的GCs
再一次,您必须了解GC是如何工作的。使用Xmx
等于Xms
是一个不错的选择,因为它避免了应用程序运行时不必要的分配(一切都在启动时发生,没有进一步的开销)。GC与此无关
每个GC都会冻结我的JVM,所以最好有一个,不是吗
没有。小型GC通常需要几十毫秒,并且几乎不可见,除非您使用的是实时系统。主要(停止世界)GC可能需要几秒钟的时间,这对于最终用户来说是显而易见的。在经过正确调优的JVM中,应该很少发生主要的GC
当JVM需要增加heap at reserves(mallocs)时,需要更多内存。但是多少钱
你不应该真的在乎。它只是工作。许多建议使用equalXmx
和Xms
以便JVM在启动时分配所有内存。这是合理的,请进一步阅读
如何配置此“步长”
它不能,它是完全实现的,并且可能依赖于操作系统
JVM何时启动GC?不是在xmx上,而是在保留堆大小(池的顶部)上
GC比您想象的要复杂一些。当年轻一代被填满时,执行次要GC。主要的GC被称为旧一代已经没有更多的空间了
直到到达{{xmx}}并抛出OOM为止,所有这些都会发生,对吗
否,当到达Xmx
时,JVM会稳定下来,不会发生任何错误<代码>OutOfMemoryError在GC之后,JVM无法找到足够的空间容纳新对象时抛出(这是一个主要的简化)
如果是这样,最好将xms设置为接近xmx,以防止许多无用的GCs
再一次,您必须了解GC是如何工作的。使用Xmx
等于Xms
是一个不错的选择,因为它避免了应用程序运行时不必要的分配(一切都在启动时发生,没有进一步的开销)。GC与此无关
每个GC都会冻结我的JVM,所以最好有一个,不是吗
没有。小型GC通常需要几十毫秒,并且几乎不可见,除非您使用的是实时系统。主要(停止世界)GC可能需要几秒钟的时间,这对于最终用户来说是显而易见的。在正确调优的JVM中,主要GC应该很少发生。关于次要集合与主要集合,只需确保您的-Xmn,即您的eden与保留堆的比率不太小。我认为默认值是1:3,但我通常更喜欢1:10。但这完全取决于您的应用程序。关于次要和主要收藏,请确保您的-Xmn(即您的伊甸园)符合使用期限