jvm内存溢出问题的分析与解决
一、java中jdk1.8概念图的网址及结构如下:
网址: https://docs.oracle.com/javase/8/docs/
结构图:
二、写一个简单的内存溢出程序。
1、创建一个空的学生类
2、编写一个内存溢出的测试类
3、配置参数详解
- -Dfile.encoding=UTF-8
- -Xms20m -Xmx20m 设置堆大小20m,将最小和最大值设置相等,避免扩展
- -XX:+HeapDumpOnOutOfMemoryError dump出当前的内存堆转储快照
- -XX:HeapDumpPath=E:\job 指定路径(转储文件还是挺大的)
- -XX:SurvivorRatio=8 存活比2:8
4、配置程序jvm参数,右键选择【Run As】----->【Run Configurations…】,在VM arguments中设置dump出当前的内存堆转储快照,并设置堆大小为20兆,超过20兆报内存溢出错误。5、右键运行程序,会很快报堆内存溢出。
6、在该项目的路径下会生成hprof格式的快照文件。该格式文件用notepad++打开是乱码,需要借助Eclipse Memory内存分析工具打开。
三、Eclipse Memory内存分析工具下载与安装
1、下载步骤如下:
(1)lz已下载好win64位版本的百度云链接如下:
https://pan.baidu.com/s/1gk0oYM1oQqj_xNPwHoATPw
提取码:0osr
(2)、官网下载如下:
点击此链接进入Eclipse Memory官网页面
2、安装步骤如下:
四、Eclipse Memory内存分析工具的使用
1、点击【File】---->【Open Heap Dump…】。如下图:2、选择步骤一中生成的.hprof格式的快照文件。点击【打开】
3、点击【Finish】
4、出现如下图即可:
5、内存出分析原因如下图: