JAVA类生命周期

java编译器讲java源代码编译成.class的字节码文件.然后jvm再将字节码转化为机器码交给机器执行.java字节码文件是实现跨平台的基础.他与平台无关

JVM的具体执行流程是 装载-验证-准备-解析-初始化-对象实例化-垃圾回收-对象终结-卸载类型

一.装载:将.class的二进制文件通过类加载器转入JVM的方法区

二.验证:由java编译器生成的java类的二进制数据肯定是正确的,为什么还要进行类的验证,因为java虚拟机并不知道某个特定的.class文件到底是如何被创建的,这个.class文件有可能是由正常的java编译器生成的,也可能是由黑客特制的,黑客视图通过它来破坏jvm环境。类的验证能提高程序的健壮性,确保程序被安全的执行。

类验证的内容:

1 类文件的结构检查,确保类文件遵从java类文件的固定格式。

2 语义检查确保本身符号java语言的语法规定,如验证final类型的类没有子类等

3 字节码验证:确保字节码可以被jvm安全的执行,字节码代表java方法(包括静态和实例方法),它是由被称做操作码的单字节指令组成的序列,每一个操作码后都跟着一个或多个操作数。字节码验证步骤会检查每个操作码是否合法,即是否有合法的操作数。

4 二进制兼容的验证,确保相互引用的之间协调一致,如Worker类的goWork方法会调用Car类的run方法,jvm在验证Worker类时,会检查方法区内是否存在car类的run方法,如不存在会(Worker 类和car类版本不兼容就会出现问题),就会抛出NoSuchMethodError错误。

(注:Error类就是在验证阶段由JVM抛出的)


三.准备:JVM为类变量分配内存

四.解析:将类,接口,字段和方法等的符号引用替换成直接引用(如Test.method()这个.方法就是符号引用.JVM会生成一个直接指向method()方法的引用)

五.初始化:为类变量赋初始值

六.垃圾回收:释放方法区.栈区.堆区的内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值