Java的平台独立性
一、为什么要平台独立
Java是一门为了网络环境而开发的语言,这要求Java程序的二进制形式可以在多种不同的平台上无差别的执行。
在开发者这一边,是用Java开发就可以获得平台独立性,这使自己的软件多了很多潜在的客户。
二、Java体系对Java平台独立性的支持
1、Java平台(The Java Platform)
2、Java语言
3、Class文件
4、可伸缩性
为了实现这种目标,Java平台必须能够紧凑的实现在那种嵌入式设备上,比如那些只有很小可寻址内存,没有硬盘,没有显示设备的机器环境。为此,Java 平台有一些针对特殊嵌入式设备的实现,比如:the Java Embedded Platform、the Java Personal Platform、the Java Card Platform。在这种环境下往往只现实Java平台的子集。
但是这种实现并不限制在个人电脑(personal computers)、工作站(workstations)、大型主机(mainframes)上Java平台的实现。
三、影响平台独立的因素
1、Java平台的配置
2、Java平台的不同版本和不同版本号(The Java Platform Version and Edition)
同一Java平台的各个版本之间也没有实现兼容,为了更好得提供服务,Java平台的发展过程中,不停的会有一些API被删除和添加,这导致Java的各个平台之间不能够兼容。
3、本地方法
但是,当你不考虑平台独立时,使用本地方法还是可行的。一般来说在三种情况下应该直接调用本地方法:
1)、当需要访问Java API无法访问的底层系统资源时;
2)、当要重用遗留系统中的非Java库时;
3)、为了提升系统的执行速度,本地化一些核心代码时。
如果你又想使用本地化代码,又想实现平台独立性时,就必须手工在多个平台上实现本地化代码。
4、非标准类库
5、Java虚拟机的相关性
1)、不要依赖于Java的finalization方法来实现强制垃圾收集;
2)、不要依赖于Java的线程优先级来实现程序的同步。
所有Java虚拟机必须好有垃圾收集堆,但是Java虚拟机的不同实现能够使用不同的垃圾收集技术。这种柔韧性使得不同的Java虚拟机意味着一个 Java程序中的对象可能会在不同被“垃圾收集”。垃圾收集实现的不同关键就是finalizers方法,这个在对象被垃圾收集之前调用的方法。这个方法 可能会被不同Java虚拟机的实现在不同的地方调用。如果你使用finalizers方法来释放资源,可能在一些Java虚拟机的实现被正常调用,而在另 一些可能会在垃圾收集之前用完所有的资源。
另一个可能变化的就是Java的线程优先级。Java虚拟机必须实现所有有高优先级的线程能够获得一些CPU时间,但也必须保证那些低优先级的线程必须在 高优先级的线程堵塞时能够运行。但是这些并没有阻止低优先级的线程在高优先级线程没有堵塞时运行。这意味着即使高优先级的线程没有被堵塞,低优先级的线程 也会获得CPU时间。如果你使用线程优先级来实现协调线程同步,可能在一些虚拟机上能够正常运行而在其他的虚拟机上可能不能正常执行。为了保证Java的 多线程程序能够实现平台独立性,你必须使用同步(synchronization)而不是线程优先级来协调线程。
6、用户界面的相关性
7、Java平台实现中的bug
8、测试
四、平台独立的七个步骤
1、选择一些想要发布程序的目标机器(target hosts)
2、选择一个你认为适合你所发布用的Java平台,并在这个平台上开发、执行你的程序
3、为每个目标机器选择一些你的程序可能会被发布到的Java平台(target runtimes)
4、通过标准运行库的Java API来访问本地资源,不要通过本地方法或者使用本地方法的第三方运行库。
5、不要让你的程序依赖于Java平台垃圾收集及时调用finalization方法,不要依赖于Java的线程优先级来协调多线程。
6、设计一个所有能在目标机器上能够正常工作的用户界面
7、在所有的可能运行平台和机器上测试你的程序
如果你愿意,你可以让你的程序成为纯正的Java程序(100% Pure Java)。你可以通过运行Sun免费提供的认证工具(100% Pure verification tools)来完成认证。这个程序可以让你不运行自己的程序来判断程序的“纯正度”。如果你通过了认证,你就可以使用Sun的纯正Java图标(100% Pure Java coffee cup icon)。
但是通过认证,并不意味你的程序已经完全实现了平台独立性,这个认证只是判断你的程序是否仅仅依赖于Java核心类库。但是,在你实现平台独立性的过程中,执行这个认证还是值得的。
五、平台独立的策略
Java平台的供应商可以提供自己的Java平台的扩展,这些扩展可能是依赖于特定平台的,但是所有的Java平台的实现必须实现Java的核心组件。如 果你只使用核心组件来实现你的程序,你就可能让你的程序“run anywhere”,但是你必定受到最小公约数问题(lowest-common-denominator problem)的苦恼。但是如果你使用了特定Java平台扩展的类库,你就可能最大限度的使用本地环境的优势。那一种更适合,就需要开发者自己去抉择。
Java的平台独立性相关推荐
- 基于Java EE平台项目管理系统的设计与实现(论文+PPT+源码)
分类号_______________ 密级________________ UDC _______________ 学号 毕业设计(论文) 论文题目 基于Java EE平台项目管理系统的设计与实现 T ...
- Rails工作效率和Java运行平台
Rails工作效率和Java运行平台 --读<JRuby实战>(Practical JRuby on Rails Web 2.0 Projects) 有感 在Web软件开发方面,Rails ...
- 最新的Java SE平台和JDK版本发布计划
最近发布的Java 9带来了诸多重大变更,包括一个全新的版本发布计划.该发布计划基于JEP 223,主要用于Java平台未来的版本发布. \\ 不过在新版本计划发布之后,Java首席架构师Mark R ...
- solaris安装java_Solaris是出色的Java开发平台的原因
solaris安装java 几天前,我发布了" OpenSolaris的死亡:为Java开发人员选择操作系统 ",其中我说Solaris是Java开发人员的绝佳平台. 这篇文章的重 ...
- Solaris是出色的Java开发平台的原因
几天前,我发布了" OpenSolaris的死亡:为Java开发人员选择操作系统 ",其中我说Solaris是Java开发人员的绝佳平台. 这篇文章的重点只是想知道自OpenSol ...
- java开发平台普元_java开发平台的两种实现模式
从目前国内主流的java开发平台看,主要有两种实现模式:引擎模式及生成源代码模式.引擎模式比较有代表性的是华丹平台(https://www.huadaninfo.com),生成源代码模式比较有名是的普 ...
- amd cpu不能在cmd环境下运行java代码_「我们一起学Java02」JDK、JRE、JVM简介,Java开发平台的搭建...
Hello,各位头条的读者大家好!接下来一段时间小编将和大家一起学习Java,"我们一起学Java"专题将会持续更新,欢迎大家关注.这里是"我们一起学Java" ...
- java与平台无关的原因
Java字节码 Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行.解释是通过Java虚拟机来执行的. java要运行要经过如下步骤 ① J ...
- java解析ceb文件_什么是Java的平台无关性
Hello,各位小伙伴是不是对于Java面试很头疼呢? 我以前跟你们一样也是如此,今天我给大家分享一些经验与技巧. 首先回顾一下,上一篇文章,我们说到了对JAVA的理解,那么这一节课开始我们将重点分析 ...
最新文章
- Python基础知识(第七天)
- 一种求任意多边形内部水平方向似最大矩形的算法
- 【数据结构与算法】之深入解析“买卖股票的最好时机含手续费”的求解思路与算法示例
- 利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控
- 三年级神奇电子计算机教案,人教版小学三年级下册信息技术教案
- 配置设备作为DHCP 服务器(基于全局地址池)
- sklearn学习5-----模型评估(1) 分类度量
- CPU cache侧信道攻击
- pod容器发生OOM错误(by quqi99)
- C++知识小屋(3):用虚基类构造仙法·风遁·螺旋手里剑
- Failed to introspect Class FeignClientFactoryBean 异常排查
- 计算机表格里的隐藏怎么弄出来怎么办,电脑表格隐藏不见了怎么办
- 国产电动汽车与特斯拉差多少?
- 洛谷P2619 [国家集训队]Tree I 题解
- 计算机无法准确计算浮点数,浮点数计算异常原因(转)
- java中finally语句是否一定会被执行
- “校园安全+教务管理+家校互动+教育大数据”创造安全的家校生态环境
- 遇见未来的自己——2021篇
- android 复制,粘贴
- 我的.NET书架 (进阶篇)