我即将将应用程序部署到实时服务器,现在我正处于为jvm设置堆和permgen大小的部分.我看过很多文章,所有人都说“将最小堆大小设置为(某个数字)”,并“将最大堆大小设置为(某个数字)”,但这些文章都没有说明为什么需要设置最小堆大小.我理解设置最大堆大小的原因,但不是最小堆大小.如果你对此有所了解,我将感激不尽.
解决方法
Java中的堆是一般的内存分配区域.我们假设我们将最小堆大小设置为1000字节(这是一个荒谬的低数字).现在让我说我在我的程序中实例化一个包含一些长度为两千个字符的文本的对象.如果不先扩展堆大小,我无法保存此对象.现在,大概我的最大堆参数足够大以允许这个 – 但这是设置最大堆大小的原因.
但是,假设我的服务器有4G ram,我将最小堆大小设置为. (一个荒谬的大数字.)如果没有其他程序占用任何内存,这将工作.但是,如果我使用我的java程序启动第二个进程,它将无法分配足够的内存并退出.
最小尺寸为您做两件事;首先,它使内存快速可用,以便快速启动.其次,它可以让你调整你的jvm,以便你有一些不变量,允许你预测你可以运行多少个进程.如果您的最小堆大小太大,那么您可能会在一个从不需要那么多的进程上浪费内存,从而限制了系统的容量.如果将其设置得太小,程序将需要很长时间才能启动,从而对流程的性能产生负面影响.