java - 如何更改 JVM 默认堆设置

标签 java

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

我需要更改默认堆设置并希望增加 64GB 服务器的堆内存。

  1. 更改默认设置时可能会出现哪些问题
  2. 增加 jvm 堆内存的限制是多少

如何更改jvm的这些参数

最佳答案

How do I change JVM default heap settings?

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

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

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

What problems can occur when the default settings are changed?

  • 如果堆太小,可能会导致应用程序遇到 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 中,重要的是"new"空间的大小。在其他情况下,重要的是整个堆大小。有关更多详细信息,请参阅有关 GC Ergonomics 的 Oracle 文档...取决于您的 Java版本。)

What is the limit to increase JVM heap memory?

有许多相关限制。

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

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

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

  • 与上述无关,还有我上面提到的实际限制。 (太大的堆可能会导致响应能力、虚拟内存抖动……以及 OOM killer 等问题。)

关于java - 如何更改 JVM 默认堆设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217508/

相关文章:

java - 表单提交时调用ajax后不显示成功页面

java - Java 中私有(private)字段名称与私有(private)字符串名称混淆

java - java中int...或N...的含义

java - CachedRowSet 上的左外连接

java - 将多个嵌套列表压缩在一起

java - Flutter - 无法将 MethodChannel 与 Firebase onBackgroundMessage 一起使用

java - 如何使用 java 将示例部分中的 Cucumber 数据表转换为 Map<Key,Value>

java - @RequestParam 省略但映射仍然正确完成

java - 在java中,从字符串中删除重复字符的最有效方法是什么?

java - 识别组件频率并计算曲线的积分