1.堆内存溢出示例代码
import java.util.ArrayList; import java.util.List; public class TestHeap { public static void main(String[] args) { List<User> list = new ArrayList<>(); while(true) { list.add(new User()); } } }
问:这是个小程序,可以快速定位内存溢出的位置,若是大应用中呢?代码上百万行,很难通过代码定位。这时该如何定位呢?
答:通过分析工具定位!
问:如何通过分析工具定位?
答:首先,将内存转储成一个快照,然后通过快照对当前环境进行分析。
问:如何生存快照?
答:通过Java虚拟机的参数设置!
-XX:+HeapDumpOnOutOfMemoryError 将Java堆内存溢出的堆存储快照dump
-vmargs //虚拟机设置
-Xms40m //初始内存
-Xmx256m //最大内存
-Xmn16m //最小内存
-XX:PermSize=128M //非堆内存
-XX:MaxPermSize=256M
原文:https://www.cnblogs.com/guchunchao/p/10482446.html