Java体系结构包含四个独立但相关的技术:
- Java程序设计语言
- Java class文件格式
- Java应用编程接口 (API)
- Java虚拟机
从图1-1中可以看出这四者之间的联系:
Java虚拟机和Java API一起组成了一个“平台”,所有Java程序都在这上面编译。
1.1 Java虚拟机
Java虚拟机的主要任务是装载class文件并执行其中的字节码。在图1-3中可以看到,Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件。Java API中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。
Java虚拟机是不是一个“解释器”?“解释”是一种为人熟知的易于实现而执行缓慢的技术。然而,考虑到执行字节码的方式可能是不同的,这个称谓可能造成误导。
这里还要意识到,当提及“Java虚拟机”时,可能指的是如下三种不同的东西:
- 抽象规范
- 一个具体的实现
- 一个运行中的虚拟机实例
1.2 类装载器的体系结构
实际上在Java虚拟机中,存在着多个类装载器,因而图1-3或图1-4中的类装载器实际上表示的是一个可能包含多个类装载器的子系统。
一个Java应用程序可以使用两种类装载器:
- 启动 (bootstrap) 类装载器
- 用户自定义类装载器
启动类装载器是虚拟机实现的本质部分,而用户自定义类装载器不是。用户自定义类装载器能够用Java编写,能够被编译为class文件,能够被虚拟机装载,还能够像其他对象一样实例化。它们实际上只是运行中的Java应用程序可执行代码的一部分。图1-5描述了这种体系结构。
当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器来装载被引用的类。Java的体系结构允许在一个Java应用程序中建立多个命名空间。
1.3 Java class文件
Java class文件主要在平台无关性和网络移动性方面使Java更适应于网络。
平台无关性:为Java程序提供独立于底层主机平台的二进制形式的服务。
网络移动性:class文件设计得很紧凑;动态连接和动态扩展,class文件可以在需要的时候才下载。
1.4 Java API
Java API是运行库的集合,它提供一套访问主机系统资源的标准方法。Java API的class文件天生就与主机平台密切相关。在一个平台能够支持Java程序之前,必须在这个平台上明确地实现API的功能,如图1-6所示。
除了平台无关性,Java API在Java安全性模型方面也做出了贡献。当Java API的方法进行任何有潜在危险的操作(比如写本地磁盘)之前,都会通过查询安全管理器来检验是否得到了授权。
1.5 Java程序设计语言
使用Java语言编写程序,能够充分利用如下的许多软件技术:
- 面向对象
- 多线程
- 结构化错误处理
- 垃圾收集
- 动态连接
- 动态扩展