一个Java程序完整的生命周期

Java程序完整生命周期

Java的完整生命周期包括编写、编译、加载、链接、初始化、使用和卸载。

编写:创建一个Java源代码文件。

编译:使用javac编译器将源代码文件编译成字节码文件(.class)。

加载:使用JVM的类加载器加载字节码文件到方法区(JVM的heap区域)。

链接:连接过程由验证、准备和解析三个阶段组成。

      验证:确保class文件的字节流中包含的信息符合JVM的要求

      准备:为类变量分配内存并设置初始值

      解析:将符号引用转换为直接引用

初始化:为变量赋予正确的初始值。

      初始化阶段就是执行类构造器<clinit>()方法的过程。

      类构造器<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态代码块(static{}块)中的语句合并产生的。

使用:创建类的实例、调用类的方法。

卸载:JVM可以卸载类,也就是对象消亡时,类在方法区的信息也会被销毁。

下面主要介绍:字节码的验证

以下是总结的一张图表

加载到内存的途径有很多,可以通过本地磁盘也可以通过网络(上图是通过网络)加载。

注意:

一个class文件被加载到JVM内存之后,首先要经过字节码验证,验证内容主要包含:

  • 检查当前class文件的版本和JVM的版本是否兼容
  • 检查当前代码是否会破坏系统的完整性
  • 检查当前代码是否有栈溢出的情况
  • 检查当前代码中的参数类型是否正确
  • 检查当前代码中的类型转换操作是否正确

验证通过后,再确定哪些代码是解释执行的,那些代码是JIT即时编译执行的:

  • 解释执行

        class文件内容,需要交给JVM进行解释执行,简单理解就是JVM解释一行就执行一行代码。所以如果Java代码全是这样的运行方式的话,效率会稍低一些。

  • JIT(Just In Time)即时编译

        执行代码的另一种方式,JVM可以把Java中的热点代码直接编译成计算机可以运行的二进制指令,这样后续再调用这个热点代码的时候,就可以直接运行编译好的指令,大大提高运行效率。

剩余后续内容等待更新中……

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值