如何永久增加java堆内存?

Mr.*_*ool 21 java heap jvm heap-memory heap-dump

我有java堆内存的一个问题.我在java中开发了一个客户端服务器应用程序,它作为Windows服务运行,需要超过512MB的内存.我有2GB的RAM,但是当我运行我的应用程序时,它会引发异常

内存不足错误:java堆空间

但我已经在java控制面板中设置了堆大小(最大512MB),我仍然得到相同的错误.我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,所以如何增加默认堆大小?

Geo*_*e D 36

Java虚拟机采用两个命令行参数来设置初始和最大堆大小:-Xms和-Xmx.您可以添加名为_JAVA_OPTIONS的系统环境变量,并在那里设置堆大小值.
例如,如果您想要512Mb的初始堆和1024Mb的最大堆大小,您可以使用:

在Windows下:

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m
Run Code Online (Sandbox Code Playgroud)

在Linux下:

export _JAVA_OPTIONS="-Xms512m -Xmx1024m"
Run Code Online (Sandbox Code Playgroud)

可以使用Runtime类的totalMemory()方法以编程方式读取默认JVM堆大小.使用以下代码读取JVM堆大小.

public class GetHeapSize {
    public static void main(String[]args){

        //Get the jvm heap size.
        long heapSize = Runtime.getRuntime().totalMemory();

        //Print the jvm heap size.
        System.out.println("Heap Size = " + heapSize);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 在linux上导出_JAVA_OPTIONS ="..."有效.验证:`java -version`第一行应该报告选项,例如:`Picked up _JAVA_OPTIONS:-Xms512m -Xmx2048m`. (2认同)

P-H*_*P-H -5

请注意,在java.lang.OutOfMemoryError: Java 堆空间之后增加 Java 堆大小通常只是一个短期解决方案。

这意味着,即使您将默认 Java 堆大小从 512 MB 增加到 2048 MB,如果您正在处理内存泄漏,您仍然可能在某些时候遇到此错误。要问的主要问题是为什么首先会出现 OOM 错误?这真的是 Xmx 值太低还是只是另一个问题的症状?

在开发 Java 应用程序时,尽早了解其静态和动态内存占用要求始终至关重要,这将有助于防止以后发生复杂的 OOM 问题。通过正确的应用程序分析和负载测试可以实现 JVM Xms 和 Xmx 设置的正确大小。

  • 虽然你说的没有错,但这不应该是公认的答案,因为它根本没有回答OP的问题。 (32认同)
  • 是的,这个“答案”完全忽略了用户希望定期运行需要内存中大量数据的作业的可能性......与内存泄漏无关。 (2认同)