jvm虚拟机:jvm内存溢出问题的分析与解决

Posted wangziqiang123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm虚拟机:jvm内存溢出问题的分析与解决相关的知识,希望对你有一定的参考价值。

??学习一下java虚拟机系列,之一

添加运行参数
-XX:+HeapDumpOnOutOfMemoryError -Xms30m -Xmx30m

-XX:+HeapDumpOnOutOfMemoryError 这个参数会生成堆栈快照,用于定位异常

模拟内存溢出的场景,简单代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package top.alertcode.demo.jvm;

import java.util.ArrayList;


* @author alertcode
* @date 2018-04-03
* @copyright alertcode.top
*/
public class


* 运行这段代码最终会出现内存溢出的异常
* @param args
*/
public static void main(String[] args)
ArrayList<OutOfMemoryDemo> list = new ArrayList<OutOfMemoryDemo>();
while (true)
list.add(new OutOfMemoryDemo());


//出现下面的错误
/* Connected to the target VM, address: '127.0.0.1:53483', transport: 'socket'
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:265)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
at java.util.ArrayList.add(ArrayList.java:462)
at top.alertcode.demo.jvm.OutOfMemoryDemo.main(OutOfMemoryDemo.java:15)
Disconnected from the target VM, address: '127.0.0.1:53483', transport: 'socket'*/

??使用分析工具MAT(Eclipse Memory Analyzer),进行分析,很容易定位到内存溢出的原因,即频繁的创建对象。参照下图:
技术图片

原文:大专栏  jvm虚拟机(一):jvm内存溢出问题的分析与解决


以上是关于jvm虚拟机:jvm内存溢出问题的分析与解决的主要内容,如果未能解决你的问题,请参考以下文章

JVM内存监视手段和内存溢出解决方案

JVM内存溢出分析:堆内存溢出+虚拟机+方法区——JVM系列

实战JAVA虚拟机 JVM故障诊断与性能优化

从JVM模型谈十种内存溢出的解决方法

Java8虚拟机(JVM)内存溢出实战

深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)