Java编译与解释-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Java编译与解释

2018-07-03 10:59:47 2813 2

_20180703104117
JDK1.8中的虚拟机采用JIT编译器,它采用编译与解释并存的mixed mode,根据方法的执行频率采用编译或者解释的方式执行字节码。当我使用javac命令编译的时候,是将执行频率高的方法编译成字节码,然后其他方法解释执行吗?这样子的话我用java执行的是.class文件,没有被编译成字节码的那部分代码是怎样执行的呢?如果javac将全部Java代码编译成字节码,那么解释执行的模式还有什么意义呢?

取消 提交回答
全部回答(2)
  • kissjz
    2019-07-17 22:46:25

    Java是解释性语言还是编译型的,这个我觉得不好说,倒不是骑墙。我的理解:Java源程序通过javac编译成中间代码class文件,这也是实现Java跨平台的方式(Java开发的程序交付一般都是jar或者war包,只要系统上有JVM就能运行了)。那么从class文件到机器码的过程呢?这时候就需要JVM出马了。JVM有三种执行模式:解释执行,编译执行,混合执行(默认是混合执行)。Java一共有两套解释器,一个是古老的字节码解释器,还有一个是现在正在用的模板解释器,模板解释器将每一条字节码和一个模板函数关联,模板函数中直接产生这条字节码执行的机器码,类似于活字印刷术吧,这便实现了解释执行。但是这要效率还是很低,尤其是出现热点代码的时候,比如函数被频繁调用。为了解决这个问题,JVM又提供了一种叫做JIT(just in time)编译的技术,即将真个函数编译成机器码,每次函数执行只要执行编译后的机器码就行了。
    TIM_20180904203303
    后来还出现了动态编译(Dynamic Conpiler)器,针对程序特性或者是让程序执行几个循环,在根据结果是否编译这段程序码。

    刚开始学的时候也有疑问,就是既然编译执行效率高为啥不都搞成编译执行模式而是要默认混合执行模式。首先来看一下编译执行和解释执行的优缺点,解释执行:解释一句执行一句,无需等待全部编译结束。编译执行:全部编译再执行,下一次再调用到这段代码的时候跳过解释直接用编译后的机器码。但根据28法则,20%的代码占用了80%的计算资源,那对于80%的不常用代码就没必要编译了,所以只对热点代码编译,当然我想jvm判断哪段代码编译哪段代码解释执行是综合考虑的

    1 0
  • 一溜
    2019-07-17 22:46:25

    你应该理解错了java虚拟机的编译与解释。
    java虚拟机的JIT编译,不是指从.java到.class的编译,是从.class到二进制执行代码的过程;当完成jit编译之后,相关程序的执行不会再涉及class到执行代码的编译过程,而是直接执行编译好的二进制代码;这是java代码运行速度能接近c的根本。

    而解释执行,则每次都是从class文件开始编译执行,运行会比较慢。

    0 0
添加回答
相关问答

42

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 147576浏览量 回答数 42

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 234007浏览量 回答数 170

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 341454浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 143674浏览量 回答数 13

119

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 302770浏览量 回答数 119

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 149016浏览量 回答数 22

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 660776浏览量 回答数 24

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 148150浏览量 回答数 31

43

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 144766浏览量 回答数 43

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 137800浏览量 回答数 10
+关注
0
文章
1
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载