java代码移植性叙述 java自研代码移植

java的可移植性是什么意思?移植到哪里去?java先编译成字节码(中间码),为什么需要这个中间码呢?
如果java直接编译成系统能识的二进制码,可能一个标识在windows下是1100,而linux下是1001 , 这样java在windows下编译后无法在linux运行 。
所以java先编译成字节码(中间码),由JVM(java虚拟机来解释执行),而这个JVM对于主流的操作系统都有相应的版本 , 目的就是将 统一的中间码 编译成对应操作系统识的二进制码,然后执行 。
所以不论你在什么系统中编译的java,得到的都是统一的字节码(中间码)
在windows中需要有windows版本的JVM来执行,要是到了linux下,只要下载linux版本的JVM来执行就可以了
这就是java的跨平台,可移植性
简述Java具有可移植性的原因java程序编译后不是可执行代码
需要经过java的环境再次编译成机器可执行的代码
这样就可以在不同的平台搭建适合各自平台的java环境
于是你编译好的java程序就可以移植到任何有java环境的平台上去了
关于Java的可移植性因为java有一个JVM(Java Virtual Machine)java虚拟机 , 源程序*.java被编译成字节码文件 , 字节码是与平台无关的 , 是面向jvm编写的,而jvm又有自己的一套指令系统,在不同的平台上jvm的指令也是不一样的,也就是说不同操作平台有自己的jvm但是jvm向上的字节码接口是与平台无关的,jvm接口向下是与硬件有关的,jvm是个中间件,这样只要有字节码和jvm,不管在任何平台都可以运行java程序 。全靠的是jvm虚拟机
希望对你能有所帮助 。
简述java程序的可移植性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代码移植性叙述 java自研代码移植】JAVA采用了提供一套与平台无关的库函数(包括AWT、UTIL、LANG等等)的方法来解决这个问题 。就象JVM提供了一个虚拟的CPU一样,JAVA库函数提供了一个虚拟的GUI环境 。JAVA程序仅对JAVA库函数提出调用,而库函数对操作系统功能的调用由各不同的虚拟机来完成 。JAVA也在它的OS/GUI库中使用了一种“罕见名称符”(least-commom-denominator)来提供对某种特定操作系统的功能调用,即此功能只在特定环境下生效而在其它操作系统下则被忽略 。这样做的好处在于可以针对某操作系统生成拥有人们熟悉的界面的应用程序而同时此程序又能在其它系统下运行 。缺点则是系统中的某些功能调用有很强的依赖性因而在JAVA的虚拟OS/API中难以实现 。遇到这种情况,程序员就只能写不可移植的程序了 。
总之,JAVA在可移植性方面的特点使它在Internet上具有广泛的应用前景 。同时它本身具有的防病毒的能力也使它在需要高可靠性的应用中占有一席之地 。
java代码移植性叙述的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java自研代码移植、java代码移植性叙述的信息别忘了在本站进行查找喔 。

    推荐阅读