JVM中的基本分配以及java运行过程、加载顺序和运行原理

1.下面是JVM中的几个区域
这里写图片描述
(1)堆,存放所有的对象实例和数组,是JVM开辟空间最大的,可以理解为只要是new了,他就是在堆里面的
(2)程序计数器,字节码的行号解释器,程序里面有线程,每个线程有编号,编号用这个计数器记录。就是一个记录线程编号的
(3)栈(方法栈,后进先出)每一个方法在执行的时候都会创建一个栈(stack frame),存储的是局部变量、动态链接、方法的出口、一个方法从创建到执行完毕,都是jvm从出栈到入栈的过程
(4)本地方法栈,在本地进行交互的一些方法
(5)方法区,类信息、静态变量、常量、编译后的代码。class文件。


2 java运行原理
<1>先进行编译,编译成.class文件,.class文件里面会包含很多信息。
<2> 加载
把.class文件读取到内存中变成一个对象
<3> 连接
1) 准备、验证、解析
2) 对内部进行一些核查,分配空间


3.java运行过程
(Java源程序 → java编译器 (编译) → 虚拟机(解释执行) → 解释器(翻译) → 机器码)


4.详细说一下加载过程的顺序(调试代码以及优化代码会用)
<1>初始化构造时,先父后子;只有在父类所有都构造完后子类才被初始化
<2>类加载先是静态、后非静态、最后是构造函数,静态的加载字节码只执行一次,new多少次,非静态会在new多少次就执行多少次
<3>所以他们的执行顺序如下:
父类静态变量,父类静态代码块,子类静态变量,子类静态代码块,父类非静态变量,父类非静态代码块,父类构造函数,子类非静态变量,子类非静态代码块,子类构造函数。

猜你喜欢

转载自blog.csdn.net/qq_41166135/article/details/81623557