Java 体系结构介绍

1.      为什么使用Java

因为Java是为网络而设计的,它可以保证安全的、健壮的且和平台无关的程序通过网络传播,在很多不同的计算机和设备上运行。

2.      网络带来的挑战和机遇

软件开发者面临的挑战之一是这种逐渐增长的以网络为核心的硬件环境,其包含的设备越来越广泛,用Java编写的平台无关的程序会更容易编写、管理和维护,代价也更低。

网络为软件开发者带来的另外一个挑战是安全性。Java提供一个受保护的环境,从网络上下载的程序可以以不同的定制安全级别运行。而且Java体系结构对程序的健壮性有一定的保证。

无所不在的网络带来了一个机会就是在线程序发布。Java利用这个优点在网络上传送小段二进制代码。所以最终用户运行的总是最新的版本。

可移动的代码带来了另一个机会:运动的对象——它同时在网络上传递代码和状态。

平台无关性、安全性和网络移动性,Java体系的这三个方面共同使得Java和发展中的网络计算环境相得益彰。

3.      体系结构

Java程序设计语言

Java class文件格式

Java应用编程接口(API)

Java虚拟机

Java虚拟机和Java API组合共同组成可以在任何地方运行的Java平台。

4.      Java虚拟机

Java虚拟机的主要任务是装载class文件并且执行其中的字节码。Java虚拟机包含一个类装载器(class loader),它可以从程序和API中装载class文件。字节码由执行引擎来执行。

不同的Java虚拟机,其执行引擎实现的可能非常不同。

最简单的执行引擎就是一次性解释字节码。

另一种执行引擎更快,但是也更消耗内存,叫做“即时编译器”(just-in-time compiler)。第一次被执行的字节码会被编译成本地机器代码。编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。

第三种执行引擎是自适应优化器。虚拟机监视运行中程序的活动,并且记录下使用最频繁的代码段。

最后一种虚拟机由硬件芯片构成,它用本地方法执行java字节码,这种执行引擎实际上是内嵌在芯片里的。

Java给人们提供了选择的机会。如果希望使用特定主机上的资源,它们又无法从Java API访问,那么可以写一个平台相关的java程序来调用本地方法。如果希望保证程序的平台无关性,那么只能通过Java API来访问底层系统资源。

5.      类装载器的体系结构

一个Java应用程序可以使用两种类装载器:bootstrap类装载器和用户定义的类装载器。用户定义的类装载器使得在运行时扩展Java应用程序成为可能。由于类装载器是使用Java编写的,所以使用任何在Java代码中可以表述的风格来进行类的装载。这些类可以通过网络下载,可以从某些数据库中读取,甚至可以动态生成。

当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器装载被引用的类。所以被装载的类默认情况下只能看到被同一个类装载器装载的别的类。通过这种方法,Java的体系结构允许在一个Java应用程序中建立多个命名空间。运行时的Java程序中的每一个类装载器都有它自己的命名空间。被不同的类装载器装载的类存放在不同的命名空间中,他们不能相互访问,除非应用程序显式地允许这样做。

通过允许实例化用户定义的类装载器知道如何从网络下载class文件,Java类装载器的体系结构提供了对网络移动性的支持;通过允许使用不同的用户定义的类装载器装载不同来源的class文件,Java类装载器的体系结构提供了对安全性的支持。它把不同来源的class文件放置在不同的命名空间中,这就能够限制或阻止不同来源的代码之间的相互访问。

6.      Java class文件

Java class文件主要在平台无关性和网络移动性方面使Java更适应于网络。

它在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。

Java class文件还在支持网络移动性的Java体系结构中担当了至关重要的角色。首先,class文件设计得紧凑,因此它们可以快速地在网络上传送。其次,由于Java程序是动态连接和动态扩展的,class文件可以在需要的时候才下载。

7.      Java API

Java API通过支持平台无关性和安全性,使得Java适应于网络应用。Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。运行Java程序时,所有被装载的class文件(包括从应用程序中和从Java API中提取的)和所有已经装载的动态库(包含本地方法)共同组成了在Java虚拟机上运行的整个程序。

8.      Java程序设计语言

使用Java语言写程序,能够充分利用如下的许多软件技术:

面向对象

多线程

结构化错误处理

垃圾收集

动态连接

动态扩展


使用Java语言最引人注目的原因之一是,它能够提高开发者的效率;而它最主要的缺点在于执行速度较慢。