到底什么叫 "解释执行"

pengyou41 2014-06-11 10:37:10
很多书上或者文章上都是这么写:JAVA编译是生成的JVM的指令,运行时,从程序中取一条伪指令,在JVM中翻译成一串机器指令,运行。再取一条指令,再翻译,再运行。
对于其中翻译二字实在不能理解,
目前我的想法是:
1.这个"翻译" 会执行真正意义上的编译和汇编和链接(类似于:cc,as,ld),这样的话是JVM就会把这个指令编译为native code,然后再运行,如果是这样如果这个平台上没有对应的编译器,汇编器,或者链接器,程序岂不是运行不起来,还是JVM有自带的编译器?
2."翻译"应该是JVM在不同平台上对一条JAVA指令对应一个本地的函数(native code),不同平台对应不同的函数,而JVM 就是提供这个本地函数集的作用,这样就实现了编译成同样的字节码可以在不同平台在运行?

如果是第一种,速度肯定不止慢一点点啊,
如果是第二种,速度应该不慢啊,(这种情况JIT应该起不了多少作用)

不知以上理解和正确沾边没有,求赐教,求指正。

...全文
200 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yoara 2014-06-11
  • 打赏
  • 举报
回复
准确的说,JAVA语言的编译是.java代码,翻译成.class字节码的过程,翻译出来的是个什么呢,你可以使用javap -verbose XXX.class(在某些机器环境不用.class后缀),输出查看。 首先明确一个概念,JAVA和JAVA虚拟机是不同的两个层面,特别的,JAVA虚拟机不是专为JAVA一种语言而创建的。。但凡某种高级语言代码能翻译成.class字节码并符合JAVA虚拟机规范所定义的class文件格式,那都能通过JAVA虚拟机运行。如今流行的类似Jruby等很多语言实际上就是建立在JAVA虚拟机之上。 再解释你的疑惑。 1.纯粹的虚拟机执行字节码代码,他的执行方式是“解释执行的”如同你所描述,翻译一条执行一条。这种执行手段不是慢,而是非常慢,sun 基础的虚拟机Visual VM就是基于这种模式,所以在JDK1.2之前,JAVA给人的印象就是运行极慢。其次,JVM的工作就是在解释运行时将字节码翻译成本地汇编码或指令集。 2.因为解释执行的效率问题,sun在1.2后引入了hotspot虚拟机(其实是收购的),它提供了对某些热点代码的即时编译支持(Just In Time,即你所说的JIT),对热点代码(包括常用的方法或常用的代码块)做本地代码化,以避免解释执行的性能消耗。同时,因为他能根据程序运行中所收集的数据信息做热编译,比起C/C++这种静态编译的语言,能做更多更好的优化算法和参数代入。所以,通过长时间运行,JAVA的效率甚至会比c/c++更好。

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧