我在Java堆内存方面遇到了一个问题。我开发了一个客户端服务器应用程序,它作为Windows服务运行,需要超过512MB的内存。我有2GB的RAM,但是当我运行我的应用程序时,它会抛出一个异常:
内存不足错误:Java堆空间
但是我已经在Java控制面板中设置了堆大小(最大512MB),但我仍然收到相同的错误。我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,那么我该如何增加默认的堆大小呢?
我在Java堆内存方面遇到了一个问题。我开发了一个客户端服务器应用程序,它作为Windows服务运行,需要超过512MB的内存。我有2GB的RAM,但是当我运行我的应用程序时,它会抛出一个异常:
内存不足错误:Java堆空间
但是我已经在Java控制面板中设置了堆大小(最大512MB),但我仍然收到相同的错误。我无法通过命令行设置堆大小,因为我的应用程序作为Windows服务运行,那么我该如何增加默认的堆大小呢?
在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);
}
}
导出 _JAVA_OPTIONS="-Xmx1g"
注意不能有空格,因为我在尝试时没有成功。建议直接复制粘贴。然后运行命令:
java -XshowSettings:vm
输出结果会告诉你:
Picked up _JAVA_OPTIONS: -Xmx1g
如果您需要增加保留内存,请使用VM参数-Xms和-Xmx,例如使用-Xms512m -Xmx512m。还有一个参数-XX:MaxPermSize=256m,它可以更改永久代保留的内存大小。
如果您的应用程序作为Windows服务运行,在控制面板->管理工具->服务中,您可以为服务添加一些运行参数。