- java的跨平台
java是跨平台的语言,跨平台特性是由java编译的字节码完成的。开发者编写完java程序后,将由编译器(javac或者eclipse的ecj)将源码编译成.class文件,即所谓的字节码。该字节码独立于平台之上,由jvm直接解析,不同平台有不同的jvm,这样便实现了java语言的跨平台特性。
javac和ecj的区别在于,javac是全量编译,ecj是增量编译,在大多数场合下ecj的编译效果好于javac。当在eclipse下面编写源码保存后,已经编译好的文件将不会重新编译,只对有改变的文件进行编译,这便是增量型编译。 - java编译过程
java编译器首先将.java源码文件编译成.class文件,当启动程序的时候,由jvm对.class文件解释执行。但java引入了JIT(Just In Time)实习热点探测功能。热点探测即JIT将java语言对使用次数较多的方法体或者循环体直接编译成机器码,以后便直接使用机器码执行。
内嵌编译器JIT有两类,一是Client Compiler, 该编译器关注的是编译的速度,二是Server Compiler, 该编译器关注的是编译的质量。
有两种方法可以实现热点探测,一是基于采样的热点探测(容易受到线程阻塞和别的外界因素影响),一是基于计数器的热点探测(方法调用计数器、回边计数器)。Hotpot采用的是基于计数器的热点探测。 - java是编译型,解释型?
基于以上的内容,java到底是编译型还是解释型的呢?java在编译字节码的时候确实是编译器的功劳,而在执行的时候是由jvm解释执行。但是话又说回来机器码不也是被机器解释执行的吗?因此不能简单的直接定义java是编译型或是解释型。我们可以说java是编译解释共存的结构
java编译器1
