欢迎来到 曲靖市某某高温材料服务中心
全国咨询热线:020-123456789
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
JAVA编译器和解释器的协调工作流程
  来源:曲靖市某某高温材料服务中心  更新时间:2024-04-28 01:13:46

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


友情链接战地霸主安卓游戏介绍:在搜狗输入法中设置繁体字的具体方法英雄联盟电竞经理兑换码大全 兑换码使用方法霍迪尔之子声望任务流程图,wlk霍迪尔之子声望如何开启奥拉星手游玄武技能详解 玄武强不强英雄联盟2022劫天赋怎么点-2022劫天赋加点推荐英雄联盟烈焰雄心是黄金奖池皮肤还是钻石奖池的2月1日凌晨5点版本停机更新公告红警2攻略秘籍技巧遭遇战(红色警戒遭遇战关卡打法战术)掌控命运,谱写属于自己的游戏传奇!地下城代币券使用建议仙剑奇侠传5语音包,《仙剑5》新增语音包,享受全新剧情!《魔兽世界怀旧服》熔火恶魔布包图纸介绍 术士28格灵魂包图纸具体获取坐标史上最全破解安卓APK和反编译羊了个羊第三关通关攻略游戏杂谈地下城阿修罗技能加点2023(DNF阿修罗刷图教程)火影忍者下载王者荣耀马超神威什么时候返场 2023年还会返场吗英雄联盟手游峡谷拼图活动攻略大全斗战神手游灵猴灵兽[达成] 斗战神游戏65灵猴单刷详解王者荣耀s26赛季黄忠怎么出装 黄忠新版最强出装dnf觉醒任务在哪里接 dnf觉醒任务怎么做dnf阿修罗空血流和攻速流哪个强伊苏6纳比斯汀的方舟台服版1.4.4 中文最新版英雄联盟经济什么意思,WE众经济什么意思暗黑3拍卖行是啥?——一个女游戏商人的赚钱史王者荣耀:四周年皮肤投票返场开启,凤求凰至尊宝没在返场名单?最新在线修正:转服可携带100万金币红警2共和国之辉秘籍(实战攻略干货大全)《魔兽世界怀旧服》猎人宝宝如何学技能 猎人宝宝学习技能攻略王者荣耀镜的欢迎会禁慢天堂(王者荣耀镜欢迎会全部)dnf男散打100级所有技能,dnf100版本男散打技能加点《鬼泣5》存档保存在什么地方 steam存档保存路径及文档位置介绍美核物理学家狱中自杀!罹患精神病,给女儿留下“神秘”纸条激活码发放正式开启!性别成迷的最强辅助 王者荣耀孙膑实战技巧英雄联盟手游琴女娑娜怎么出装 娑娜最强出装英雄联盟手游五杀截图在哪里看,英雄联盟如何查找自己的五杀截图 英雄联盟怎么查找自己的五杀截图王者荣耀孙悟空至尊宝什么时候抽宝箱返场?至尊宝第三次返场什么时候?英雄联盟手游上单卢锡安出装顺序 上单卢锡安出装分享
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.2769

Copyright © 2024 Powered by 曲靖市某某高温材料服务中心   sitemap