java是解释执行么
解释执行与编译执行
解释执行描述的是将源语言直接作为输入,每次执行一条就将源代码解释成机器码,并不保留中间结果。因为每次都需要解释所以移植性和跨平台性很高。
我们可以将解释执行的过程类比成现实生活中的高级翻译——同声传译。翻译的工作就是将我们的语言翻译成对方国家的语言,你说一句,翻译就紧跟这翻译这一句,无需等待。也就是说只要我们带上足够的翻译,走遍全球都不是问题。
而编译执行描述的是将源代码事先编译成目标机器的机器码文件,这样一来就直接可以在目标机器上运行,但是由于目标机器的不同,每次更换目标都需要重新编译与之相对的机器码文件,所以移植性较差。
这个过程可以类比成将翻译的结果录制成磁带,好处就是你可以直接播放磁带让对方听得懂,不必随身带翻译了。但是当你在美国的时候需要把语言翻译成英语,而到了俄罗斯你就得再把你的语言翻译成俄语,灵活度不高。
解释执行是来一句翻译一句,当然没有编译执行这样直接执行的效率高,但是解释执行灵活,可谓写一次到处执行!!
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是解释执行么相关推荐
- java 编译 解释执行_关于Java的编译执行与解释执行
编程语言分为低级语言和高级语言,机器语言.汇编语言是低级语言,C.C++.java.python等是高级语言. 机器语言是最底层的语言,能够直接执行.而我们编写的源代码是人类语言, 计算机只能识别某些 ...
- 谈谈你对java的理解,java是“解释执行”这句话对吗?
谈谈你对java的理解,java是"解释执行"这句话对吗? 先科普下什么是"解释执行"? 什么是"编译执行"? • 解释执行 解释执行时高级 ...
- java 编译运行原理_Java编译和解释执行对比及原理解析
编程语言分为低级语言和高级语言,机器语言.汇编语言是低级语言,C.C++.java.python等是高级语言. 机器语言是最底层的语言,能够直接执行.而我们编写的源代码是人类语言, 计算机只能识别某些 ...
- “Java是编译执行的语言”这句话对吗?
现在让你谈谈对Java平台的理解,你是否会感觉内容过于庞大?这个问题是比较宽泛的,Java发展到现在已经不仅仅是语言这么简单了,Java平台涉及的,包括但不仅限于下面提到的这些内容: Java语言本身 ...
- JAVA 文件编译执行与虚拟机(JVM)简单介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...
- java虚拟机基于栈,深入理解java虚拟机(11):基于栈的字节码解释执行引擎
1.解释执行 编译过程如下 2.基于栈的指令集和基于寄存器的指令集 java编译器输出的指令流,基本是一种基于栈的指令集架构,指令流中的大部分指令都是零地址,依赖于操作数工作.与之相对的是基于寄存器的 ...
- 一段话系列-Java是否是解释执行语言?
2019独角兽企业重金招聘Python工程师标准>>> Java是半执行半解释执行语言,首先,Java会由Javac编译成字节码,这是编译:然后字节码会交由JVM中的解释器进行解释执 ...
- 解释java程序所使用的命令是,Java程序的执行原理以及解释说明
在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...
- Java语言是 解释执行 的语言吗
本篇来自周志明的<<深入理解java虚拟机>> 许多Java虚拟机的执行引擎在执行Java代码的时候都有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两 ...
- 【JVM源码解析】模板解释器解释执行Java字节码指令(上)
本文由HeapDump性能社区首席讲师鸠摩(马智)授权整理发布 第17章-x86-64寄存器 不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Archit ...
最新文章
- GitLab+Jenkins+Ansible
- nodejs实现webservice问题总结
- Android数据存储之GreenDao 3.0 详解
- Python基础-包
- 驱动思想之机制和策略
- UIView常见方法总结
- 十年云计算大爆发,微软正在摧毁其它竞争对手
- WebSocket笔记(一) 初步认识
- 论坛中的验证码的作用
- Excel对话框大全
- android中的ActionBar和ToolBar
- 解决Python安装后目录下缺失Scripts文件夹
- php算法结构,PHP中常用算法以及数据结构
- 起始之家网站的辅助教程值不值得买
- 基于yolo3 与crnn 实现中文自然场景文字检测及识别
- 二元一次方程组计算机题,2元一次方程组(二元一次方程组计算题带答案)
- a标签去下划线或文字添加下修饰_a标签去掉下划线_百度经验
- 2022-2027年中国OLED市场竞争态势及行业投资前景预测报告
- html中倒计时函数,关于倒计时的函数
- php身份证识别ORC