JVM|JVM - 实战 - OutOfMemoryError(Java heap space)
1. 测试代码
public class Person {private String name;
/**
* @return String return the name
*/
public String getName() {
return name;
}/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}}public class OutOfMemoryTest {public static void main(String[] args) {
List personList = new ArrayList<>();
while (true) {
personList.add(new Person());
}
}}
2. 运行OutOfMemoryTest
java -XX:+HeapDumpOnOutOfMemoryError -Xms20m -Xmx20m org.glasshouse.seed.javase.jvm.oom.OutOfMemoryTest
【JVM|JVM - 实战 - OutOfMemoryError(Java heap space)】运行结果:
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid38032.hprof ...
Heap dump file created [34587052 bytes in 0.253 secs]
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:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
at org.glasshouse.seed.javase.jvm.oom.OutOfMemoryTest.main(OutOfMemoryTest.java:11)
3. 结果分析 使用Eclipse Memory Analyzer工具打开java_pid38032.hprof文件。
文章图片
内存占用分析.png Shallow Heap Size 指对象自身所占用的内存大小,不包含其引用的对象所占的内存大小。
a、数组类型
数组元素对象所占内存的大小总和。b、非数组类型
对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。Retained Heap Size 当前对象大小+当前对象可直接或间接引用到的对象的大小总和。
(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。
推荐阅读
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- jvm关于String
- 2020-07-29《吴军·阅读与写作50讲》24实战才能转化效能
- jvm常见分析工具
- Python实战计划学习笔记(9)为大规模爬取准备
- 韵达基于云原生的业务中台建设 | 实战派
- 【V课会】第3季-30天小学思维导图实战营
- 08_JVM学习笔记_类命名空间解析
- 【思维导图实战派】刻意练习计划“遇见……”|【思维导图实战派】刻意练习计划“遇见……” 1/300 人教版数学五下第三单元《正方体和长方体的认识》