6

我即将将应用程序部署到实时服务器,现在我必须为 jvm 设置堆和 permgen 大小。我看过很多文章,他们都说“将最小堆大小设置为(某个数字)”,以及“将最大堆大小设置为(某个数字)”,但是这些文章都没有真正说明为什么需要设置最小堆大小。我理解设置最大堆大小的原因,但不是关于最小值。如果您对此有所了解,我将不胜感激。

4

3 回答 3

7

Java中的堆是一般的内存分配区域。让我们假设我们将最小堆大小设置为 1000 字节(这是一个荒谬的低数字)。现在假设我在我的程序中实例化了一个对象,其中包含一些两千个字符长的文本。如果不先扩展我的堆大小,我将无法保存此对象。现在,大概我的最大堆参数足够大以允许这样做 - 但这就是设置最大堆大小的原因。

但是,假设我的服务器有 4G 内存,我将最小堆大小设置为该值。(一个大得离谱的数字。)如果没有其他程序占用任何内存,这将起作用。但是,如果我用我的 java 程序启动第二个进程,它将无法分配足够的内存并退出。

最小尺寸为您做两件事;首先,它使内存快速可用以允许快速启动。其次,它可以让你调整你的 jvm,让你有一些不变量,让你可以预测你可以运行多少个进程。如果您的最小堆大小太大,您可能会在一个从不需要那么多的进程上浪费内存,从而限制系统的容量。如果将其设置得太小,程序将需要很长时间才能启动,从而对进程的性能产生不利影响。

于 2012-05-15T16:42:33.460 回答
1

设置最小堆大小允许 Java 预先分配一些内存,从而缩短启动时间。

于 2012-05-15T16:38:47.853 回答
1

显式设置最小大小(高于默认值)有助于在操作系统级别分配碎片和启动时间性能。

Java 堆由操作系统分配的内存支持,初始块越大,发生的重新分配和碎片就越少。

将最小值设置为等于或几乎等于最大值,将完全消除这些情况。

于 2012-05-15T16:39:02.363 回答