Java[虚拟机]-Java内存区域学习总结
学习博客:
java虚拟机内存区域的划分以及作用详解:https://www.cnblogs.com/whgk/p/6138522.html
JVM的内存区域划分 : https://www.cnblogs.com/dolphin0520/p/3613043.html
一.Java虚拟机允许主要流程:
Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。
二.Jvm运行时数据区概要:
虚拟机栈即Java栈
三. 虚拟机栈结构概要:
- 运行程序,CarTest.java由编译器编译就会变为CarTest.class,将CarTest.class加入方法区,检查字节码是否有常量,若有(DEFAULT_COLOR)加入运行时常量池;
- 遇到main方法,创建一个栈帧,入虚拟机栈,然后开始运行main方法中的程序
- Car c1 = new Car(); 第一次遇到Car这个类,所以将Car.java编译为Car.class文件,然后加入方法区,跟第一步一样。然后new Car()。就在堆中创建一块区域,用于存放创建出来的实例对象,地址为0X0010.其中有两个属性值 color和num。默认值是null 和 00
- 然后通过c1这个引用变量去设置color和num的值,
- 调用run方法,然后会创建一个栈帧,用来装run方法中的局部变量的,入虚拟机栈,run方法结束之后,该栈帧出虚拟机栈。又只剩下main方法这个栈帧了
- 接着又创建了一个Car对象,所以又在堆中开辟了一块内存,之后就是跟之前的步骤一样了。