三、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)
上一篇 2022年7月13日 上午7:00
下一篇 2022年7月13日 上午7:16


相关推荐

  • 阿里云服务器开放所有端口_服务器防火墙怎么设置

    阿里云服务器开放所有端口_服务器防火墙怎么设置进入阿里云服务器,点击防火墙添加规则添加防火墙规则:TCP+端口号在浏览器上输入:IP:8080如果能访问到tomcat页面,即为开放成功。

    2022年10月2日
    2
  • TypeReference

    TypeReference1.基础使用在fastjson中提供了一个用于处理泛型反序列化的类TypeReference。importcom.alibaba.fastjson.TypeReference;List<VO>list=JSON.parseObject("…",newTypeReference<List<VO>>(){});如下写法有更好的性…

    2022年6月29日
    37
  • “龙虾热”带火Mac Mini M4 专家: 不建议为科技产品溢价买单

    “龙虾热”带火Mac Mini M4 专家: 不建议为科技产品溢价买单

    2026年3月13日
    2
  • 绘制PR曲线[通俗易懂]

    绘制PR曲线[通俗易懂]一、获取txt文件运行darknet官方代码中的darknetdetectorvaliddatacfgweight指令(例如:darknet.exedetectorvaliddata/koujian/koujian.datacfg/yolov3-tiny11.cfgbackup/yolov3-tiny11_last.weights),可以在result/目录下得到网络检测的输出txt文件:包括检测的图像名字、类别、概率、边界框位置(左上角和右下角):二.新建两个文件:rev

    2022年6月26日
    68
  • c++ 基础数据类型 与 uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型

    c++ 基础数据类型 与 uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型C 的基础数据类型 C 的主要数据类型 主要分为三类 布尔型 整型 char 型从本质上说 也是种整型类型 它是长度为 1 的整数 通常用来存放字符的 ASCII 码 浮点型 而 t 是 typedef 定义的表示标志 是结构的一种标注 即我们所看到的 uint8 t uint16 t uint32 t 都不是新的数据类型 而是通过 typedef 给类型起得别名 uint8 t uint

    2026年3月18日
    3
  • TensorFlow实现条件批归一化(Conditional Batch Normalization)

    TensorFlow实现条件批归一化(Conditional Batch Normalization)批归一化 BatchNormali BN 是深度学习中常用的网络训练技巧 它可以加快了模型的收敛速度 从而使得训练深层网络模型更加容易和稳定 但是在生成对抗网络 GenerativeAd GAN 中使用 BN 会导致生成图片在一定程度上出现同质化的缺点 利用条件批归一化可以解决此问题 本文讲解了条件批归一化 并使用 TensorFlow2 进行实现

    2026年3月16日
    2

发表回复

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

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