Java虚拟机体系结构 - 总揽

来源:互联网 发布:适合mac用的办公软件 编辑:程序博客网 时间:2024/05/16 02:22

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

   1. Java程序设计语言

   2. Java class 文件格式

   3. Java 应用程序编程接口(API)

   4. Java虚拟机

        Java虚拟机:在编写和运行一个Java程序的过程中,程序员首先使用Java编程语言编写源代码,然后通过Java编译器(javac命令)来将源文件编译成相应的Java虚拟机能够识别的 .class 二进制文件;而编译后的 .class文件便可在Java虚拟机中运行。程序员编写的程序通过使用Java应用程序接口(API)所提供的方法来访问系统资源(譬如I/O)。图1.1 显示了四者之间的联系:


图1-1 Java编译环境

        Java 虚拟机是面向网络的核心,它提供了平台无关,安全和网络移动三大特性; 虽然每个Java虚拟机都必须能够执行Java字节码,但Java虚拟机的实现并不是唯一的,而只是提供了一种实现规范。在Java虚拟机包含一个类装载器(class loader)来装载 class文件(包括用户程序经过编译的和API 提供的class文件),以及一个执行引擎用来执行class文件中的字节码。图1-2(虚线框框内)显示了Java虚拟机的基本结构图:


图1-2 Java虚拟机及主机操作系统

        不同的Java 虚拟机中,执行引擎的实现也可能不同。最简单的执行引擎是一次性解释字节码(边解释,边执行); 第二种执行引擎更快,但也更消耗内存,叫做 ”即时编译器(just-in-time compile)",这种执行引擎在字节码第一次被执行大的时候会被编译成本地机器代码,编译出的本地机器代码会被缓存,当方法再次被调用的时候可以重用; 第三种执行引擎时自适应优化器,这种执行引擎通过监视程序运行,并且记录那些使用最频繁的代码段,缓存那些使用最频繁的代码所编译成的本地机器代码,而那些使用不是很频繁的代码继续保留为字节码(虚拟机下次使用时,需要继续解释它们)。

        Java 中的两种方法:Java方法和本地方法。Java方法是由Java语言编写编译成字节码,存储在class文件中的; 本地方法是由其他语言(C/C++,汇编语言)编写的,编译成和处理器相关的机器代码,保存在动态链接库中(如windows中的.dll文件,linux系统中的.so文件)。如图1-2所示,通过本地方法调用,Java程序可以直接访问底层操作系统的资源;通过本地方法接口(JNI)使得针对特定主机系统的本地方法可以在任何一个Java平台上运行。

        Java中的两种类装载器:启动类装载器(bootstrap)和用户自定义的类装载器。启动类装载器属于Java虚拟机实现的一部分而用户自定义的类装载器不是; Java应用程序能够在运行时安装用户自定义的类装载器,这种类装载器能够使用Java编写,能够编译为class文件,并被虚拟机装载,还能够像Java对象一样实例化,他们实际上只是运行中的Java 应用程序可执行代码的一部分。图1-3描述了这种体系结构:


图1-3 Java类装载器的体系结构图


        被装载的类默认情况下只能看到被同一个类装载器装载的其他类,而每一个类装载器都拥有自己的命名空间,因此同一个类可以被不同的类装载器装载多次。

        Java的平台无关性:Java API通过支持平台无关性和安全性,使得Java适应于网络应用。由于Java API class文件调用了本地方法,Java程序就不用再调用他们了,通过这种方法,Java API class文件为底层主机提供了具有平台无关性的,标准接口的Java程序。如图1-4 所示:


图 1-4 平台无关(左)及相关(右)的Java程序

0 0
原创粉丝点击