我将要将一个应用程序部署到实时服务器上,现在我必须为jvm设置堆和永久大小。我看过很多文章,它们都说“将最小堆大小设置为(某个数字)”,以及“将最大堆大小设置为(某个数字)”,但这些文章都没有真正说明为什么需要设置最小堆大小。我理解设置最大堆大小的原因,但不是关于最小堆大小。如果你能对此有所了解,我将不胜感激。
发布于 2012-05-16 00:42:33
Java中的堆是通用内存分配区域。假设我们将最小堆大小设置为1000字节(这是一个低得离谱的数字)。现在假设我在我的程序中实例化了一个对象,其中包含一些2000个字符的文本。我不能保存这个对象,除非首先扩展我的堆大小。现在,假设我的最大堆参数足够大,可以允许这样做-但这就是设置最大堆大小的原因。
但是,假设我的服务器有4G的ram,并且我将最小堆大小设置为4G。(一个大得离谱的数字。)如果没有其他程序占用任何内存,这将会起作用。但是,如果我用java程序启动第二个进程,它将无法分配足够的内存并退出。
最小大小为您做了两件事;首先,它使内存快速可用,从而允许快速启动。其次,它允许您调优jvm,以便拥有一些不变量,从而允许您预测可以运行的进程数。如果您的最小堆大小太大,则可能是在将内存浪费在一个从不需要这么多内存的进程上,从而限制了系统的容量。如果将其设置得太小,程序将需要很长时间才能启动,从而对进程的性能产生不利影响。
发布于 2012-05-16 00:38:48
设置最小堆大小允许Java预先分配一些内存,从而缩短启动时间。
发布于 2012-05-16 00:39:02
显式设置最小大小(高于默认值)有助于在操作系统级别和启动时性能上的分配碎片。
Java堆由操作系统分配的内存支持,初始块越大,发生的重新分配和碎片就越少。
将最小值设置为等于或几乎等于最大值,将完全消除这些情况。
https://stackoverflow.com/questions/10605133
复制相似问题