三、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 命令可以查看当前默认的运行模式。

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何做好数据安全治理「建议收藏」

    如何做好数据安全治理「建议收藏」  数据安全问题贯穿数据全生命周期的各个环节。在新形势下,要做好数据安全治理,就要做好企业的数据安全防护能力建设,建立起一个强保障且动态化的安全保护机制。这个机制的攻坚点主要是三个方面:完善数据安全治理规划,提高数据安全技术防护能力,和加强数据安全审计。  1.完善数据安全治理规划  (1)评估数据安全现状  一般来说,组织进行数据安全治理的目标主要是两个:一是实现组织的合规保障;二是实现数据的充分开发利用,在安全的基础上谋发展。组织在进行数据安全治理时,应在这两个大方向的指引下,对组织内部的数

    2022年5月18日
    39
  • 正弦,余弦,正切,余切,正割,余割_三角函数的正弦余弦是什么意思

    正弦,余弦,正切,余切,正割,余割_三角函数的正弦余弦是什么意思三角函数三角函数包括正弦、余弦、正切、余切、正割、余割函数0基础知识正弦(Sine):sinA=CB/CA余弦(Cosine):cosA=AB/CA正切(Tangent):tanA=CB/BA余切(Cotangent):cotA=1/(tanA)BA/CB正割(Secant):secA=1/(cosA)=CA/AB余割(Cosecant):cosecA=1/(sinA)=CA/CB1y=sinx2y=cosx

    2025年8月6日
    3
  • Idea激活码最新教程2023.2.6版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2023.2.6版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2023 2 6 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2023 2 6 成功激活

    2025年5月27日
    3
  • Hi3516DV300双目开发板开发环境搭建

    Hi3516DV300双目开发板开发环境搭建Hi3516DV300双目开发板开发环境搭建1、软件包安装参考:《Hi3516CV500╱Hi3516DV300SDK安装及升级使用说明》将sdk和交叉工具链文件在同一目录展开sdk包1.进入Hi3516CV500_SDK_V2.0.1.0目录下执行./sdk.unpack(请用root或sudo权限执行)2.解压tar–xzfarm-himix200-linux.tgz,进入arm-himix200-linux目录运行chmod+xarm-himix200-l

    2022年9月2日
    8
  • futureTask用法

    futureTask用法futureTask用法深入学习FutureTask主要讲解了如何去使用futureTask来创建多线程任务,并获取任务的结果。Callable接口:实现这个接口的类,可以在这个类中定义需要执行的方法和返回结果类型。MyTask.java类publicclassMyTaskimplementsCallable<Object>{p…

    2022年6月16日
    36
  • 激光SLAM定位_有用激光定位吗

    激光SLAM定位_有用激光定位吗激光SLAM定位:局部定位、全局定位等

    2022年8月23日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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