[JVM]解释器和JIT(just in time complier)即时编译器

JVM执行class字节码的过程

当JVM加载.class文件中的字节码到jvm后是如何进行执行的呢

那就是解释器和即时编译器的工作了

javac的字节码最终是要以本地机器码的形式来执行的

有解释器和即时编译器两种方式来对字节码来处理

解释器根据.class文件的字节码逐条执行(一次一次转换为单条机器码?)基于栈的架构,而不是传统的寄存器架构

为了实现平台无关性(不同操作系统的寄存器架构不同),和便于传输(每条指令对齐),但是牺牲了一部分执行效率(频繁的对栈操作)

而即时编译器将字节码再次编译为本地机器码,存于内存之中,用内存空间换取执行效率

所以即时编译又称为后端编译器,javac称为前端编译器

 

java与C++在运行和编译上的区别

  • 从编译的角度来讲,C++是典型的静态编译器,在编译阶段直接产生机器码,而java为即时编译器,一部分编译的工作(动态分派,边运行边类加载)等交给了JVM来完成。所以即时编译器占用了一部分用户程序运行的时间
  • java在执行时为了确保安全性,因此要频繁进行动态类型的检查
  • java的垃圾回收机制,降低了执行效率换取了开发效率
  • java不能在栈上分配对象(栈上只存引用不存对象)

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值