1. Java的体系结构

Java体系结构包含四个独立但相关的技术:

  • Java程序设计语言
  • Java class文件格式
  • Java应用编程接口 (API)
  • Java虚拟机

从图1-1中可以看出这四者之间的联系:

1. Java的体系结构_第1张图片
图1-1 Java编程环境.png

Java虚拟机和Java API一起组成了一个“平台”,所有Java程序都在这上面编译。

1. Java的体系结构_第2张图片
图1-2 在Java平台上运行的Java程序.png

1.1 Java虚拟机

Java虚拟机的主要任务是装载class文件并执行其中的字节码。在图1-3中可以看到,Java虚拟机包含一个类装载器,它可以从程序和API中装载class文件。Java API中只有程序执行时需要的那些类才会被装载。字节码由执行引擎来执行。

1. Java的体系结构_第3张图片
图1-3 Java虚拟机的基本结构图.png

Java虚拟机是不是一个“解释器”?“解释”是一种为人熟知的易于实现而执行缓慢的技术。然而,考虑到执行字节码的方式可能是不同的,这个称谓可能造成误导。

这里还要意识到,当提及“Java虚拟机”时,可能指的是如下三种不同的东西:

  • 抽象规范
  • 一个具体的实现
  • 一个运行中的虚拟机实例

1.2 类装载器的体系结构

实际上在Java虚拟机中,存在着多个类装载器,因而图1-3或图1-4中的类装载器实际上表示的是一个可能包含多个类装载器的子系统。

1. Java的体系结构_第4张图片
图1-4 在主机操作系统上由软件实现的Java虚拟机.png

一个Java应用程序可以使用两种类装载器:

  • 启动 (bootstrap) 类装载器
  • 用户自定义类装载器

启动类装载器是虚拟机实现的本质部分,而用户自定义类装载器不是。用户自定义类装载器能够用Java编写,能够被编译为class文件,能够被虚拟机装载,还能够像其他对象一样实例化。它们实际上只是运行中的Java应用程序可执行代码的一部分。图1-5描述了这种体系结构。

1. Java的体系结构_第5张图片
图1-5 Java类装载器的体系结构.png

当被装载的类引用了另外一个类时,虚拟机就会使用装载第一个类的类装载器来装载被引用的类。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所示。

1. Java的体系结构_第6张图片
图1-6 一个具有平台无关性的Java程序.png

除了平台无关性,Java API在Java安全性模型方面也做出了贡献。当Java API的方法进行任何有潜在危险的操作(比如写本地磁盘)之前,都会通过查询安全管理器来检验是否得到了授权。

1.5 Java程序设计语言

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

  • 面向对象
  • 多线程
  • 结构化错误处理
  • 垃圾收集
  • 动态连接
  • 动态扩展

你可能感兴趣的:(1. Java的体系结构)