如何永久增加java堆内存?

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

内存不足错误:java堆空间

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

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

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

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

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

在Windows下:

SET _JAVA_OPTIONS = -Xms512m -Xmx1024m 

在Linux下:

 export _JAVA_OPTIONS="-Xms512m -Xmx1024m" 

可以使用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); } } 

如果你需要增加预留内存,有VM参数-Xms和-Xmx,用法例如-Xms512m -Xmx512m。 还有参数-XX:MaxPermSize = 256m,它更改为永久生成保留的内存

如果您的应用程序作为Windows服务运行,则在控制面板 – >管理工具 – >服务中,您可以向服务添加一些运行参数

这对我有用:

export _JAVA_OPTIONS =“ – Xmx1g”

重要的是你没有空格,因为对我来说它不起作用。 我建议只是复制和粘贴。 然后我跑了:

java -XshowSettings:vm

它会告诉你:

拿起_JAVA_OPTIONS:-Xmx1g