三、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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 中高级面试题_Java中高级面试题

    java 中高级面试题_Java中高级面试题一.基础知识:1)集合类:List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet);2)HashMap的底层实现,之后会问ConcurrentHashMap的底层实现;3)如何实现HashMap顺序存储:可以参考LinkedHashMap的底层实现;4)HashTable和ConcurrentHashMap的区别;5)Strin…

    2022年7月7日
    28
  • Xshell 连接linux主机

    Xshell 连接linux主机0 前言使用 Xshell 连接远程服务器 文件 新建 出现如下图标 主机即为需要连接的 Linux 服务器的 ip 地址 端口号为 22 无须修改 但需要确认远程服务器的 22 端口已经打开 点击左边的 用户身份验证 输入用户名和密码 点击确认后 即可连接 总体流程 就是这个样子 问题就在于 ip 地址 用户名 密码怎么填写 下面几个章节就展示了如何查看远程 Linux 服务器的 ip 用户名和密码等 1 查看 ip 地址查看 ip 地址使用命令 ifconfig 确保能够 ping 通在连接之前 需要确保本地能够 p

    2025年7月11日
    3
  • android:强大的图片下载和缓存库Picasso

    android:强大的图片下载和缓存库Picasso

    2021年12月2日
    39
  • GoogLeNet系列解读「建议收藏」

    GoogLeNet系列解读「建议收藏」本文介绍的是著名的网络结构GoogLeNet及其延伸版本,目的是试图领会其中的思想而不是单纯关注结构。GoogLeNetIncepetionV1MotivationArchitecturalDetailsGoogLeNetConclusionGoogLeNetInceptionV2IntroductionGeneralDesignPrinciplesFactorizi

    2022年4月19日
    786
  • 多种时间格式字符串转换为Date对象「建议收藏」

    多种时间格式字符串转换为Date对象「建议收藏」maven引入包org.apache.commonscommons-lang33.8使用类org.apache.commons.lang3.time.DateUtils调用示例Datedate=DateUtils.parseDate(strDate,”yyyy-MM-dd”,”yyyy-MM-ddHH:mm:ss”,”yyyy/MM/dd”,”yy…

    2022年9月1日
    4
  • linux 卸载jdk_linux环境变量文件

    linux 卸载jdk_linux环境变量文件1、检查系统jdk版本:2、检测jdk安装包:3、卸载openjdk:一开始选择了直接删除openjdk文件夹后面使用了这种简单明了快捷yumremoveopenjdk4、安装新的jdk:首先到jdk官网上下载你想要的jdk版本,下载到指定的文件夹下,我一般放在/usr/lib/java。官方下载越来越慢,可以考虑一些云服务商的镜像,如华为云:wgethttps://repo.huaweicloud.com/java/jdk/8u192-b12/jdk-8u192-lin

    2022年10月1日
    6

发表回复

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

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