java代码从编译到加载执行的过程

本文介绍了Java代码从编译到执行的过程,涉及类加载的双亲委派模型,包括启动类加载器、扩展类加载器和应用类加载器的责任。类加载分为加载、验证、准备、解析和初始化五个步骤。JIT即时编译用于提高执行速度,通过热点代码探测选择频繁执行的方法进行编译优化。
摘要由CSDN通过智能技术生成

代码编译

在刚接触java时,我们都知道通过javac命令将java源码文件编译成.class字节码文件,这是由编译器来完成的。
包括泛型擦除属于编译时期的语法糖。

.class字节码文件是跨平台的,也就是不管什么平台的JVM,都可以加载执行。使用javap -c X.class 可以将字节码文件转为可读性较好的格式

类什么时候加载

JVM并不是把所有的字节码文件一下子全加载进内存,Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。

虚拟机规范则是严格规定了有且只有5种情况必须立即对类进行“初始化”(class文件加载到JVM中):

  • 创建类的实例(new 的方式)。访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法
  • 反射的方式
  • 初始化某个类的子类,则其父类也会被初始化
  • Java虚拟机启动时被标明为启动类的类,直接使用java.exe命令来运行某个主类(包含main方法的那个类)
  • 当使用JDK1.7的动态语言支持时(…)

如何将类加载进JVM

class文件是通过类的加载器装载到jvm中的!
Java默认有三种类加载器:
在这里插入图片描述
各个加载器的工作责任:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值