欢迎来到 牡丹江市某某广告业务部
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
JAVA编译器和解释器的协调工作流程
  来源:牡丹江市某某广告业务部  更新时间:2024-05-05 14:51:24

JAVA编译器和解释器的协调工作流程

在部分商用虚拟机中(如HotSpot) ,编译Java程序最初是器和器通过解释器(Interpreter)进行解释执行的 ,当虚拟机发现某个方法或代码块的解释运行特别频繁时 ,就会把这些代码认定为“热点代码”。协调为了提高热点代码的工作执行效率 ,在运行时 ,流程虚拟机将会把这些代码编译成与本地平台相关的编译机器码 ,并进行各种层次的器和器优化,完成这个任务的解释编译器称为即时编译器(Just In Time Compiler ,下文统称JIT编译器) 。协调

具体执行流程如下图所示 :

JAVA编译器和解释器的协调工作流程

程序中的代码只有是热点代码时  ,才会编译为本地代码 ,流程那么什么是编译热点代码呢?

运行过程中会被即时编译器编译的“热点代码”有两类:

1、被多次调用的器和器方法 。

2 、解释被多次执行的循环体 。

判断是否是热点代码,不是则逐行解释每条代码,翻译成机器码执行 ,否则一次性编译成机器码存到方法区 ,以后每次直接运行机器码。默认一段代码(方法 、或循环体)被调用10000次以上被认为是热点代码 。

说JIT比解释快 ,其实说的是“执行编译后的代码”比“解释器解释执行”要快 ,并不是说“编译”这个动作比“解释”这个动作快。JIT编译再怎么快,至少也比解释执行一次略慢一些,而要得到最后的执行结果还得再经过一个“执行编译后的代码”的过程 。所以 ,对“只执行一次”的代码而言,解释执行其实总是比JIT编译执行要快。

怎么算是“只执行一次的代码”呢 ?粗略说 ,下面两个条件同时满足时就是严格的“只执行一次”

1、只被调用一次 ,例如类的构造器(class initializer())

2、没有循环

对只执行一次的代码做JIT编译再执行,可以说是得不偿失。对只执行少量次数的代码,JIT编译带来的执行速度的提升也未必能抵消掉最初编译带来的开销。只有对频繁执行的代码 ,JIT编译才能保证有正面的收益。

对一般的Java方法而言 ,编译后代码的大小相对于字节码的大小,膨胀比达到10x是很正常的 。同上面说的时间开销一样 ,这里的空间开销也是 ,只有对执行频繁的代码才值得编译,如果把所有代码都编译则会显著增加代码所占空间 ,导致“代码爆炸”。

这也就解释了为什么有些JVM会选择不总是做JIT编译,而是选择用解释器+JIT编译器的混合执行引擎。

为何要实现两个不同的即时编译器

HotSpot虚拟机中内置了两个即时编译器:Client Complier和Server Complier,简称为C1、C2编译器 ,分别用在客户端和服务端。

目前主流的HotSpot虚拟机中默认是采用解释器与其中一个编译器直接配合的方式工作。程序使用哪个编译器,取决于虚拟机运行的模式 。HotSpot虚拟机会根据自身版本与宿主机器的硬件性能自动选择运行模式 ,用户也可以使用“-client”或“-server”参数去强制指定虚拟机运行在Client模式或Server模式。

用Client Complier获取更高的编译速度 ,用Server Complier 来获取更好的编译质量(例如 JIT优化) 。为什么提供多个即时编译器与为什么提供多个垃圾收集器类似,都是为了适应不同的应用场景 。

编译质量的意思就是在编译过程中会进行优化 ,Client Complier优化的少 ,Server Complier优化的多 ,优化多则启动慢

Server Compiler和Client Compiler两个编译器的编译过程是不一样的 。

对Client Compiler来说,它是一个简单快速的编译器 ,主要关注点在于局部优化,而放弃许多耗时较长的全局优化手段。

而Server Compiler则是专门面向服务器端的,并为服务端的性能配置特别调整过的编译器 ,是一个充分优化过的高级编译器  。


友情链接3A网游大作!【命运2】萌新入坑!枪械保姆级教程近年来流行“倒立养生”,倒立练习人人都适合做吗 蚂蚁庄园答案节奏大师离线歌曲包的安装攻略赛尔号茉蕊儿解析刺客25s打桩打法思路 希洛克刺客装备如何推荐三国杀貂蝉离间可以无懈可击吗英雄联盟的狼人出装是什么,lol狼人上路出什么装备三国英杰传徐州之战攻略,fc三国英杰传赤兔马哪里适合一个人的游戏排行榜前十名2022 好玩的单人游戏推荐(适合一个人玩的网游)阴阳师八岐大蛇什么时候出 上线时间确定英雄联盟无限火力璐璐怎么出装-lol无限火力璐璐快乐玩法推荐战地防御2完整版寻仙手游茅山的探索任务在哪里,寻仙的茅山怎么走啊地下城游戏dnf风云崛起任务在哪怎么接那个影响了我的人中考满分作文泰拉瑞亚复仇者徽章怎么得 复仇者徽章获得方式《最终幻想:维度》主线剧情 - 流程攻略查漏补缺2荒海的“海底世界”攻略dnf净化的灵魂结晶怎么得?快速收集方法典韦希望增加自身对敌方后排的输出能力,应该购买哪件装备?夫子的进阶试炼答案逐鹿中原传奇,网通传奇,变态传奇,传奇发布站,jjj.com光遇手游冥想攻略 各地图可冥想的位置在哪如何评价获得第 89 届最佳外语片的伊朗电影《推销员》(The Salesman)?玩家种树触发隐藏彩蛋,秒拿千万奖励仙剑奇侠传3游戏dnf未精炼的念气结晶是干什么用的?《王者荣耀》日之塔怎么快速过关 日之塔副本速刷攻略详解DNF时装分解指南**幻塔全区域蜂蜜分布大全羊了个羊第一关怎么过?羊了个羊第一关攻略刺客25s打桩打法思路 希洛克刺客装备如何推荐DNF战斗法师怎么加点技能(地下城游戏战斗法师打法)绝地求生刺激战场时装怎么分解?时装分解攻略造梦西游3卷帘绿魔能合成法宝吗玄奘的身世我的世界蘑菇岛种子代码大全TBC2.43法师毒蛇、风暴、海山、神殿职业攻略新仙剑奇侠传之挥剑问情礼包码大全(13个最新激活码)英雄联盟手游新活动狩猎大师开启,选择你的阵营并取得胜利吧远古战场冥想在哪
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.1575

Copyright © 2024 Powered by 牡丹江市某某广告业务部   sitemap