Java在虚拟机层面隐藏了底层技术多复杂性以及机器与操作系统的差异,实现了在任意一台虚拟机上编译的程序都能在任何一台虚拟机上正常运行。
虚拟机会完成对硬件平台的兼容及对内存等资源的管理工作。
Java优点:
拜托了硬件平台电束缚,实现了“一次编写,到处运行”的理想;
提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题;
实现了热点代码检测和运行时编译及优化,这使Java应用能随着运行时间的增加而获得更高的性能;
有一套完善的应用程序接口。
JDK包括:Java程序设计语言,Java虚拟机,Java API类库,JDK是用于支持java程序开发的最小环境。 Java API类库中的Java SE API子集和Java虚拟机这两部分称为JRE.JRE是支持Java程序运行的标准环境。
Hotspot虚拟机成为JDK1.3及之后所有版本的Sun JDK的默认虚拟机。
JDK1.5语法在易用性上做出了非常大的改进。例如:自动装箱,泛型,动态注解,枚举,可变长参数,遍历循环等。在虚拟机和API层面,改进了Java的内存模型(JMM)提供了java.util.concurrent并发包等。
由于编译器和解释器不能配合工作,意味着如果使用编译器执行,编译器就不得不对每个方法,每一行代码都进行编译,而无论它们执行的效率是否具有编译都价值。
准确式内存管理:虚拟机可以知道内存中某个位置的数据具体是什么类型。譬如内存中有一个32位的整数123456,虚拟机可以分辨他是一个reference类型指向123456的内存地址还是一个数值为123456的整数。这样才能在GC的时候准确判断堆上的数据是否还能被使用。
Hotspot具有准确式内存管理和热点代码探测技术(热点代码探测能力可以通过执行计数器找出最有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。