Java 平台透析
一、什么是Java 平台?
现在,计算机世界里存在多种操作平台,在微软的Windows,Macintosh,OS/2,Unix以及NetWare等众多的操作平台中,软件必须在每个平台上单独进行编译运行。在一个平台上运行的一个应用程序的二进制文件就不可能运行于另一个别的平台之上,因为这个二进制文件是基于特殊的机器编码的。
Java平台是一种新型的软件平台,可用来在网络计算机系统中发布和运行高交互性、动态的、安全的Java小程序(applets)和应用程序(applications)。但是,另Java平台显得比其他操作品平台有优势的是它位于它们之上,将应用程序编译成字节码,这种编码机制并不特定于任何一种机器编码,而是为一种所谓的Java虚拟机产生机器指令集。用Java编写的程序可以编译成字节码文件,这种文件可以在任何具有Java平台的底层操作系统上运行。也就是说,同一个编译文件可以运行于任何运行Java平台的操作系统上。因为Java平台的核心是Java虚拟机机制,所以这种可移植性就变得可能了。
尽管每一种底层平台对于Java虚拟机都有它自己的实现方法,但是现在只有一种Java虚拟机规范。正因为如此,Java平台才能够为运行于任何硬件上的applets和applications提供一种标准的、统一的编程接口。因此,Java平台对Internet来说是非常理想的解决方案,在Internet上,一个程序应该具有可以运行于世界上任何一台计算机上的能力。Java平台的被设计成能够提供这样一种能力:“编译一次,就可以运行于任何地方”(“write once,Run anywhere”)。
开发人员利用Java语言编写强大的Java应用程序源代码。他们在Java平台上而不是在底层系统中编译一次。Java源代码编译成一种中间的、可移植的字节码形式,然后就可以运行于任何有Java平台的地方。
开发人员可以用Java语言编写面向对象的、多线程的、动态链接的应用程序。Java平台内置了安全、违例处理以及自动垃圾回收机制。在将Java字节码转换成机器语言时,即时编译器可以加速运行速度。为了获得更快的速度或者其他特殊的功能,开发人员也可以在Java语言中编写或从Java语言外调用本地方法——用C、C++或是其他语言编写的,在一个特殊的底层操作系统中编译的方法。
Java语言是进入Java平台的一个通道。用Java语言编写并编译的程序能够运行在Java平台上。
Java平台具有两个基本的组成部分:
• Java虚拟机
• Java应用程序接口(Java API)
他们将在后续章节中详细叙述。这两部分的结合,为终端用户开发Internet和Intranet应用程序提供了运行环境。
二、Java 基本平台
Java基本平台是一种开发人员可以进行安全的应用的微型平台,目前用来运行高性能的Java applets和application。这种平台应用于网络计算机、台式机和工作站(下一部分描述为更小型的系统提供的平台)。它内部包含一个与前面所提到的一样的Java虚拟机,但却拥有一个运行基本的Java小程序applets和应用程序(applications)所必需的小型Java API(应用程序接口)。众所周知这套小型API是Java applet API或者是基本JAVA应用程序API。在这一套小型API基础之上进行编码工作的开发人员对于这一点是可以放心的,就是在此基础之上的开发的程序同样可以运行在任何地方,而不需要其他额外的类库的支持。
特定的具有Java平台操作许可的人已经同意将基本的Java API包含在他们的个人的Java平台应用实现中。随着更多地Java类库开发,Java基础平台将会不断增长,这些增加的类库将以适时的形式添加到Java基础平台中,并呈现于每一个许可用户的操作系统上。
另外一套被称作标准扩展API的应用程序接口(APIs),是由JavaSoft以及其他引领行业发展的主要公司一起来制定,用以扩展平台的基本功能。随着时间的逝去,一些标准扩展API的补充将会添加到Java基础平台中。
三、内嵌Java平台
内嵌Java平台的目标是针对一些消费设备,这些诸如置顶盒、打印机、复印机和手机等消费设备与网络计算机相比,需要更少的资源和更多的个性化功能。这些设备自身具有存储空间少、无显示画面或是不能连接到网络等限制。
用于此平台的应用程序接口(API)叫做Java嵌入式API,它是最小的一套Java API,可以用于并运行在要求较少功能的嵌入设备上。由于这个平台仍处于开发当中,所以这套API还没有达到成为一个标准的程度。因此,该API仍没有完成制定,但大体上它可能是由java.lang和java.util这两个包组成。为一个特殊的设备所编写的一个Java应用程序,可以运行于大部分相似的专用设备上。
四、Java平台的好处
Java平台有益于终端用户和开发人员,支持人员如下所示:
终端用户的获益
现在,Java平台通过即时软件接入,在环球网上提供生动、交互的内容。Java应用程序在所有操作系统中都可以立即运行,在此基础上,已经把用户从不得不选择操作系统的工作中解放出来。更小型,价格更低廉的专用系统最终都将会有他们自己的应用程序。
开发者的获益
Java语言是一个小型的、易学的语言系统,并伴有一套越来越全面的APIs。开发人员可以“编译一次,运行于任何地方”,这一点为Java语言提供了凌驾于其他语言之上的巨大的市场优势。而且,在所有操作系统上的Java开发环境,只是将文件编译成单一的二进制格式。现在,开发人员可以在一个平台上开发,保存,在同一个平台上发布,然后就可以运行于所有平台,而不用分别在多种平台上开发,再在每一种平台上发布。Java的这种“编译一次,运行于任何地方”的能力,为一些开发人员把Java作为C或C++的替代品,进而转向Java提供了充足的理由,即使是用来便以独立的、非网络的应用程序。
而且,通过分布的、可重用的组建建立应用程序,可以使开发人员集中精力处理那些新的东西,从而大大降低了开发成本。开发人员可以通过网络进行分布式开发,而不必在有隔间的专用于软件开发的房间中完成工作。
五、Java平台内部探秘
Java平台分成两个主要的部分:Java虚拟机和Java APIs,如图2所示:
• Java虚拟机——Java虚拟机是一个“软”计算机,可以在软件或硬件上实现。它是一个抽象的机器,被设计用来在已有的处理器之前处理Java程序。接口和适配器的端口可以使它很容易的接入到新的操作系统中,而不必进行完全重新编写。
• Java API——Java API为Applets和应用程序提供了标准的接口,不管它们运行在何种操作系统之上。Java API是应用程序开发环境的基本框架。API规定了一套基本接口,开发人员将利用这些接口在不断增多的主要领域中进行Java应用程序编程。
——Java基本API提供了非常基础的语言、应用程序、I/O、网络、GUI以及Applets服务;已经许可Java的OS公司已经同意在他们任何部署Java平台的地方都将包括上述功能。
——Java标准扩展API扩展了Java在基本API之外的一些功能。这些扩展中的一些将最终融合到Java基本API之中。其他的一些非标准的扩展APIs可以有Applets,应用程序或是底层操作系统提供。随着每一个新的扩展API规范的发布,在它被最终确定之前,整个行业都将对它进行审定并给出反馈。
在上图中,Java基础平台就是以黑色显示的部分,包括那些被适配器(Adapter)标识的部分。Java API包括Java基本API和Java标准扩展API。类是API的实现。Java虚拟机是整个平台的核心。接口的端口位于Java虚拟机和操作系统或浏览器之间。接口的端口拥有两部分,一部分独立于平台(如图中黑色部分所示);另一部分依赖于平台,如图中适配器所示。操作系统和Java操作系统提供了窗口、文档和网络功能。不同的机器可以通过网络互连,如图中所示。
Java API框架是开放的和可扩展的。每一个接口的规范都是由每一领域的整个行业的专家们共同制定的。新制定的规范将会公开发布并进行面向整个行业的修改验证。API规范对于JavaSoft和整个行业内的其他公司来说,都是可以实现的。在当今快速发展的环境中,Java API框架允许对于它的创新发展的存在,就行Java平台能够被扩展一样。
API被以分组或成套的方式组织的。每一套API都可以作为一个或更多的包(命名空间)来处理。每一个包同一些类或接口组织在一起定义了一套相关的域、构造器和方法。
六、Java 虚拟机
Java虚拟机是程序与底层操作系统和硬件无关的关键——它是一个平台,将Java Applets和应用程序与底层操作系统相分离。通过虚拟机接入到浏览器或者其他操作系统是非常容易的。而且,虚拟机定义了一种与机器无关的被称为类的二进制文件格式。这种格式以字节码的形式存储着用于操作虚拟计算机的指令集。代表任何Java语言程序的字节码本质上是一个象征,它表明方法的索引与偏移量并不是一个常数值,相反的,是被作为一个字符名字象征性的给出。方法首次被调用时,首先是在类文件中通过方法的名字寻找它,为了在以后的查找中更加快速的找到该方法,它的偏移量的数值大小便在此时确定出来。因此,任何新的或基本的方法可以在运行的晚些时候被引入到类框架中的任何地方。它将能够在不打乱原有编码的情况下,象征性的正确的被引入。字节码是程序的高级表示形式,以至于程序优化和机器码的产生(通过即时编译器)都可以在这个水平上来完成。而且,由于在Java平台的寻址空间中虚拟机将变量存储在堆栈中,因此可以在虚拟机的内部进行垃圾回收处理。
七、Java编译和运行环境
Java语言开发环境包括编译时和运行时环境两部分,如图3所示:
运行时环境代表着Java平台。开发人员编写Java源代码(.java文件),然后将之编译成字节码(.class文件)。这些字节码就是操作Java虚拟机的指令集。为了创建一个applet,开发人员将这些字节码文件存储在HTTP服务器上,在web页中加入这样一个标签:<applet code=filename>,这个标签就是指向字节码文件的入口。当一个终端用户访问这个页面的时候,<applet>标签就会导致这个字节码文件从服务器上通过网络传递到用户的Java平台上的浏览器中。最后,字节码被装入内存,在进入虚拟机之前进行安全检查。一旦进入到虚拟机,字节码就会被解释器解释执行,或者是被即时(just-in-time,JIT)代码发生器,通常称为即时编译器,有选择的转换成机器码执行。解释器和JIT编译器在运行时系统中根据情况进行操作(线程、存储以及其他系统源代码)。Java类库中的任何类文件在applet需要时动态的调入。