一、Java体系结构
Java体系结构包括四个独立但相关的技术:
- Java程序设计语言
- Java class文件格式
- Java应用编程接口(API)
- Java虚拟机
二、Java虚拟机
Java虚拟机是Java的面向网络的核心,它支持Java面向网络体系结构三大支柱的所有方面:平台无关性,安全性和网络移动性。Java虚拟机的主要任务是装载class文件并且执行其中的字节码。classloader负责装载class文件,执行引擎负责执行字节码。
执行引擎
由于Java虚拟机规范只定义了每个虚拟机都必须实现的特性,没有规定具体的实现方法,因此不同的Java虚拟机,执行引擎可能实现的非常不同,一般来说有如下几种实现方法:
- 一次性解释字节码。
- 即时编译器(just-in-time compiler),这种情况下,第一次被执行的字节码会被编译成本地机器代码,编译出的本地机器代码会被缓存,当方法以后被调用的时候可以重用。
- 自适应优化器,这种情况下,虚拟机开始的时候解释字节码,但是会监视运行中程序的活动,并且记录下使用频繁的代码段,程序运行的时候,虚拟机只会把那些活动最频繁的代码编译成本地版本,其他仍旧保留字节码--由虚拟机继续解释它们。一个自适应的优化器可以使得Java虚拟机在80%-90%的时间里执行被优化过的本地代码。
- 由硬件芯片构成,由本地方法执行Java字节码,实际上这种实现是把执行引擎内嵌在芯片里。
Classloader
一个java应用程序可以有两种类装载器:启动类装载器(bootstrap)和用户定义的类装载器,启动类装载器是唯一的,它属于Java虚拟机实现的一部分。
每一个类装载器都有它自己的命名空间,一个类只能”看到“由同一个类装载器装载的其他类,不能跨命名空间访问。
用过允许实例化用户自定义的类装载器(该类装载器知道如何从网络下载class文件),Java类装载器的体系结构提供了对网络移动性的支持;通过允许使用不同的用户定义的类装载器装载不同来源的class文件,Java类装载器的体系结构提供了对完全性的支持。