两个问题
1.java是边解释边执行还是一次性解释然后执行?
2.如果是边解释边执行那么是不是每次运行到相同函数又会重新解释?会自动缓存吗?
请明白的大侠告知小弟。

解决方案 »

  1.   

    javascript是解释性语言
    读一条 执行一条
      

  2.   

    就hotspot虚拟机而言,有两种模式,一是-client,二是-server-client模式下,是逐条解释执行的
    -server模式下,先解释执行,然后jvm统计执行热点,将这些热点代码仔细优化编译成本地代码,然后执行本地代码,当这个热点不再是热点的时候,释放编译的代码,重新解释执行其它的jvm可能在一启动的时候就全部编译成本地代码诸如此类,没有强制规定,jvm实现者想怎么做都可以,只要不改变java相关的语义
      

  3.   

    运行字节码的工作是由解释器来完成的。解释器执行过程分3步执行:代码载入、代码校验和代码执行。代码载入由“类装载器”(class loader)完成。class loader负责装载运行一个程序所需要的所有代码,包括程序代码中的类所继承的类和被其调用的类。当 class loader装载一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其他类。      随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈益处、非法数据类型转化等多种错误。通过校验后,代码便开始执行了。      Java 字节码执行有两种方式:         (1). 即时编译方式:解释器先将字节码编译成机器码,然后执行该机器码。         (2). 解释执行方式:解释器通过每次解释并执行一小段代码来完成java字节码程序所有的操作。      通常采用第二种方法。
      

  4.   

    对于hotspot
    1.可以是存解释性的。
    2.可以是通过热点来编译成本地码
    3.存本地码如果你在windows下,默认是第一种。linux默认是第二种。
      

  5.   

    java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。
      

  6.   

    编译执行。java会有.java .class两种文件,一个是源,一个是编译后的。所以是一次性编译执行。
    解释执行的语言,不会生成中间文件,源文件即可执行。