Java代码的运行过程

Java代码的运行过程

首先,编写一个.java源码文件,通过javac编译器对源码文件进行编译得到.class字节码文件。这个过程叫做编译期(Compile)。
后,再由我们的本地加载器或者是扩展加载器或启动加载器加载,通过双亲委托加载机制[1], 加载我们的.class字节码文件到jvm内存对字节码进行验证[2],验证不通过则报错,验证通过则对.class文件进行一字一句的解释执行。这个过程叫做运行期(Runtime)。
[1]Java常见的加载模型
Java中的ClassLoader有很多不同的类型:

  • BootStrapClassLoader,引导类加载器/启动类加载器
    最高级别加载器,负责加载%JAVA_HOME%\jre\lib目录中的资源。

  • ExtClassLoader,扩展类加载器
    负责加载%JAVA_HOME%\jre\lib\ext目录中的资源。

  • AppClassLoader,本地类加载器/应用类加载器
    负责加载%CLASSPATH%以及-cp/-classpath参数所指定的位置下的资源。
    “双亲”指的是这三种加载器之间存在一定的关联关系,可以理解为“祖孙三代”。BootStrapClassLoader是ExtClassLoader的父加载ExtClassLoader是AppClassLoader的父加载器。

在程序中需要使用到某个Java类之前,必须让其先被加载。而加载的整个过程分为两个大的阶段:向上委托 向下加载首先,每个加载器都有自己的一个缓存区。每个加载器加完一个类之后,都会把它保存到自己的缓存区中。如果该加载器下次又收到了通知加载相同的一个类,那么就无需执行任何额外操作,直接将缓存区中加载过的类取出返回即可使用。

[2]字节码验证
1.检查当前class文件的版本和JVM的版本是否兼容
2.检查当前代码是会破坏系统的完整性
3.检查当前代码是否有栈溢出的情况
4.检查当前代码中的参数类型是否正确
5.检查当前代码中的类型转换操作是否正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值