`
andyliuxs
  • 浏览: 139429 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

读书笔记:《深入java虚拟机第二版》--- Java的体系结构 (转)

 
阅读更多

原文链接:http://www.cnblogs.com/nicholas_f/articles/1733512.html

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

Java程序设计语言

Java class文件格式

Java应用编程接口(API)

Java虚拟机

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

 

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

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

Java虚拟机(简介)

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

 

 

类装载器的体系结构:

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

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

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

由于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虚拟机的“机械语言”)。

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

Java API(略)

Java 程序设计语言 (略)

<script type="text/javascript"></script>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics