关于JAVA的可移植性

关于JAVA 的可移植性

阅读次数: 17次 发布时间: 2011-01-07 09:53:10发布人: 香芹

来源: 网络转载

1.JAVA 作为一种编程语言:源代码可移植性

作为一种编程语言,JAVA 提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA 程序,不论它运行在何种CPU 、操作系统或JAVA 编译器上,都将产生同样的结果。这并不是一个新的概念。人们使用C 、C++也可以产生同样的效果。但是使用C 或C++编程人们可以有太多的选择,在许多细节上它都没有严格定义,如:未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计,否则这种可移植性只能是一种理论上的设想而不能形成实践。总之,尽管C 和C++有严密的语法定义,它们的语意(symantics)定义还不是标准的。这种语意上的不统一使得同一段程序在不同的系统环境下会产生不同的结果。有时即使系统情况完全相同而仅仅由于编译器的设置不同也会产生令人意想不到的结果。而JAVA 就不同了。它定义了严密的语意结构,而使编译器不承担这方面的工作。另外,JAVA 对程序的行为的定义也比C 和C++严格,如:它提供了内存自动回收功能(GarbageCollection),使程序不能访问越界内存;它对未初始化的变量提供确定值等等。它的这些特性能够减小在不同平台上运行的JAVA 程序之间的差异,也使得JAVA 具有即使没有JAVA 虚拟机的存在的情况下比C 和C++更好的平台无关性。然而,这些特点也有它不利的一面。JAVA 设想运行于具有32位字节长度且每字节为8位的计算机上,这就使得那些8位字长的计算机和一些巨型机不能有效的运行JAVA 程序。在这样的平台上就只能运行那些可移植的C 和C++程序了。

2.JAVA 作为一个虚拟机:CPU 可移植性

大多数编译器产生的目标代码只能运行在一种CPU 上(如Intel 的x86系列) ,即使那些能支持多种CPU 的编译器也不能同时产生适合多种CPU 的目标代码。如果你需要在三种CPU(如x86、SPARC 和MIPS) 上运行同一程序, 就必须编译三次。

但JAVA 编译器就不同了。JAVA 编译器产生的目标代码(J-Code)是针对一种并不存在的CPU –JAVA 虚拟机(JAVAVirtualMachine),而不是某一实际的CPU 。JAVA 虚拟机能掩盖不同CPU 之间的差别,使J-Code 能运行于任何具有JAVA 虚拟机的机器上。

虚拟机的概念并不是JAVA 所特有的:加州大学几年前就提出了PASCAL 虚拟机的概念;广泛用于Unix 服务器的Perl 脚本也是产生与机器无关的中间代码用于执行。但针对Internet 应用而设计的JAVA 虚拟机的特别之处在于它能产生安全的不受病毒威胁的目标代码。正是由于Internet 对安全特性的特别要求才使得JVM 能够迅速被人们接受。当今主流的操作系统如OS/2、MacOS 、Windows95/NT都已经或很快提供对J-Code 的支持。

作为一种虚拟的CPU ,JAVA 虚拟机对于源代码(SourceCode)来说是独立的。我们不仅可以用JAVA 语言来生成J-Code ,也可以用Ada95来生成。事实上,已经有了针对若干种源代码的J-Code 编译器,包括Basic 、

Lisp 和Forth 。源代码一经转换成J-Code 以后,JAVA 虚拟机就能够执行而不区分它是由哪种源代码生成的。这样做的结果就是CPU 可移植性。

将源程序编译为J-Code 的好处在于可运行于各种机器上,而缺点是它不如本机代码运行的速度快。

3.JAVA 作为一种虚拟的操作系统(OS)和图形用户界面(GUI):操作系统可移植性

即使经过重新编译,大多数的用C 和C++编写的Windows 程序也不能在Unix 或Macintosh 系统上运行。这是为什么呢?因为程序员在编写Windows 程序时使用了大量的WindowsAPI 和中断调用,而Windows 程序对系统功能的调用与Unix 和Macintosh 程序有很大的差别,所以除非将全套WindowsAPI 移植到其它操作系统上,否则重编译的程序仍不能运行。

JAVA 采用了提供一套与平台无关的库函数(包括AWT 、UTIL 、LANG 等等) 的方法来解决这个问题。就象JVM 提供了一个虚拟的CPU 一样,JAVA 库函数提供了一个虚拟的GUI 环境。JAVA 程序仅对JAVA 库函数提出调用,而库函数对操作系统功能的调用由各不同的虚拟机来完成。JAVA 也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator) 来提供对某种特定操作系统的功能调用,即此功能只在特定环境下生效而在其它操作系统下则被忽略。这样做的好处在于可以针对某操作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA 的虚拟OS/API中难以实现。遇到这种情况,程序员就只能写不可移植的程序了。

总之,JAVA 在可移植性方面的特点使它在Internet 上具有广泛的应用前景。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地。

关于JAVA 的可移植性

阅读次数: 17次 发布时间: 2011-01-07 09:53:10发布人: 香芹

来源: 网络转载

1.JAVA 作为一种编程语言:源代码可移植性

作为一种编程语言,JAVA 提供了一种最简单同时也是人们最熟悉的可移植性–源代码移植。这意味着任意一个JAVA 程序,不论它运行在何种CPU 、操作系统或JAVA 编译器上,都将产生同样的结果。这并不是一个新的概念。人们使用C 、C++也可以产生同样的效果。但是使用C 或C++编程人们可以有太多的选择,在许多细节上它都没有严格定义,如:未初始化变量的值、对已释放的内存的存取、浮点运算的尾数值等等。所以除非你一开始就严格按照系统无关的概念来进行设计,否则这种可移植性只能是一种理论上的设想而不能形成实践。总之,尽管C 和C++有严密的语法定义,它们的语意(symantics)定义还不是标准的。这种语意上的不统一使得同一段程序在不同的系统环境下会产生不同的结果。有时即使系统情况完全相同而仅仅由于编译器的设置不同也会产生令人意想不到的结果。而JAVA 就不同了。它定义了严密的语意结构,而使编译器不承担这方面的工作。另外,JAVA 对程序的行为的定义也比C 和C++严格,如:它提供了内存自动回收功能(GarbageCollection),使程序不能访问越界内存;它对未初始化的变量提供确定值等等。它的这些特性能够减小在不同平台上运行的JAVA 程序之间的差异,也使得JAVA 具有即使没有JAVA 虚拟机的存在的情况下比C 和C++更好的平台无关性。然而,这些特点也有它不利的一面。JAVA 设想运行于具有32位字节长度且每字节为8位的计算机上,这就使得那些8位字长的计算机和一些巨型机不能有效的运行JAVA 程序。在这样的平台上就只能运行那些可移植的C 和C++程序了。

2.JAVA 作为一个虚拟机:CPU 可移植性

大多数编译器产生的目标代码只能运行在一种CPU 上(如Intel 的x86系列) ,即使那些能支持多种CPU 的编译器也不能同时产生适合多种CPU 的目标代码。如果你需要在三种CPU(如x86、SPARC 和MIPS) 上运行同一程序, 就必须编译三次。

但JAVA 编译器就不同了。JAVA 编译器产生的目标代码(J-Code)是针对一种并不存在的CPU –JAVA 虚拟机(JAVAVirtualMachine),而不是某一实际的CPU 。JAVA 虚拟机能掩盖不同CPU 之间的差别,使J-Code 能运行于任何具有JAVA 虚拟机的机器上。

虚拟机的概念并不是JAVA 所特有的:加州大学几年前就提出了PASCAL 虚拟机的概念;广泛用于Unix 服务器的Perl 脚本也是产生与机器无关的中间代码用于执行。但针对Internet 应用而设计的JAVA 虚拟机的特别之处在于它能产生安全的不受病毒威胁的目标代码。正是由于Internet 对安全特性的特别要求才使得JVM 能够迅速被人们接受。当今主流的操作系统如OS/2、MacOS 、Windows95/NT都已经或很快提供对J-Code 的支持。

作为一种虚拟的CPU ,JAVA 虚拟机对于源代码(SourceCode)来说是独立的。我们不仅可以用JAVA 语言来生成J-Code ,也可以用Ada95来生成。事实上,已经有了针对若干种源代码的J-Code 编译器,包括Basic 、

Lisp 和Forth 。源代码一经转换成J-Code 以后,JAVA 虚拟机就能够执行而不区分它是由哪种源代码生成的。这样做的结果就是CPU 可移植性。

将源程序编译为J-Code 的好处在于可运行于各种机器上,而缺点是它不如本机代码运行的速度快。

3.JAVA 作为一种虚拟的操作系统(OS)和图形用户界面(GUI):操作系统可移植性

即使经过重新编译,大多数的用C 和C++编写的Windows 程序也不能在Unix 或Macintosh 系统上运行。这是为什么呢?因为程序员在编写Windows 程序时使用了大量的WindowsAPI 和中断调用,而Windows 程序对系统功能的调用与Unix 和Macintosh 程序有很大的差别,所以除非将全套WindowsAPI 移植到其它操作系统上,否则重编译的程序仍不能运行。

JAVA 采用了提供一套与平台无关的库函数(包括AWT 、UTIL 、LANG 等等) 的方法来解决这个问题。就象JVM 提供了一个虚拟的CPU 一样,JAVA 库函数提供了一个虚拟的GUI 环境。JAVA 程序仅对JAVA 库函数提出调用,而库函数对操作系统功能的调用由各不同的虚拟机来完成。JAVA 也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator) 来提供对某种特定操作系统的功能调用,即此功能只在特定环境下生效而在其它操作系统下则被忽略。这样做的好处在于可以针对某操作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA 的虚拟OS/API中难以实现。遇到这种情况,程序员就只能写不可移植的程序了。

总之,JAVA 在可移植性方面的特点使它在Internet 上具有广泛的应用前景。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地。


相关内容

  • 科技文献翻译
  • JAVA介绍 作者:Martin Ngobye. 出处:Computing Static Slice for Java Programs Java是被设计用来解决在上下文分布式的异构网络中应用程序开发的问题.在这些复杂问题中,首要的是安全发布应用程序.消耗最小的系统资源.可以在任何硬件和软件平台上运 ...

  • 银行测试面试题库
  • 1. 答案题目正确性为80%以上. 单选题 1. 若类A继承B,下列哪个写法是正确的是(B) publicclassA,B{} publicclassAextendsB{} publicclassAB{} publicclassAextendB{} 2. 如果自动化过程中出现两个一样的Brower对 ...

  • 各种编程语言的比较
  • John Hattan是位于德克萨斯州的Watauga里最大的软件公司 - Code Zone的主要负责人.如果你对他的文章有什么看法,请写信给他. 这是每个游戏编程FAQ里都有的问题.这个问题每星期都会在游戏开发论坛上被问上好几次.这是个很好的问题,但是,没人能给出简单的答案.在某些应用程序中,总 ...

  • 各种编程语言的特点
  • 各种编程语言的特点.txt Pascal语言: Pascal是一种计算机通用的高级程序设计语言,由瑞士Niklaus Wirth教授六十年代末设计并创立的. Pascal的主要特点有:严格的结构化形式.丰富完备的数据类型.运行效率高.查错能力强等特点. 由于上述特点,Pascal可以方便用于描述各种 ...

  • JAVA需求分析报告
  • 基于C/S结构的JAVA聊天室系统 需求分析说明书 [V1.0(版本号)] 拟 制 人______________________ 审 核 人______________________ 批 准 人______________________ [二零零六年四月十二日] 需求说明书 1.引言 1.1编 ...

  • 课外科技活动
  • OSGI (面向Java 的动态模型系统) OSGi(Open Service Gateway Initiative)技术是Java 动态化模块化系统的一系列规范.OSGi 一方面指维护OSGi 规范的OSGI 官方联盟,另一方面指的是该组织维护的基于Java 语言的服务(业务)规范.简单来说,OS ...

  • 7程序和算法简介
  • 1.程序和程序设计语言(概念.结构) 现预期目的而进行操作的一系列语句和指令. 程序一个程序应该包括以下两方面的内容. 1 2实际上,一个程序除了以上两个主要的要素外,还应当采用程序设计方法进行设计,并 是一个程序员所应具备的知识.程序的结构有以下三种: 语句和B 语句是依次执行的,只有在执行完 A ...

  • 人才市场管理系统
  • 摘 要 本论文阐述的是人才市场管理信息系统以及设计的思想过程,通过对人才市场管理现状进行详细系统的调查和研究,并经过周密的需求分析,得到了原始的数据流.通过对系统的分析和理解,根据实际情况开发出一个较为完善的人才市场管理信息系统.而且还对系统的安全性等做了详细的论述. 本系统的前端开发工具是: HT ...

  • 软件项目设计技术报告
  • <软件项目设计> 技术报告 专业班级 小组人员 组 长 指导教师 设计题目 场地预约系统 计算机学院 2013 年 1 月 地预约系统的设计与实现 摘 要 体育城场地预约系统是一个B/S模式下的体育城场地预约平台.系统以Web 界面实现与用户交互,为用户提供信息并接受用户提出的需求信息, ...