三、java编译器[通俗易懂]

三、java编译器[通俗易懂]java编译器、解析器(bytecodeintepreter)、JIT(justintimecompiler)

大家好,又见面了,我是你们的朋友全栈君。

java编译器分为2种

  • 解析器 (bytecode intepreter)
  • JIT (just in time compiler)

解释执行:解释执行是采用匹配执行解释器(解释器是个黑盒,通常也有编译器的组成部分)内部已经编译好的机器码,不是生成新的机器码(也有说法是逐条翻译成机器码?)。 – 由于逐条翻译,程序启动快,但是执行效率不高。

编译执行:运行期间,通过将字节码编译成对应的新的机器码(会将其缓存起来,通过参数-XX:ReservedCodeCacheSize),然后执行。 – 需要先编译出新的机器指令,所以程序启动较慢,但是执行效率高(因为执行的是机器指令)。 

混合模式

       现在主流的商用虚拟机(HotSpot(Oracle)、J9 VM(IBM))中几乎都同时包含“解释器和编译器。
        二者在其中各有优势:当程序需要迅速启动和执行时,解释器可以首先发挥作用,省去编译的时间,立即执行;当程序运行后,随着时间的推移,编译器逐渐会返回作用,把越来越多的代码编译成本地代码后,可以获取更高的执行效率。解释执行可以节约内存,而编译执行可以提升效率。

       在 Java7 之前,需要根据程序的特性来选择对应的 JIT,虚拟机默认采用解释器和其中一个编译器配合工作。

         HotSpot 虚拟机会根据自身版本与计算机的硬件性能自动选择运行模式,用户也可以使用 -client 和 -server 参数强制指定虚拟机运行在 Client 模式或者 Server 模式。这种配合使用的方式称为**“混合模式”(Mixed Mode)**,用户可以使用参数 -Xint 强制虚拟机运行于 “解释模式”(Interpreted Mode),这时候编译器完全不介入工作。另外,使用 -Xcomp 强制虚拟机运行于 “编译模式”(Compiled Mode),这时候将优先采用编译方式执行,但是解释器仍然要在编译无法进行的情况下接入执行过程。通过虚拟机 -version 命令可以查看当前默认的运行模式。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158667.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号