为什么要平台无关性这个问题已经不需要再说,因为java号称“一次编译,到处运行”(当然早期的时候微软也嘲笑它“一次编译,到处调试”), java的平台无关性是java语言, class文件, API, JVM共同作用的结果.
java平台(即java虚拟机和java API)是java的平台无关性的最重要的保证. 因为JVM和API在不同的硬件和操作系统上得以实现,使得java程序不用关心底层, 因为它在任何时候都只和java平台打交道. java平台在java程序和底层平台之间扮演了缓冲的角色.
java语言能够从它的原始类型的的行为上折射出平台无关性, java的原始类型的范围和长度是由java语言规定的, 而不像C, C++那样依赖于硬件平台. 如int和float任何时候都是32位。
class文件, 如前面提到的一样, 是为JVM定制的二进制文件格式, class文件可以在任何平台上产生, 但它们的格式在任何平台上都被严格定义和实现.
影响平台无关性的因素
java平台的部署程度, 说通俗一点就是到底世界上有多少人的电脑安装了java。
java平台的版本, java平台在不断的进步和完善,不断地有新版本推出来。平台的升级会给原有的 java程序带来冲击。
本地方法, 如果你要写出平台无关的程序, 你一定不要直接调用本地方法, 毫不犹豫, 本地方法都是平台相关的. 但是本地方法也有它的好处: 1: 能够使用一些Java API 没有的, 底层的特性; 2: 可以访问遗留的, 不是用java语言写的系统; 3: 对于时间要求严格的进程, 可以调用本地方法提高性能.
两条需要遵守的规则
1 不要依靠及时的内存回收来保证程序的正确性, 因为不同厂商的JVM的GC算法不一样;
2 不要依靠线程的优先级保证程序的正确性, 不同厂商的JVM对线程调度的细节处理也不一样.