Java平台的两个特点:
1、一次编译、到处执行的跨平台特性
2、自动垃圾回收GC机制
Java语言的执行方式是编译执行还是解释执行?
先看基本定义:
编译型语言:把做好的源程序全部编译成二进制代码的可运行程序,然后可直接运行这个程序。执行速度快、效率高;依靠编译器、跨平台性差。
解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束。执行速度慢、效率低;依靠解释器、跨平台性好。
而对于Java语言:JAVA的源代码首先被编译成字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码(之所以能一次编译、到处执行)
结论:Java兼具编译型语言与解释型语言的特点
更具体的说:
Java JIT(just in time)即时编译器是sun公司(现已被Oracle收购)采用了Hotspot VM虚拟机取代其开发的Classic VM和Exact VM之后引入的一项技术,目的在于提高java程序的性能。这里说的编译器与通常说的javac编译器不同,JIT编译器它是将字节码编译为硬件可执行的机器码的。
JIT并不一定总能提高程序的执行效率甚至适得其反,这很大一部分取决于开发人员所写的程序质量,作为优秀的工程师应该会写出对JIT友好的程序。
以上整个java应用程序的执行过程如下:
1、源代码经javac编译成字节码class文件
2、程序字节码经过JIT进行判断,是否属于“热点代码”(多次调用的方法,或循环等)
3、如是,走JIT编译为具体硬件处理器(如sparc、intel)机器码
4、如否,则直接由解释器解释执行
5、操作系统及类库调用
6、硬件
特别的例子:
BEA公司(现已被Oracle收购)为服务器硬件和服务端应用专门打造的高度优化的虚拟机—Jrockit VM,由于面向服务端应用,所以它并不在意和关注程序的启动速度,jrockit并不实现解释器,而是将所有代码都交由jit做即时编译执行
三大虚拟机:
HotSpot、JRockit、IBM JVM
1、Hotspot虚拟机:
有两种模式,一是-client,二是-server
1、-client模式下是逐条解释执行的
2、-server模式下先解释执行,然后jvm统计执行热点,将这些热点代码仔细优化编译成本地代码,然后执行本地代码,当这个热点不再是热点的时候,释放编译的代码,重新解释执行
采用分代垃圾回收
2、JRockit虚拟机
业界性能最高的Java虚拟机
3、IBM虚拟机
被IBMWebsphere使用