我有一个问题与Java堆内存。 我开发了运行为Windows服务它需要比512MB内存更在java中一个客户端服务器应用程序。 我有2GB的RAM,但是当我运行我的应用程序,它抛出一个异常
内存不足错误:java的堆空间
但我已经在Java控制面板已经设置堆大小(最大512MB),我仍然得到同样的错误。 因为我的应用程序运行作为Windows服务我怎么能增加默认堆大小我无法通过命令行来设置堆的大小?
我有一个问题与Java堆内存。 我开发了运行为Windows服务它需要比512MB内存更在java中一个客户端服务器应用程序。 我有2GB的RAM,但是当我运行我的应用程序,它抛出一个异常
内存不足错误:java的堆空间
但我已经在Java控制面板已经设置堆大小(最大512MB),我仍然得到同样的错误。 因为我的应用程序运行作为Windows服务我怎么能增加默认堆大小我无法通过命令行来设置堆的大小?
请注意,增加Java堆大小以下的java.lang.OutOfMemoryError:Java堆空间是相当往往只是一个短期的解决办法。
这意味着,即使你增加从512 MB默认的Java堆大小,以让我们说2048 MB,你还可以在某些时候得到这个错误,如果你正在处理一个内存泄漏。 要问的主要问题是,你为什么要摆在首位获得这个OOM错误? 它是一个真正的XMX值过低或只是另一个问题的症状?
当开发一个Java应用程序,它始终是了解早期的静态和动态内存占用的要求是至关重要的,这将有助于防止以后复杂的OOM问题。 的JVM X毫秒&XMX设置适当的大小可通过适当的应用程序分析和负载测试来实现。
Java虚拟机需要该设定的初始和最大堆大小两个命令行参数:-Xms和-Xmx。 您可以添加一个名为_JAVA_OPTIONS系统环境变量,并设置堆大小值存在。
例如,如果你愿意,你可以使用一个512Mb的初始和1024MB最大堆大小:
在Windows下:
SET _JAVA_OPTIONS = -Xms512m -Xmx1024m
Linux下:
export _JAVA_OPTIONS="-Xms512m -Xmx1024m"
有可能通过使用运行时类的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参数=256米其改变存储器保留用于永久代
如果您的应用程序作为Windows服务,在控制面板 - >管理工具 - >服务,你可以添加一些运行参数为您服务
这为我工作:
出口_JAVA_OPTIONS = “ - Xmx1g”
这一点很重要,你有没有空间,因为对我来说,没有工作。 我建议只是复制和粘贴。 然后我跑:
java的-XshowSettings:VM
它会告诉你:
拿起_JAVA_OPTIONS:-Xmx1g