一、JVM内存区域规范
1.1 各区域作用
Java方法栈:以栈的形式存放栈帧,每一个Java方法调用的开始和结束,都伴随着栈帧的入栈和出栈;
本地方法栈:与Java方法栈类似,对应native方法;
堆:存放对象实例信息;
方法区:主要存放类相关信息;
程序计数器:记录当前线程代码执行的位置,线程上下文切换时用到;
注:堆、方法区是线程共享的区域
1.2 HotSpot各代对象
Eden/S1/S2:复制算法应用,存放年轻代对象
Old:标记-清除/标记-整理算法应用,存放老年代对象以及做担保分配
二、new关键字生成对象的简化过程
1.由类加载器将类的二进制字节流加载至内存,并转化为相应的数据结构,存放在方法区
2.执行<clinit>()方法进行类初始化
注:1、2步前会先进行类加载检查,如果之前已经加载过了则不再加载
3.堆内给对象实例分配内存
4.执行<init>()方法进行实例初始化