[Java]JVM运行机制和JVM类加载机制

JVM的运行机制

JVM是用于运行Java字节码的虚拟机,Java源文件再通过编译器之后被编译成相应的.class文件,.class文件又被JVM中的编译器编译成机器码在不同的操作系统上运行。每种操作系统的解释器都是不一样的,但基于解释器的虚拟机是相同的,这也是Java能够跨平台的主要原因。
Java程序的具体运行过程如下:
1.Java源文件被编译器编译成字节码文件。
2.JVM把字节码文件编译成相应操作系统的机器码。
3.机器码调用相应操作系统的本地方方法库执行相应的方法。

JVM的类加载机制

在这里插入图片描述
1.加载:指JVM读取class文件,并且根据class文件描述创建java.lang.Class对象的过程。类加载过程主要包含把Class文件读取到运行时数据区的方法区内,在堆中创建 java.lang.Class对象(作为方法区这个类的各种数据的访问入口),并封装类在方法去的数据结构的过程(将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构)。(方法区就是用来存放已被加载的类信息,常量,静态变量,编译后的代码的运行时内存区域)
2.验证:主要用于确保Class文件符合当前虚拟机的要求,保障虚拟机自身的安全,只有通过验证的Class文件才能被JVM加载。
3.准备:主要工作实在方法区中为类变量分配内存空间并设置类变量的初始值。初始值指的是不同数据类型的默认值,这里最需要注意的就是final类型和static类型的变量在初始化的时候过程是不一样的,比如static类型的变量在初始化的时候默认值是0,只有在对象初始化的时候才会把你真正要赋予的值给它。而final类型的变量,虚拟机会在准备阶段直接把要赋予的值给它。
4.解析:JVM会把常量池中的符号引用替换为直接引用。
5.初始化:主要通过执行类的构造器 client 方法为类进行初始化,client 方法实在编译阶段由编译器 自动收集类中的静态代码块和变量的赋值操作组成的。JVM规定,只有在父类的 client 方法都执行成功,子类的client 方法才会允许被执行。在一个类中既没有静态变量赋值的操作也没有静态语句块时,编译器不会为该类生成client 方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值