文章摘自《深入java虚拟机第二版》



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



Java程序设计语言



Java class文件格式



Java应用编程接口(API)



Java虚拟机



用 Java 编程语言编写源代码,把它编译成 Java class文件 ,然后再在 Java虚拟机 中运行 class文件 (图1.1)。




java 组织结构号怎么设计呢 java体系结构_引擎

 

Java虚拟机 和 Java API 一起组成了一个“平台”(从版本1.2开始,称为Java 2平台),所有Java程序都在这上面编译。

Java程序可以在不同的计算机上运行,这是因为Java平台自己可以用软件实现(图1.2)


java 组织结构号怎么设计呢 java体系结构_class_02

  Java虚拟机(简介)

Java虚拟机 是一台抽象的计算机,是Java面向网络的核心,支持 Java 面向网络体系结构三大支柱的所有方面:平台无关性、安全性和网络移动性,其主要任务是装载class文件并且执行其中的字节码, Java虚拟机 包含一个 类装载器 (class loader),它可以从程序和API中装载 class 文件,字节码由执行引擎来执行(图1.3)。


java 组织结构号怎么设计呢 java体系结构_虚拟机_03

 类装载器的体系结构:

Java虚拟机 拥有灵活的类装载器体系结构,从而使Java应用程序得以用自定义的方式来实现类的装载,一个 Java 应用程序可以使用两种类装载器:“ 启动”(bootstrap)类装载器和 用户定义的 类装载器 。


启动类装载器( 系统中惟一的)是Java虚拟机实现的一部分, 启动类装载器 通常使用某种默认方式从本地磁盘中装载类,包括Java API的类(启动类装载器也被称为原始类装载器、系统类装载器或者默认类装载器)。


用户自定义的 类装载器 能够用Java编写,能够被编译为 class 文件,能够被 虚拟机装载 ,还能够像其他对象一样实例化。他们实际上只是运行中的 Java应用程序 可执行代码的一部分(图1.5)。


java 组织结构号怎么设计呢 java体系结构_引擎_04

   由于 Java虚拟机 采取这种方式进行类的装载,所以被装载的类默认情况下只能看到被 同一个类装载器装载

的别的类。通过这种方法, Java 的体系结构允许在一个 Java应用程序 中建立多个命名空间。运行时的Java程序中的每一个类装载器都有它自己的命名空间。一个 Java应用程序 能够从同一个类或者多个类中实例化多个用户定义的类装载器,因此,需要多少个(或多少种)用户自定义的类装载器, Java应用程序 就可以创建多少个。 被不同的类装载器装载的类存放在不同的命名空间中,它们不能互相访问,除非应用程序显式地允许这样做 。当编写一个Java应用程序的时候,从不同源文件装载的类可以分隔在不同的命名空间中。通过这种方法,就能够使用Java类装载器的体系结构来控制任何从不同源文件中装载的代码之间的相互影响,特别是能够阻止恶意代码获取访问和破坏善意代码的权限。

执行引擎:


不同的 Java虚拟机 中,执行引擎可能实现得非常 不同, 现在主要有四类执行引擎 。 第一类 执行行引擎是一次性解析字节码 。在 软件实现的虚拟机中, 它是最简单的执行引擎。每次执行的时候都要对字节码重新进行解析。 第二类 执行引擎更快,但是也更消耗内存,叫做"即时编译器"(just-in-time compiler) ,在这种情况下,第一次被执行的字节码会被编译成本地机械代码。编译出的本地机械代码会被缓存,当方法以后被调用的时候可以重用。 第三类 执行引擎是自适应优化器 。在这种方法里,虚拟机开始的时候解析字节码,但是会监视运行中程序的活动,并且记录下使用最频繁的代码段。程序运行的时候,虚拟机只把那些活动最频繁的代码编译成本地代码,其他的代码由于使用得并不是很频繁,继续保留为字节码---由虚拟机继续解析他们。一个自适应的优化器可以使得Java虚拟机在80%~90%的时间里执行被优化过的本地代码,而只需要编译10%~20%对性能有影响的代码。 第四类 执行引擎是由硬件芯片构成。 它用本地方法执行Java字节码,这种执行引擎实际上是内嵌在芯片里的。


Java class文件


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


它在平台无关性方面的任务是为Java程序提供独立于底层主机平台的二进制形式的服务。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作,而 Java class文件 是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件( Java编译器 把 Java源文件 的指令编译成字节码,这种字节码就是 Java虚拟机 的“机械语言”)。


 除了对于平台无关性的支持,J ava class 文件还在支持网络移动性的Java体系结构中担当了至关重要的角色。 首先:class文件设计得紧凑,因此他们可以快速地在网络上传送;其次,由于Java程序是动态连接和动态扩展的,class文件可以在需要的时候才下载。 这个特点使得Java应用程序能够安排从网络上下载class文件的时间,从而可以最大限度地减少终端用户的等待时间。


Java API(略)


Java 程序设计语言 (略)