File tree Expand file tree Collapse file tree
src/main/java/com/crossoverjie/oom/heap Expand file tree Collapse file tree Original file line number Diff line number Diff line change 33## Java 堆内存溢出
44
55在 Java 堆中只要不断的创建对象,并且 ` GC-Roots ` 到对象之间存在引用链这样 ` JVM ` 就会不会回收对象。只要将` -Xms(最下堆) ` ,` -Xmx(最大堆) ` 设置为一样禁止自动扩展堆内存。
6- 当使用一个 ` while(true) ` 循环来不断创建对象就会发生 ` OutOfMemory ` ,还可以使用 ` -XX:+HeapDumpOutofMemoryErorr ` 当发生 OOM 时会自动 dump 堆栈 。
6+ 当使用一个 ` while(true) ` 循环来不断创建对象就会发生 ` OutOfMemory ` ,还可以使用 ` -XX:+HeapDumpOutofMemoryErorr ` 当发生 OOM 时会自动 dump 堆栈到文件中 。
77
88伪代码:
99
1818
1919当出现 OOM 时可以通过工具来分析 ` GC-Roots ` [ 引用链] ( https://github.com/crossoverJie/Java-Interview/blob/master/MD/GarbageCollection.md#%E5%8F%AF%E8%BE%BE%E6%80%A7%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95 ) ,查看对象和 ` GC-Roots ` 是如何进行关联的,是否存在对象的生命周期过长,或者是这些对象确实改存在的,那就要考虑将堆内存调大了。
2020
21+ ```
22+ Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
23+ at java.util.Arrays.copyOf(Arrays.java:3210)
24+ at java.util.Arrays.copyOf(Arrays.java:3181)
25+ at java.util.ArrayList.grow(ArrayList.java:261)
26+ at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
27+ at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
28+ at java.util.ArrayList.add(ArrayList.java:458)
29+ at com.crossoverjie.oom.HeapOOM.main(HeapOOM.java:18)
30+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
31+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
32+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
33+ at java.lang.reflect.Method.invoke(Method.java:498)
34+ at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
35+
36+ Process finished with exit code 1
37+
38+ ```
39+ ` java.lang.OutOfMemoryError: Java heap space ` 表示堆内存溢出。
40+
41+
42+ ## 方法区/运行时常量池溢出
2143
22- ## 方法区/运行时常量池溢出
Original file line number Diff line number Diff line change 1- package com .crossoverjie .oom ;
1+ package com .crossoverjie .oom . heap ;
22
33import java .util .ArrayList ;
44import java .util .List ;
You can’t perform that action at this time.
0 commit comments