如何更改JVM默认堆设置

时间:2015-12-11 06:38:25

标签: java

JVM默认设置: -Xms32m -Xmx128m -Xss128k -Xoss128k -XX:ThreadStackSize = 128

我需要更改默认堆设置,并希望在64gb服务器上增加堆内存。

  1. 更改默认设置时可能出现的问题
  2. 增加jvm堆内存的限制是什么
  3. 如何更改jvm的这些参数

2 个答案:

答案 0 :(得分:3)

  

如何更改JVM默认堆设置?

这取决于“默认”设置的含义。

  • 如果您指的是java命令实现的“默认”设置,那么您可以使用-Xmx...(等)命令覆盖默认设置@BetaRide描述的行选项。但是,您无法更改 java命令的默认值/计算方式。

  • 如果您指的是某些基于Java的应用程序使用的“默认”设置,则没有一般性答案。不同的应用程序指定要以不同方式使用的堆大小。并提供不同的是改变堆大小。一种常见的机制是设置$JAVA_OPTS环境变量,但这绝不是通用的。查看应用程序文档或阅读启动脚本。

  

更改默认设置时会出现什么问题?

  • 如果使堆太小,可能会导致应用程序遇到OutOfMemoryError秒。根据应用程序的编写程度,它会出错(一件好事),进入“死亡螺旋”,或进入一个不确定的状态。 (如果OOME发生在工作线程上并且线程终止,则会发生最后一次。解决方案是添加默认的未捕获异常处理程序,专门导致应用程序在看到Error时退出或Error子类。)

  • 如果使堆大得多,而不是物理内存,则在进行垃圾收集时,可能会冒JVM thrash 虚拟内存。这导致性能不佳,在某些操作系统上,它可能导致操作系统终止您的应用程序;例如见https://unix.stackexchange.com/questions/479575/why-is-the-linux-oom-killer-terminating-my-programs

  • 过大的堆也可能导致垃圾收集过程中无响应...仅仅因为GC(或整个GC)的某些阶段将“停止世界”,并且停止的长度更大更大的堆。 (在某些Java GC中,它只是“新”空间的大小。在其他情况下,重要的是整个堆大小。有关更多详细信息,请参阅有关GC人机工程学的Oracle文档...取决于您的Java版本)。

  

增加JVM堆内存的限制是什么?

有许多相关的限制。

  • 您平台的处理器架构和操作系统可能会限制您。例如,在32位英特尔平台上,JVM进程的最大可寻址内存为2 ^ 32字节......操作系统将为其自身目的保留大量内存。

  • 操作系统通常会根据可用物理内存量和交换空间限制所有进程的聚合虚拟内存使用量。

  • 某些操作系统(和容器)允许管理员(或用户)对进程或进程组使用的虚拟内存设置外部限制。

  • 独立于上述内容,我提到了上面提到的实际限制。 (一个太大的堆可能会导致响应能力,虚拟内存颠簸......以及OOM杀手问题。)

答案 1 :(得分:1)

您需要的唯一选择是

java -Xmx65536m your.main.Class

回答你的问题:

  1. 它不再局限于默认堆大小。
  2. 请参阅What is the largest possible heap size with a 64-bit JVM?