赞
踩
编译方式把源程序的执行过程严格地分成两大步:编译和运行。
①把源程序全部翻译成目标代码
②运行目标代码,获取执行结果。
源程序输入到计算机后,解释程序将程序逐句翻译,翻译一句执行一句边翻译边执行,不产生目标程序。
解释方式是按照远程序中语句的动态顺序,直接地逐句进行分析解释,并立即执行。
解释的过程:在程序执行时开始翻译代码为二进制,翻译一句执行一句。
根据代码结构肯能提高或降低java程序执行速度。
由于JIT对每条字节码都进行编译,造成了编译过程负担过重(编译器必须与应用程序共享CPU)。为了避免这种情况,当前的JIT只对最频繁执行的字节码(热方法)进行编译,如循环等。可通过java.lang.Compiler.disable();关闭。
运行时进行本地代码编译而不是在程序运行前编译(C、C++是这种),保证了可移植性。
在程序执行前生成 Java 方法的本地代码,以便在程序运行时直接使用本地代码。
牺牲了平台无关性和代码质量,因为它们不能利用程序的动态行为,也不具有关于加载的类或类层次结构的信息。
避免 JIT 编译器的运行时性能消耗或内存消耗,或者避免解释程序的早期性能开销。极大提高java代码性能。
具体参照:http://blog.csdn.net/hsuxu/article/details/9320699
静态代码块 :JVM加载类的时候会加载执行,并且只执行一次。
非静态代码块:在new对象的时候执行,每次new的时候都会执行一次。
用javac命令,源文件source code(.java)编译成字节码bytecode(.class)。
注:
a) .java文件是一个编译单元,每个编译单元最多只有一个public标记的类,其它的类都是为这个public类起支撑作用的。
b)在编译的时候,根据这个.java文件中类的数量不同,产生几个.class文件,这个与C++中一个编译单元产生一个.object文件不同。
c)如果两个.java文件都包含一个相同的类如Test,那么这两个java文件编译后,只能产生一个Test.class,谁后编译属于谁。
d)一个有效的程序就是一系列的class文件,它们可以封装和压缩到一个jar文件。
有的时候,三种方式同时使用。至少i>和ii>是同时使用的,iii>需要程序员手工指定。
因为代码编译后不能直接运行,它是解释运行再JVM上,所以是半解释型。不同平台下JVM虚拟机的细节实现是不同的,所以才能适应不同的平台。
以method为翻译单位,还会保存起来,第二次执行就不用翻译了。
现在的JVM为了效率,有一些JIT优化。JIT编译启用时,JVM读入.class文件解释后,将其发给JIT编译器。JIT编译器直接将bytecode编译为本机机器代码。所以是编译型,没有必要纠结它是编译型还是解释型。
RTSJ(Real time specification for java):实时规范。
解释性语言:HTML、XML、Javascript、C#
编译性语言:C/C++、Pascal/Object Pascal(Delphi)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。