解释执行与编译执行

解释执行描述的是将源语言直接作为输入,每次执行一条就将源代码解释成机器码,并不保留中间结果。因为每次都需要解释所以移植性和跨平台性很高。

我们可以将解释执行的过程类比成现实生活中的高级翻译——同声传译。翻译的工作就是将我们的语言翻译成对方国家的语言,你说一句,翻译就紧跟这翻译这一句,无需等待。也就是说只要我们带上足够的翻译,走遍全球都不是问题。

而编译执行描述的是将源代码事先编译成目标机器的机器码文件,这样一来就直接可以在目标机器上运行,但是由于目标机器的不同,每次更换目标都需要重新编译与之相对的机器码文件,所以移植性较差。

这个过程可以类比成将翻译的结果录制成磁带,好处就是你可以直接播放磁带让对方听得懂,不必随身带翻译了。但是当你在美国的时候需要把语言翻译成英语,而到了俄罗斯你就得再把你的语言翻译成俄语,灵活度不高。

解释执行是来一句翻译一句,当然没有编译执行这样直接执行的效率高,但是解释执行灵活,可谓写一次到处执行!!

Java的执行过程

写一次到处执行(write once run anywhere)其实是Java的宣传语,这很容易让人联系到解释执行的低效问题,那么Java的执行过程到底是怎么样的呢?

首先我们编写好的Java代码会通过JavaC编译成字节码文件(bytecode),在运行的时候,通过JVM内嵌的解释器将字节码文件解释成机器码。但是常见的JVM例如Hotspot虚拟机,都提供了JIN(just int time)机制,此机制被称为动态编译机制,它可以将反复执行的热点代码直接编译成机器码,这种情况下部分热点代码的执行就属于编译执行,而不是解释执行了。

Hotspot JVM默认采用这种混合执行模式,综合两者优势将灵活和执行速度合二为一。

Java执行效率真的差么

及时编译的模式假定程序符合二八定律的,即百分之二十的代码占用了百分之八十的资源。对不常用的代码,根本无需耗时将其编译成机器码,采用解释执行完全可以满足要求。而对于常用的热点代码,可以将其编译成机器码,达到理想的运行效率。

现在的Java程序其实是可以快过C++,因为及时编译是动态编译,比C++事先编译能拿到程序运行时的更多信息,可以进行更多的优化。

AOT

而且在Java9中引入了实验室特征 AOT(ahead of time compilation),AOT能够在线下事先将java字节码文件编译成机器码!!!。

但是对于那些发布不频繁,或者说长时间运行的的程序,其实在选择线下编译和及时编译的效果一样,因为当程序运行一两个小时之后,及时编译已经基本完成,而且动态编译可以获取程序运行时的更多信息,优化效果更好。

不仅如此在主流Java版本中例如JDK8,提供了多种即时编译器模式:Server、Client 和多种及时编译器:C1、C2 和 Graal。

可见未来的Java性能超越C/C++已经不是梦想。

答案:【这句话说的并不准确,Java的执行是解释+编译混合的。你答对了么?】

转载:https://blog.csdn.net/qq_23191031/article/details/81677057

java是解释执行么相关推荐

  1. java 编译 解释执行_关于Java的编译执行与解释执行

    编程语言分为低级语言和高级语言,机器语言.汇编语言是低级语言,C.C++.java.python等是高级语言. 机器语言是最底层的语言,能够直接执行.而我们编写的源代码是人类语言, 计算机只能识别某些 ...

  2. 谈谈你对java的理解,java是“解释执行”这句话对吗?

    谈谈你对java的理解,java是"解释执行"这句话对吗? 先科普下什么是"解释执行"? 什么是"编译执行"? • 解释执行 解释执行时高级 ...

  3. java 编译运行原理_Java编译和解释执行对比及原理解析

    编程语言分为低级语言和高级语言,机器语言.汇编语言是低级语言,C.C++.java.python等是高级语言. 机器语言是最底层的语言,能够直接执行.而我们编写的源代码是人类语言, 计算机只能识别某些 ...

  4. “Java是编译执行的语言”这句话对吗?

    现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...

  5. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  6. java虚拟机基于栈,深入理解java虚拟机(11):基于栈的字节码解释执行引擎

    1.解释执行 编译过程如下 2.基于栈的指令集和基于寄存器的指令集 java编译器输出的指令流,基本是一种基于栈的指令集架构,指令流中的大部分指令都是零地址,依赖于操作数工作.与之相对的是基于寄存器的 ...

  7. 一段话系列-Java是否是解释执行语言?

    2019独角兽企业重金招聘Python工程师标准>>> Java是半执行半解释执行语言,首先,Java会由Javac编译成字节码,这是编译:然后字节码会交由JVM中的解释器进行解释执 ...

  8. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明

    在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...

  9. Java语言是 解释执行 的语言吗

    本篇来自周志明的<<深入理解java虚拟机>> 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两 ...

  10. 【JVM源码解析】模板解释器解释执行Java字节码指令(上)

    本文由HeapDump性能社区首席讲师鸠摩(马智)授权整理发布 第17章-x86-64寄存器 不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Archit ...

最新文章

  1. GitLab+Jenkins+Ansible
  2. nodejs实现webservice问题总结
  3. Android数据存储之GreenDao 3.0 详解
  4. Python基础-包
  5. 驱动思想之机制和策略
  6. UIView常见方法总结
  7. 十年云计算大爆发,微软正在摧毁其它竞争对手
  8. WebSocket笔记(一) 初步认识
  9. 论坛中的验证码的作用
  10. Excel对话框大全
  11. android中的ActionBar和ToolBar
  12. 解决Python安装后目录下缺失Scripts文件夹
  13. php算法结构,PHP中常用算法以及数据结构
  14. 起始之家网站的辅助教程值不值得买
  15. 基于yolo3 与crnn 实现中文自然场景文字检测及识别
  16. 二元一次方程组计算机题,2元一次方程组(二元一次方程组计算题带答案)
  17. a标签去下划线或文字添加下修饰_a标签去掉下划线_百度经验
  18. 2022-2027年中国OLED市场竞争态势及行业投资前景预测报告
  19. html中倒计时函数,关于倒计时的函数
  20. php身份证识别ORC

热门文章

  1. Json实现异步请求(提交评论)
  2. 《实施Cisco统一通信管理器(CIPT1)》一1.3 总结
  3. nodewebkitV0.21.6版本的学习
  4. 昨天我遇到一个令我敬佩的人
  5. linux下查找文件、排序、查看文件内容
  6. javascript_php 正则匹配 转
  7. java 设置系统参数_Java 设置系统参数和运行参数
  8. Linux系统下多版本gcc使用问题记录
  9. 路由重发布Route Redistribution
  10. vmware player 坑