JAVA类加载机制

java源码编译机制   

class文件通常由类加载器(ClassLoader)来完成加载;class的执行在Sun JDK中有解释执行和编译为机器码执行两种方式,其中编译为机器码又分为两种方式(client和server两种模式)。Sun JDK为了提升class的执行效率,对于解释执行和编译为机器码执行都设置了很多优化策略

    javac编译源码为class文件的步骤

1、分析和输入到符号表

2、注解处理

3、语义分析和生成class文件

生成class文件的步骤

首先将实例成员和初始化器收集到构造器中,将静态成员初始化器收集为<clinit>();接着将语法抽象树生成字节码,采用的方法为后续遍历语法树,并进行最后的少量代码转换,(如String相加变成StringBuffer操作),最后从符号表生成class文件。

 

一个class文件包含以下信息,(结构信息、元数据、方法信息)

类加载机制

JVM将类加载分为3个步骤:装载、链接、和初始化

不同的类分别采用不同的ClassLoader或者ClassLoader的子类进行加载

类执行机制

 

字节码解释执行机制

JVM采用了invokestatic,invokevirtual,invokeinterface和invokespecial四个指令来执行不同的方法调用。invokestatic对应调用static方法,invokevirtual对应调用对象的实例方法,invokeinterface对应调用接口方法,invokespecial对应调用private方法和编译后生成的<init>方法,此方法为对象实例化时初始化方法

 

基于栈的体系结构执行字节码,好处为代码紧凑,体积小。执行过程中产生程序计数器PC和栈,PC存放下一指令的在方法内的偏移量,栈中存放栈帧,栈帧分为局部变量区和操作数变量区(执行解释执行、栈顶缓存、部分栈帧共享)

编译执行

C1 方法内联、去虚拟化、冗余消除

C2 标量替换、栈上分配、同步消除

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值