先盗一张图:
一般来说,编译器是运行前将代码编译成二进制文件,其包含的是可直接执行的机器指令;解释器则是运行时,一条一条将代码解释成平台可执行的机器指令。看上去是编译器比解释器快,是因为执行的是已经编译好的机器指令,而解释器每次运行的都会解释执行。实质上,编译器编译代码时间加上执行时间要比解释器多。
JAVA严格来说是半编译半解释的语言。
如上图所示,java是先编译成字节码(非纯二进制代码),即由.java文件编译成.class文件,再由JVM解释器解释执行。
现在解释两个问题:
1、为什么JAVA执行相对比较快?
那是JVM解释的是编译后的字节码,这比直接解释源码要快。
2、为什么JAVA可以跨平台?
首先,编译器执行后的程序所有情况下都可以直接运行的,还要看平台的系统,不同系统执行不同的编译版本。
而JVM可以跨平台安装,其解释执行的阶段把.class文件中的字节码解释成对应平台可执行的机器指令,所以java代码可以做到跨平台执行。