java是边解释边执行还是一次性解释然后执行

笨小鸟 2012-10-12 09:14:12
两个问题
1.java是边解释边执行还是一次性解释然后执行?
2.如果是边解释边执行那么是不是每次运行到相同函数又会重新解释?会自动缓存吗?
请明白的大侠告知小弟。
...全文
557 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
运行字节码的工作是由解释器来完成的。解释器执行过程分3步执行:代码载入、代码校验和代码执行。代码载入由“类装载器”(class loader)完成。class loader负责装载运行一个程序所需要的所有代码,包括程序代码中的类所继承的类和被其调用的类。当 class loader装载一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。

随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。

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

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

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

通常采用第二种方法。
龙四 2012-10-12
  • 打赏
  • 举报
回复
就hotspot虚拟机而言,有两种模式,一是-client,二是-server

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

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

诸如此类,没有强制规定,jvm实现者想怎么做都可以,只要不改变java相关的语义
小傅哥 2012-10-12
  • 打赏
  • 举报
回复
javascript是解释性语言
读一条 执行一条
杀手 2012-10-12
  • 打赏
  • 举报
回复
一次性解释然后执行
gefei0001 2012-10-12
  • 打赏
  • 举报
回复
编译执行。java会有.java .class两种文件,一个是源,一个是编译后的。所以是一次性编译执行。
解释执行的语言,不会生成中间文件,源文件即可执行。
0轰隆隆0 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:

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


会做些偷懒的工作,比如检测到一直重复调用某个函数,直接编译成本地码
[/Quote]
JVM会自行优化!
hheeyyii 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

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

会做些偷懒的工作,比如检测到一直重复调用某个函数,直接编译成本地码
笨小鸟 2012-10-12
  • 打赏
  • 举报
回复
如果是边解释边执行那么是不是每次运行到相同函数又会重新解释?会自动缓存吗?
0轰隆隆0 2012-10-12
  • 打赏
  • 举报
回复
java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。
hheeyyii 2012-10-12
  • 打赏
  • 举报
回复
对于hotspot
1.可以是存解释性的。
2.可以是通过热点来编译成本地码
3.存本地码

如果你在windows下,默认是第一种。linux默认是第二种。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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