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)
P-H*_*P-H -5
请注意,在java.lang.OutOfMemoryError: Java 堆空间之后增加 Java 堆大小通常只是一个短期解决方案。
这意味着,即使您将默认 Java 堆大小从 512 MB 增加到 2048 MB,如果您正在处理内存泄漏,您仍然可能在某些时候遇到此错误。要问的主要问题是为什么首先会出现 OOM 错误?这真的是 Xmx 值太低还是只是另一个问题的症状?
在开发 Java 应用程序时,尽早了解其静态和动态内存占用要求始终至关重要,这将有助于防止以后发生复杂的 OOM 问题。通过正确的应用程序分析和负载测试可以实现 JVM Xms 和 Xmx 设置的正确大小。
| 归档时间: |
|
| 查看次数: |
130428 次 |
| 最近记录: |