Java的解释执行是先全部解释完后再执行还是边解释边执行?

它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。既然Java语言是解释型的,那它就是边解释边执行咯 补充: 不过,虽然java是解释型的语言,但是在不同的平台环境上的java虚拟机也是会有一次性解释然后执行的情况的!!! 追问: java程序在一个平台上被解释成了二进制目标代码,退出java程序后,再运行java程序时,还需要再次解释吗?如果需要再次解释,就显得浪费资源;不再次解释,程序就不能“一次编写,到处运行”。 回答: 就hotspot虚拟机而言,有两种模式,一是-client,二是-server -client模式下,是逐条解释执行的 -server模式下,先解释执行,然后jvm统计执行热点,将这些热点代码仔细优化编译成本地代码,然后执行本地代码,当这个热点不再是热点的时候,释放编译的代码,重新解释执行 其它的jvm可能在一启动的时候就全部编译成本地代码 总之,JVM会自行优化!



就hotspot虚拟机而言,有两种模式,一是-client,二是-server

-client模式下,是逐条解释执行的
-server模式下,先解释执行,然后jvm统计执行热点,将这些热点代码仔细优化编译成本地代码,然后执行本地代码,当这个热点不再是热点的时候,释放编译的代码,重新解释执行

其它的jvm可能在一启动的时候就全部编译成本地代码

诸如此类,没有强制规定,jvm实现者想怎么做都可以,只要不改变java相关的语义




Java 字节码执行有两种方式:

         (1). 即时编译方式:解释器先将字节码编译成机器码,然后执行该机器码。

         (2). 解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序所有的操作。

      通常采用第二种方法。



如果是边解释边执行那么是不是每次运行到相同函数又会重新解释?会自动缓存吗?


会做些偷懒的工作,比如检测到一直重复调用某个函数,直接编译成本地码

JVM会自行优化!



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值