为什么要平台无关
Java技术在网络环境下非常有用,其中一个关键的理由就是,用Java创建的可执行二进制程序,能够不加改变地运行于多个平台。这一点在网络化环境中尤为重要,因为大多数网络通常都是由各种各样不同种类的计算机和设备互联而成。
此外,新兴的网络化嵌入式设备则展示了Java又一擅长的领域,因为它的平台无关性在这种环境下非常有用。在这个嵌入式的世界,Java的平台无关性也有助于简化系统管理任务。
从开发者的观点看,Java能够减少开发和在多个平台上部署应用程序的成本和时间。
Java的体系结构对平台无关的支持
对平台无关性的支持,像对安全性和网络移动性的支持一样,是分布在整个Java体系结构中的,所有的组成部分——语言、class文件、API以及虚拟机,都在对平台无关性的支持方面扮演着重要角色。
1)Java平台
Java平台扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色 。
无论Java程序被部署到何处,它只需要与Java平台交互,而不需要担心底层的硬件和操作系统。因此,它就能够运行于任何拥有Java平台的计算机。
2)Java语言
Java编程语言主要通过以下方式支持Java的平台无关性:它的基本数据类型的值域和行为都是由语言自己定义的。在像C或者C++这样的语言中,基本整数类型int的值域是由它的占位宽度决定的,而它的占位宽度则由目标平台决定。
通过确保基本数据类型在所有平台上的一致性,Java语言本身为Java程序的平台无关性提供了强有力的支持。
3)Java class文件
前一章曾提到,class文件定义了一个特定于Java虚拟机的二进制格式。Java class文件可以在任何平台上创建,也可以被任何平台的Java虚拟机装入并运行。它的格式,包括多字节值的高位优先存放的约定,都有严格的定义,并且是与Java虚拟机所在平台无关的。
4)可伸缩性
Java支持平台无关性,一个方面就是它的可伸缩性。Java平台可以在各种各样不同类型的(从嵌入式设备到大型主机)计算机上实现。
尽管Java目前在Web领域和桌面领域都声名卓著,但它最初却是被期望用于嵌入式设备和消费电器领域的,而不是桌面计算机。
Java三个基础API集合,它们表现Java平台不同的伸缩性:
企业版(J2EE)
标准版(J2SE)
微型版(J2ME)
在高端,企业版的存在表明了Java平台在高端服务的可用性。在中端,标准版提供了在浏览器中启动传统applet的功能和桌面环境下的Java平台。在低端,微型版通过不同的行业子集,显示了Java平台可以向下伸缩,并改变自己以适应完全不同的消费性电器市场和嵌入式系统需求的能力。
影响平台无关性的因素
Java程序的平台无关程度依赖于多种因素,其中有些因素不在开发人员的控制范围之内,但是大多数是由开发人员来控制的。从根本上说,任何Java程序的平台无关程度都依赖于作者怎样编写它。
1)Java平台的部署
决定Java程序其平台无关性的最主要因素就是Java平台在不同的平台上被部署的程度。只有在拥有Java平台的计算机或设备上,才能运行Java程序。决定Java程序平台无关性真正程度的一个重要因素——这个因素一般不是由开发人员控制的——就是已有了可用的Java平台实现和发布版本。
2)Java平台的版本
Java平台的部署有一些复杂,因为并非所有的标准运行时库在每个Java平台上都可以用的。Java平台中保证可用的基本库集合被称为标准API。Sun把Java虚拟机1.2版以及组成标准API的那些class文件称为Java 2平台标准版。这个版本的Java平台是Java API库的最小集合,例如可以在桌上型电脑和工作站上使用。
另外,Sun定义了一些标准运行时库,它把这些库作为标准版的可选项,把它们称为标准扩展API。
在理论上,只要程序仅仅依赖于标准API的运行时库,那么程序就应该可以在有Java 2平台标准版的所有计算机上运行。但在实际上,标准API的新版本要过一段时间才能在任何地方都适用。当程序依赖于标准API最新版本的一些新特性时,有些主机可能不能运行这个程序 ,因为它们只有比较老的版本。
作为一个开发人员,你不可能控制Java平台版本的发布周期或者部署进度表,但是你可以选择自己的程序所依赖的Java平台版本。
3)本地方法
除了程序所依赖的Java平台的版本之外,决定Java程序的平台无关程度的另一个主要因素就是你是否调用了本地方法。当编写一个平台独立的Java程序时,必须遵守的一条最重要的原则就是:不要直接或间接调用不属于Java API的本地方法。
4)非标准运行时库
如果开发者侧重于平台无关性,那么就必须清楚地知道所使用的那些非标准运行时库是否调用了本地方法。没有调用本地方法的非标准库不会降低程序的平台无关性。然而如果使用了调用本地方法的运行时库中,那么就会产生和直接调用本地方法一样的结果——使得程序和平台相关了。
5)对虚拟机的依赖
在编写平台独立的Java程序时,还必须遵从两条原则,这两条原则和Java虚拟机中的某些部分有关,Java虚拟机中的某些部分可以由不同的开发商用不同的方法实现。这两条原则是:
a)不要依赖及时终结(finalization)来达到程序的正确性。(finalize())
b)不要依赖线程的优先级(thread prioritization)来达到程序的正确性。
这两条原则可以防止Java虚拟机规范中允许的垃圾收集和线程在不同实现中的变化所带来的不利影响 。
为了保证多线程Java程序的平台独立,必须依赖同步(synchronization)而不是优先级来在线程之间协调相互间的动作。
6)对用户界面的依赖
7)Java平台实现中的bug
8)测试
Java程序的平台无关性并没有达到只需在一个平台上测试它们即可的程序。
在实际情况中,在程序要运行的不同主机和不同Java平台实现上测试你的Java程序 ,是程序平台无关性的一个关键因素。
(转载请注明来源:http://zhanjia.iteye.com/blog/1841934)
相关推荐
《深入理解Java虚拟机》是Java开发者必读的经典之作,其中第三章主要探讨了Java安全方面的内容。在Java中,安全是一个至关重要的概念,因为Java的设计目标之一就是提供一种可以在不同环境中安全运行的代码机制。本章...
总的来说,"深入理解Java虚拟机读书笔记之:第3章 安全(2)"主要涵盖了Java安全体系的核心概念,包括类加载器、权限模型、安全管理器以及相关工具的使用。理解这些内容对于任何希望构建安全、可靠的Java应用程序的...
第二步,分配内存;第三步,内存空间初始化;第四步,必要的设置。对象的内存布局在 HotSpot 虚拟机中,对象在内存中存储的布局分为三块:对象头、实例数据和对齐填充。对象头包括两部分信息, 一部分用于存储对象...
### 学习深入理解Java虚拟机的前几章笔记 #### JVM内存模型 Java虚拟机(JVM)的内存模型主要分为两大类:线程共享区和线程私有区。 ##### 线程共享区 - **堆**:是所有线程共享的内存区域,在这里存放着对象实例...
读书笔记:深入理解Java虚拟机第二版_周志明读书笔记
读书笔记:深入理解Java虚拟机 JVM高级特性与最佳实践第二章笔记
读书笔记:周志明的《深入理解Java虚拟机》第二版的思维导图笔记
自己看《深入理解Java虚拟机》(第二版)所做的一些笔记。因为个人水平有限,能够理解的也只有前面几章的内容,后面的内容觉得看了也不是很理解,就没有记在里面。希望能对大家有所帮助,也希望能和大家一起进步。
综上所述,《深入Java虚拟机》这本书覆盖了Java体系结构、平台无关性、安全性、网络移动性以及JVM内部运作等多方面的内容,对于想要深入了解Java虚拟机及其工作机制的读者来说是非常有价值的参考资料。
读书笔记:Java 核心技术; 深入理解Java虚拟机JVM高级特性与最佳实践第二版
读书笔记:《深入理解Java虚拟机JVM高级特性与最佳实践第2版》学习笔记
读书笔记:深入理解Java虚拟机JVM高级特性与最佳实践第2版源代码
读书笔记:《深入理解Java虚拟机_JVM高级特性与最佳实践 第2版》
读书笔记:《深入理解Java虚拟机 JVM高级特性与最佳实践 第二版》配套练习代码
读书笔记:《深入理解Java虚拟机JVM高级特性与最佳实践最新第二版》练习案例
虚拟机学习笔记 Java 虚拟机(JVM)是 Java 语言的 runtime 环境,负责加载、验证、执行 Java 字节码。以下是 JVM 相关知识点的总结。 1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):...
读书笔记:《深入理解Java虚拟机 Jvm高级特性与最佳实践第二版》书中的示例代码供学习使用
读书笔记:《深入理解Java虚拟机 Jvm高级特性与最佳实践第二版》书中的示例代码Maven版本学习使用
《JVM:深入理解Java虚拟机》是一本深入解析Java虚拟机工作原理和技术细节的经典书籍。这份学习笔记将涵盖JVM的关键概念、架构以及它如何影响Java程序的性能。我们将探讨以下几个方面: 1. **JVM概述** Java虚拟机...
Java虚拟机(JVM)是运行Java字节码的虚拟环境,它位于操作系统之上,硬件之下,提供了一层软件抽象,使得Java程序可以在多种平台上运行而无需重新编译。JVM的核心功能包括内存管理、垃圾收集、安全性和平台独立性。...