为什么要平台无关
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)
相关推荐
NULL 博文链接:https://zhanjia.iteye.com/blog/1842242
自己看《深入理解Java虚拟机》(第二版)所做的一些笔记。因为个人水平有限,能够理解的也只有前面几章的内容,后面的内容觉得看了也不是很理解,就没有记在里面。希望能对大家有所帮助,也希望能和大家一起进步。
深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)
第2版》的阅读笔记,并对全书内容按照自己的理解进行了一定程度的整理。《深入理解 Java 虚拟机 第2版》原书主要分为了五个部分,这里仅对前四个部分进行讲解,第五部分(高效并发)整合进了另一个 repo: 中。 其中...
本repository为《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记,因为第一章主要讲的是Java的发展历史,这里就不做笔记,直接从第2章的"Java内存区域与内存溢出异常"讲起。 第二部分 自动内存...
深入理解java虚拟机:jvm高级特性与最佳实践源码现代操作系统,第 4 版 作者:Andrew S. Tanenbaum, Herbert Bos ** Notes by Henry Cooksley ** 1 介绍 操作系统、外壳、GUI、图形用户界面、内核模式、主管模式、...
Java虚拟机(第二版) 实战JAVA虚拟机JVM故障诊断与性能优化 HotSpot实战 Java虚拟机精讲 Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版) 鸟哥Linux私房菜 MySQL技术内幕_InnoDB存储引擎_第2版 高性能...
深入理解Java虚拟机 第二版,周志明 码出高效-Java开发手册, 阿里 孤尽,鸣莎 Java 并发编程实战 自己动手写Java虚拟机,张秀宏 Spring 技术内幕:深入解析 Spring架构与设计原理(第2版) 数据库 MySQL技术内幕:...
深入java虚拟机光盘资源Ubin 计划第 2 阶段 - 法定人数 该存储库包含 Project Ubin Phase 2 中 Quorum 原型的源代码和测试脚本。 Ubin Phase 2 是一个协作设计和快速原型设计项目,探索使用分布式账本技术 (DLT) ...
JAVA--达内培训笔记】 1、Java之父Golsling 1995年5月23日 Java诞生 1998年12月 1.2版本 Java2 J2SE J2EE J2ME 2004年12月 1.5版本(5.0) Java JavaSE JavaEE JavaME 2、Java SE --- Java标准平台 Java EE -...
Notebook 欢迎你来到我的笔记本 本github中写的都是笔记记录,其中内容大部分来源于网上优秀博文或者经典书籍,因此不推荐阅读我的笔记...第2章:并发三大特性 第3章:抽象队列同步器 第4章:并发与集合总结 第5章:Has
Structure /src/main/java ┬ ├ annotation ├ callback ├ concurrent Java多... ├ jvm 深入理解Java虚拟机:JVM高级特性与最佳实践 ├ lambda JAVA 8实战 ├ netty Netty权威指南 ├ oop ├ recursion
JVM内在结构的图解文档,visio格式 1.编译过程 2.内存结构 3.对象与类的结构 4.类结构信息 5.对象建立过程 6.收集器 7.方法调用 8.垃圾回收 9.JIT 10.指令 11.线程
018最新JAVA架构师培训视频教程(附笔记、源码、视频教程 全网盘链接...三、JAVA虚拟机 四、Linux部分 五、数据库设计与优化 六、互联网中间件架构设计 七、互联网框架应用 八、互联网分布式综合项目实战(转载)
Java 的学习笔记和整理的知识点,包含Java语言基础、Java服务端方向的框架、设计模式、计算机网络、算法、Java 虚拟机和数据库等多个方面的内容。想了解前端的内容参考,Android相关的内容参考。 目录结构 语言基础...
第2章:java内存模型和内存溢出异常 1.运行时数据区域 1.程序计数器:线程私有 2.java虚拟机栈:线程私有,虚拟机栈描述的是java方法执行的内存模型:每个方法在执行的时候都会创建一个栈帧,存储局部变量表、操作数...
Java虚拟机相关,内存模型,类加载机制,JVM性能解析等 零散的文章 数据结构与算法 算法的度量,基础数据结构,链表,二叉树,B树,图论,深度和广度优先算法,排序,查找等 设计模式 常用设计模式的Java语言描述 ...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
第二部分:大数据处理 第三部分:数据结果可视化 大作业内容介绍: 主要课题:针对北京2013-2017五年内污染物浓度数据进行大数据处理以及结果可视化 包括:数据清洗后的数据集、大作业报告(报告内附有源码)、结果...
SCALA程序设计-JAVA虚拟机多核编程实战5.pdf JavaWeb MyBatis技术.pdf Spring MVC学习指南(第2版).pdf 看透springMvc源代码分析与实践.pdf 深入浅出MyBatis技术原理与实战.pdf 大数据 Hadoop权威指南大数据的存储...