首先创建一个会大量申请堆栈内存的应用类,然后启动该应用。
package projectForEclipse.day01;
import java.util.ArrayList;
import java.util.List;
public class test {
private static final Integer size = 1024*1024*8;
public static void main(String[] args) throws Exception {
List<byte[]> list = new ArrayList<byte[]>();
int i =0;
while(true) {
System.out.println("第"+(++i)+"次写入数据......");
Thread.sleep(1000);
list.add(new byte[size]);
}
}
}
在windows命令窗口输入jvisualvm
选择对应的应用程序。
点击旁边的监视,观察一段时间后会发现系统堆占用逐渐升高。
在程序还没有抛出堆栈溢出异常之前点击页面上的dump按钮(此处需要注意在程序未抛出异常之前操作,因为一旦程序抛出异常终止后将无法dump)
此时会自动跳到对应dump分析页面。(页面上还有对应heapdump文件存放的地址,可以手动打开或者用其他工具打开)
此处采用jvisualvm.exe打开生成的*.hprof文件
1.跟之前一样控制台输入jvisualvm后跳出对应页面,然后点击跳出页面左上角的文件按钮。
2.点击选择装入后进入装入页面,将刚刚生成文件进行装入打开
打开后页面如下图所示:
点击查看系统中类便签下的实例数排名,此时会发现char[]数组实例和字符串实例占据绝大多数: