JVM内存分配和程序运行过程
- 下面是一段java程序代码:
package base.JVM;
import java.util.ArrayList;
import java.util.List;
public class OomTest {
public static void main(String[] args) {
// 在虚拟机运行过程及数据内存分配
OomTest oomTest=new OomTest();
oomTest.A();
// oom,栈溢出异常测试
List<OomTest> list=new ArrayList<>();
while (true){
list.add(new OomTest());
}
/*
发送内存溢出原因是:不断创建的对象,一直存入堆中,他们一直有list的根引用,
所以不会被标记成垃圾回收,在不断的存入,则会导致内存溢出
*/
}
public void A(){
int a=1,b=2;
int c=(a+b)*10;
System.out.println(c);
}
}
-
该程序对应的JVM运行的流程图
首先从java文件加载成class文件开始
-
其中发生OOM内存溢出的异常,上面程序也给演示,结合原理图和描述即可得知OOM异常的出现原因