平台无关

来源:互联网 发布:淘宝账户更改手机号码 编辑:程序博客网 时间:2024/04/29 22:29

Java技术在网络环境下非常有用,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台。

Java程序可以不加修改地运行于多个平台的能力,这给予了网络一个同构的运行环境,这就使得新的分布式系统可以围绕着"网络移动"对象来构建。
像对象序列化、RMI(远程方法调用)以及Jini这样的API就利用了这样的能力,把面向对象编程从虚拟机中带到了网络上。


Java的体系结构对平台无关的支持

1.Java平台

扮演了一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色。
Java程序被编译为可运行于Java虚拟机中的二进制程序,并且假定Java API的class文件在运行时都是可用的。
虚拟机运行程序,那些API则给予程序访问底层计算机资源的能力。

2.Java语言

它的基本数据类型的值域和行为都是有语言自己定义的。

3.Java class文件

class文件定义了一个特定于Java虚拟机的二进制格式,
Java class文件可以在任何平台上创建,也可以被任何平台的Java虚拟机装入并运行。
它的格式,包括多字节值的高位优先存放约定,都有严格的定义,并且是与Java虚拟机所在平台无关的。

Java的好处不仅在于它可以方便地使程序从一个平台移植到另一个平台,而且可以使同一段二进制Java代码通过网络发送,并且可以在任何计算机或设备上运行

本地方法

当编写一个平台独立的Java程序时,不要直接或间接调用不属于Java API的本地方法
调用Java API以外的本地方法将使程序平台相关




在编写平台独立的Java程序时,必须遵循两条原则,这两条原则和Java虚拟机中的某些部分有关,Java虚拟机中的某些部分可以由不同的开发商用不同的方法实现。
1.不要依赖及时终结(finalization)来达到程序的正确性
2.不要依赖线程的优先级(thread prioritization)来达到程序的正确性
这两条原则可以防止Java虚拟机规范中允许的垃圾收集和线程在不同实现中的变化所带来的的不利影响。

Java虚拟机规范只保证了,程序中所有拥有最高优先级的可运行线程会得到一些CPU时间。
这个规范也保证了在较高优先级的线程被阻塞时,较低优先级的线程将会运行。
但是,在较高优先级的线程没有被阻塞的情况下,并没有禁止较低优先级的线程的运行。
在某些虚拟机的实现中,即使较高优先级的线程并未被阻塞,那些较低优先级的线程也可能得到CPU时间。
为了保证多线程Java程序的平台独立,必须依赖同步(synchronization)而不是优先级来在线程之间协调相互间的动作
0 0
原创粉丝点击