以下内容全部摘自<<深入Java虚拟机第二版>>
欢迎转载, 欢迎拍砖
[b]1 为什么要平台无关[/b]
JAVA程序可以不加修改的运行于多个平台
传说中的[b][color=red]一处编译,处处运行[/color][/b]
[b]2 JAVA体系结构对平台无关的支持[/b]
JAVA体系中的所有组成部分都在对平台无关性的支持方面扮演着重要角色
2.1 JAVA平台
JAVA平台扮演一个运行时JAVA程序与其下硬件和操作系统之间的缓冲的角色,JAVA程序被编译成可运行于JAVA虚拟机中的二进制程序.
无论JAVA程序被部署于何处,它只需要与JAVA平台交互,而不需担心底层的硬件和操作系统.因此,它能够运行于任何拥有JAVA平台的计算机。
2.2 JAVA语言
JAVA语言主要通过以下方式支持JAVA的平台无关性.它的基本数据类型的值域和行为都是由语言自己定义的.通过确保基本数据类型在所有平台上的一致性,JAVA语言本身为JAVA程序的平台无关性提供了强有力的支持.
2.3 JAVA CLASS文件
CLASS文件可于任何平台上创建,也可以被任何平台的JAVA虚拟机装入运行.
2.4 可伸缩性.
JAVA平台可以在各种各样不同类型的计算机上实现(从嵌入式到大型主机)
针对不同的设备,有几种不同的JAVA平台,它们表现JAVA平台不同的伸缩性
企业版J2EE
标准版J2SE
微型版J2ME
[b]3 影响平台无关性的因素[/b]
3.1 JAVA平台的部署
决定JAVA平台无关性最主要的因素就是JAVA平台在不同平台上被部署的程度,只有在拥有JAVA平台的计算机或设备上,才能运行JAVA程序.
已有可用的JAVA平台和发布版本.
3.2 JAVA平台的版本
JAVA平台中保证可用的基本库集合被称为标准的API
3.3 本地方法
除了程序所依赖的JAVA平台的版本之外,决定JAVA程序的平台无关程度的另一个主要因素就是是否调用了本地方法.
编写一个平台独立的JAVA程序时,必须遵循一条最重要的原则:不要直接或间接调用不属于JAVA API的本地方法.
3.4 非标准的运行时库
3.5 对虚拟机的依赖
在编写平台独立的JAVA程序时,还必须遵循两条原则
不要依赖及时终结(finalization)来达到程序的正确性
不要依赖线程的优先级(tread prioritization)来达到程序的正确性
这两条原则可以防止JAVA虚拟机规范中允许的垃圾收集和线程在不同实现的变化中带来的不得影响
所有的JAVA虚拟机都必须有垃圾收集堆,但是不同的实现可能使用不同的垃圾收集技术
为了保证多线程JAVA程序的平台独立,必须依赖同步(sychronization)而不是优先级来在线程之间协调相互间的动作.
3.6 对用户界面的依赖
3.7 JAVA平台实现中的BUG
3.8 测试
因为JAVA平台的实现之间可能存在差异,依赖某些特定平台写的JAVA程序,以及任何特定的JAVA平台的实现中都有可能存在BUG,所有应该尽可能在所有希望运行的平台上对JAVA程序进行测试
[b]4 平台无关的七个步骤[/b]
编写平台无关的JAVA程序时,应注意:
4.1 选择程序要运行的主机和设备集合(目标宿主机)
4.2 在目标宿主机上选择自认为足够好的JAVA平台版本,在该版本平台上编写运行程序
4.3 对每个目标宿主机,选择一些程序将要运行的JAVA平台实现(目标运行时环境)
4.4 编写程序,使它只通过JAVA API的标准库来访问计算机(不调用本地方法,或开发高专有的调用本地方法的库)
4.5 编写程序,使它不依赖垃圾收集器及时终结的正确性,也不依赖于线程的优先级
4.6 努力设计一个用户界面,使它在所有的目标宿主机上都能正常工作
4.7 在所有的目标运行时环境和所有的目标宿主机上测试程序
(这样的JAVA程序称为100%纯JAVA的,可以打上咖啡图标)
[b]5 平台无关性的策略[/b]
[b]6 平台无关性和网络移动对象[/b]
欢迎转载, 欢迎拍砖
[b]1 为什么要平台无关[/b]
JAVA程序可以不加修改的运行于多个平台
传说中的[b][color=red]一处编译,处处运行[/color][/b]
[b]2 JAVA体系结构对平台无关的支持[/b]
JAVA体系中的所有组成部分都在对平台无关性的支持方面扮演着重要角色
2.1 JAVA平台
JAVA平台扮演一个运行时JAVA程序与其下硬件和操作系统之间的缓冲的角色,JAVA程序被编译成可运行于JAVA虚拟机中的二进制程序.
无论JAVA程序被部署于何处,它只需要与JAVA平台交互,而不需担心底层的硬件和操作系统.因此,它能够运行于任何拥有JAVA平台的计算机。
2.2 JAVA语言
JAVA语言主要通过以下方式支持JAVA的平台无关性.它的基本数据类型的值域和行为都是由语言自己定义的.通过确保基本数据类型在所有平台上的一致性,JAVA语言本身为JAVA程序的平台无关性提供了强有力的支持.
2.3 JAVA CLASS文件
CLASS文件可于任何平台上创建,也可以被任何平台的JAVA虚拟机装入运行.
2.4 可伸缩性.
JAVA平台可以在各种各样不同类型的计算机上实现(从嵌入式到大型主机)
针对不同的设备,有几种不同的JAVA平台,它们表现JAVA平台不同的伸缩性
企业版J2EE
标准版J2SE
微型版J2ME
[b]3 影响平台无关性的因素[/b]
3.1 JAVA平台的部署
决定JAVA平台无关性最主要的因素就是JAVA平台在不同平台上被部署的程度,只有在拥有JAVA平台的计算机或设备上,才能运行JAVA程序.
已有可用的JAVA平台和发布版本.
3.2 JAVA平台的版本
JAVA平台中保证可用的基本库集合被称为标准的API
3.3 本地方法
除了程序所依赖的JAVA平台的版本之外,决定JAVA程序的平台无关程度的另一个主要因素就是是否调用了本地方法.
编写一个平台独立的JAVA程序时,必须遵循一条最重要的原则:不要直接或间接调用不属于JAVA API的本地方法.
3.4 非标准的运行时库
3.5 对虚拟机的依赖
在编写平台独立的JAVA程序时,还必须遵循两条原则
不要依赖及时终结(finalization)来达到程序的正确性
不要依赖线程的优先级(tread prioritization)来达到程序的正确性
这两条原则可以防止JAVA虚拟机规范中允许的垃圾收集和线程在不同实现的变化中带来的不得影响
所有的JAVA虚拟机都必须有垃圾收集堆,但是不同的实现可能使用不同的垃圾收集技术
为了保证多线程JAVA程序的平台独立,必须依赖同步(sychronization)而不是优先级来在线程之间协调相互间的动作.
3.6 对用户界面的依赖
3.7 JAVA平台实现中的BUG
3.8 测试
因为JAVA平台的实现之间可能存在差异,依赖某些特定平台写的JAVA程序,以及任何特定的JAVA平台的实现中都有可能存在BUG,所有应该尽可能在所有希望运行的平台上对JAVA程序进行测试
[b]4 平台无关的七个步骤[/b]
编写平台无关的JAVA程序时,应注意:
4.1 选择程序要运行的主机和设备集合(目标宿主机)
4.2 在目标宿主机上选择自认为足够好的JAVA平台版本,在该版本平台上编写运行程序
4.3 对每个目标宿主机,选择一些程序将要运行的JAVA平台实现(目标运行时环境)
4.4 编写程序,使它只通过JAVA API的标准库来访问计算机(不调用本地方法,或开发高专有的调用本地方法的库)
4.5 编写程序,使它不依赖垃圾收集器及时终结的正确性,也不依赖于线程的优先级
4.6 努力设计一个用户界面,使它在所有的目标宿主机上都能正常工作
4.7 在所有的目标运行时环境和所有的目标宿主机上测试程序
(这样的JAVA程序称为100%纯JAVA的,可以打上咖啡图标)
[b]5 平台无关性的策略[/b]
[b]6 平台无关性和网络移动对象[/b]