JVM之java堆内存溢出

Java堆用于存储对象实例,只要不断的创建对象,并且保证GC来不及清理java对象,那么在对象数量达到最大堆的容量后就会产生堆内存溢出(堆内存大小可以通过 -Xms20M  -Xmx20M 来设置,最大堆和最小堆设置的一样,可避免堆自动扩展)

                                        java堆内存溢出异常测试JDK1.7

public class HeapOOM {
	static class OOMObject{
		
	}
	public static void main(String[] args) {
		List<OOMObject> list = new ArrayList<OOMObject>();
		while(true) {
			list.add(new OOMObject());
		}
	}
}
运行结果
java.lang.OutOfMemoryError: Java heap space
java堆内存溢出异常是比较常见的异常,,当出现java堆内存溢出时,异常堆栈信息"java.lang.OutOfMemoryError"会跟着进一步提示"Java heap space"
可以用内存检测工具(MemoryAnalyzerTool)对Dump出来的堆转储快照进行分析,分清是内存泄漏,还是内存溢出
如果是内存溢出,查看jvm的堆参数-Xms与-Xmx与机器物理内存对比看是否还可以调大,从代码上检测是否存在某些对象生命周期过长,持有状态时间过长的情况,尝试减少程序运行期的内存消耗

猜你喜欢

转载自blog.csdn.net/u010943801/article/details/79872087