「咔咔侃技术」是如何在虚拟机运行的?,你写的代码
我们都知道要运行Java代码就必须要有JRE , 也就是Java运行时环境 , JRE中包含了Java程序的必需组件 , 包括Java虚拟机以及Java核心类库 , 然而运行C++代码则不需要额外的运行时环境 , 只需要把代码编译成CPU能识别的指令即可 , 也就是机器码.那为什么Java不直接像C++那样而需要在虚拟机中运行呢?他在虚拟机中又是如何运行的?接着往下看.Java为什么要在虚拟机中运行
刚才我们谈到C++是直接把代码编译成机器码的 , 但因为各个平台的架构不一样 , CPU能处理的指令集也不一样 , 所以如果要在另一个平台上运行C++代码 , 就必须用该平台对应的C++代码编译器重新编译一遍才可以.Java一开始就意识到需要跨平台运行 , 所以Java设计了虚拟机 , 先将Java代码编译成字节码(class文件) , 这是虚拟机能够识别的指令 , 再由虚拟机内部将字节码翻译成机器码 , 所以我们只需要有Java字节码 , 就可以在不同平台的虚拟机中运行 , 这也就是我们一直说的"一次编译 , 到处运行".Java虚拟机如何运行Java字节码
我们JDK所用的虚拟机名为HotSpot虚拟机 , 他会将所有class文件加载进来 , 加载后的Java类会被放置在方法区 , 后面运行时会执行其中的代码.Java虚拟机会在内存中划分出几块 , 包括程序计数器 , 本地方法栈 , Java虚拟机栈 , 堆以及方法区.
不过光是Java字节码还是无法运行 , Java虚拟机还需要将字节码翻译成机器码 , HotSpot有2种形式:第一种是解释执行 , 即将字节码逐条翻译成机器码并运行;第二种是即时编译(JIT) , 他会将一个方法内的所有字节码编译成机器码再执行.
文章图片
前者的优势无需等待编译 , 但逐条解释的代价就是运行速度会比后者慢 , HotSpot默认采用混合模式 , 它会先解释执行字节码 , 然后对于反复执行的热点代码会去进行即时编译.
即时编译是监理在复合二八定律的基础上 , 即百分之20的代码占据百分之80的计算资源.对于不常用的代码我们无需消耗时间在编译成机器码上 , 采用解释执行就可以 , 而对于热点代码我们可以将其编译成机器码以提升运行速度.
【「咔咔侃技术」是如何在虚拟机运行的?,你写的代码】HotSpot内置了几个即时编译器:ClientComplier和ServerComplier , 简称为C1、C2编译器 , 以便在编译时间和生成代码的执行效率之间做取舍 , C1编译时间更快 , C2编译质量更高.
推荐阅读
- 二台格物设计的与时俱进
- ZAKERCTP、刀片、无钴……动力电池新技术的幕后黑手是谁?
- 李先生看点技术人员都要抱着电脑睡,在珠峰海拔6500米5G基站难度非常大
- 华为■美国无奈宣告“妥协”,将采用华为5G技术,任正非果然没有说错
- 数码狂人“云演唱会”会成为音乐产业新常态吗,5G+4K+VR+多视角技术融合
- IT168“共享智能”技术,AI华人科学家张本宇解密蚂蚁
- LX杂谈荣耀X10内部结构图曝光:Mate系列大面积石墨烯散热技术下放!
- 天津经济技术开发区“海陆空”五大集群助力泰达跻身“国字头”数字服务出口基地
- 科学技术宅试用荣耀新机之后,发现大挖孔设计方向错了!,小米高管表示
- 德国WellcometLDM& TRIPLE LDM 获专利的技术-干涉波长,NOBLESSE