如何在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 堆大小
- 登录到应用程序服务器管理服务器。
- 导航到 JVM 选项。
- 编辑 -Xmx256m 选项。
- 此选项设置 JVM 堆大小。
- 将 -Xmx256m 选项设置为更高的值,例如 Xmx1024m。
- 保存新设置。
Note:
The process to change the heap size of the Web Server is the same you just need to log in in Web Server Administration Server. After that process is the same. It is good practice for big production projects to set the minimum -Xms and maximum -Xmx heap sizes to the same value. For efficient garbage collection, the -Xmn value should be lower than the -Xmx value. Heap size does not determine the amount of memory your process uses.