欢迎来到 昆明市某某投资咨询售后客服中心
全国咨询热线:020-123456789
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
JAVA编译器和解释器的协调工作流程
  来源:昆明市某某投资咨询售后客服中心  更新时间:2024-04-30 02:12:08

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则是专门面向服务器端的,并为服务端的性能配置特别调整过的编译器,是一个充分优化过的高级编译器。


友情链接dnf主线剧情是什么 dnf主线剧情故事介绍CSGO全系列手套详解!!!(特别篇--狂牙大行动)地下城与勇士|DNF活动指南:海量提升助你备战军团,高燃成长周玩法手册因为暗改活动帽子造型,《光遇》制作人陈星汉被批跪舔韩国羊了个羊今日攻略5.3光遇雨林神庙冥想在哪里1.4网络用语ap是什么意思?ap是什么的缩写?王者荣耀暃怎么读 王者荣耀暃读法介绍这个七夕节至尊宝皮肤会不会返场(七夕至尊宝会返场吗)【LOL影流之主出装】劫出装S5天赋加点迷你世界种子大全 所有种子村庄代码合集魔兽世界时之沙怎么获得?魔兽世界时之沙有什么用?dnf封印的魔罐能开出什么《金铲铲之战》7仙女迦娜阵容搭配攻略【全区维护公告】08月02日10点—12点《黑暗之魂3》人物剧情身世及关系解析dnf角色恢复装备时装还在吗2012年10月自考00886学前儿童心理卫生与辅导真题试卷十大安卓破解单机游戏 单机游戏安卓版破解合集魔兽世界恶魔之击触发几率是多少-恶魔之击触发概率及获取方法缪斯附魔推荐《阴阳师》现世召唤阵有哪些?现世召唤阵大全僵尸危机3通关攻略 僵尸危机3高手通关心得一览哎呀~主办方的活动已经结束啦,为您推荐更多活动DNF:这些附魔卡居然不好用,因为这样!十大必玩手柄手机游戏排行2023 经典手柄类的游戏有哪些5.0熊猫人之谜野外稀有精英与掉落道具魔兽世界保卫萝卜2第17关怎么过DNF接收频道信息失败的解决方法有哪些?和平精英飞鹰榜金绿猫眼宝石的寓意是什么,金绿猫眼石的佩戴禁忌?5.4黄金挑战:治疗牧师可用PVE装备一览lol: 寒冰最值得收藏的皮肤是源计划? 不, 图4才是老寒冰的心头肉LOL13.5豹女玩法攻略LOL转区系统7月开启,转区不冻结原大区,转区价格引发热议魔兽世界附魔专业快速冲级攻略(wowtbc附魔怎么冲级)保卫萝卜2-第12关攻略 雪地场景图文攻略二代火影的实力仅次于柱间,为什么打不过金角银角魔兽世界恶魔之击触发几率是多少-恶魔之击触发概率及获取方法Gacha中文昵称叫什么(Gacha的中文是不是加查)
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.1903

Copyright © 2024 Powered by 昆明市某某投资咨询售后客服中心   sitemap