📜  如何在Java虚拟机中增加堆大小?

📅  最后修改于: 2022-05-13 01:55:15.591000             🧑  作者: Mango

如何在Java虚拟机中增加堆大小?

内存有栈内存和堆内存两种。所有动态分配都进入堆内存,其余的静态分配和变量分配进入堆栈内存。每当在Java虚拟机中执行Java程序时,它都会使用堆内存来管理数据。任务引擎在 JVM( Java虚拟机)上运行。层次结构如下图所示。

所以现在谈到堆内存,堆是Java虚拟机 (JVM) 使用的内存中的一个位置。 Java虚拟机有一个在所有Java虚拟机线程之间共享的堆。堆是运行时数据区,从中分配所有类实例和数组的内存。堆是在虚拟机启动时创建的。对象的堆存储由自动存储管理系统(称为垃圾收集器)回收;对象永远不会被显式地重新分配。 Java虚拟机不假设任何特定类型的自动存储管理系统,存储管理技术可以根据实现者的系统需求来选择。堆可以是固定大小的,也可以根据计算的需要进行扩展,如果不需要更大的堆,则可以收缩。堆的内存不需要是连续的。

Java虚拟机实现可以为程序员或用户提供对堆初始大小的控制,以及如果堆可以动态扩展或收缩,则可以控制最大和最小堆大小。当计算需要的堆多于自动存储管理系统所能提供的堆时,以下异常情况与堆相关联, Java虚拟机将抛出 OutOfMemoryError。

默认情况下,JVM 堆大小为 1GB,通常足以容纳 Task Engine 使用的数据。但是,在某些情况下可能需要更大的堆大小,例如,当任务中参数的平均大小非常大时。在这些情况下,以下日志项会记录在任务引擎日志文件中。如果此日志项经常出现,则需要增加堆大小。



现在的问题是如何增加内存的堆大小。因此,现在可以通过使用命令行选项来更改/增加 JVM 堆大小的通用解决方案。

-Xms : To set an initial java heap size
-Xmx : To set maximum java heap size
-Xss : To set the Java thread stack size
-Xmn : For setting the size of young generation, rest of the space goes for old generation

过程:增加应用程序服务器 JVM 堆大小

  1. 登录到应用程序服务器管理服务器。
  2. 导航到 JVM 选项。
  3. 编辑 -Xmx256m 选项。
  4. 此选项设置 JVM 堆大小。
  5. 将 -Xmx256m 选项设置为更高的值,例如 Xmx1024m。
  6. 保存新设置。