欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《深入Java虚拟机》_Java体系结构 博客分类: 读书心得 APIclass文件体系结构Java虚拟机 

程序员文章站 2024-03-14 16:31:10
...

Java体系结构:

 

当程序员编写和运行一个Java程序时,会同时体验到四种独立但相关的技术。
一、用Java编程语言编写源代码
二、将之编译成Java Class文件
三、在Java虚拟机(JVM)上运行Class文件
四、当编写程序时,通过调用类(这些类实现了Java API)中的方法来访问系统资源(比如I/O)。运行程序时,通过调用Java Class文件中实现Java API的方法来满足程序的Java API调用

 

 

从客户的角度上来看,JVM和JavaAPI组成了他所需要的“平台”——所有的Java程序都可以在其上运行。

 

一、虚拟机JVM

很容易看出,Java技术的核心之一就是Java虚拟机,而它也是Java面向网络的核心。

 

Java虚拟机的主要任务是装载class文件 并且执行其中的字节码。JVM包括类装载器,它装载需要的class文件。字节码由执行引擎来执行。

 

1、类装载器:

在实际的Java虚拟机中,存在着多个类装载器。他们分为2类:“启动”类装载器和用户自定义的类装载器。

 

启动类装载器是系统唯一的,它是JVM实现的一部分。如果我们的操作系统是有C语言写的,如Windows,那么启动类装载器就会是此C程序的一部分。启动类装载器在JVM启动时开始工作。

 

用户定义的类装载器能够用Java编写---它实际上就是一个类class。由于有用户自定义的装载器的存在,启动类装载器就不必在它工作时期(编译时期)就将所有程序可能用到类全部装载,因此实现了Java的动态加载功能,即一个类是在它第一次被使用(创建对象,调用static方法等)时才被加载。

 

2、Java虚拟机执行引擎:
不同的Java虚拟机,其执行引擎可能不同。而且它的规范是灵活的,它允许虚拟机用纯粹软件方式来实现,也可以很大部分由硬件实现。
在由软件实现的虚拟机中,有三种执行引擎
1、最简单的,一次性解释字节码
2、即时编译器(just—in—time compiler)。第一次执行的字节码会被编译成本地机器代码,然后机器代码被缓存,当方法再次调用时可以被重用
3、自适应优化器。虚拟机开始的时候解释字节码,并监视运行中程序的活动,将使用最频繁的代码编译成机器代码缓存下来,而其他使用不频繁的代码继续保留字节码。


在硬件芯片构成的虚拟机中,由本地方法执行Java字节码。这种执行引擎实际上被内嵌在芯片中。

 

 

二、Java class文件

我们知道,.class文件是.java文件编译成功后产生的二进制文件。二进制形式是计算机能够理解的形式。

 

C和C++语言在编译成功后也会产生二进制文件的。那么,Java产生的.class文件与他们有什么不同??

 

首先,它为Java的平台无关性做出了很大的贡献。C和C++等语言产生的二进制文件时单独的、专门支持特定硬件平台和操作系统的。这既是为什么C编写的windows程序不能在Linux上运行的原因。.class文件提供的是独立于底层主机平台的二进制服务,而这正是JVM所期望实现的。

 

其原理以后讨论。

 

其次,.class文件在java的网络移动性方面贡献颇大。class文件在设计上是非常紧凑的,因此方便网络传输。而且,由于Java程序的动态连接和动态扩展特性,class文件可以在需要时再下载。因此,可以减少用户等待的时间。这就好像迅雷看看提供的边下载电影边看电影一样--下多少就提供多少功能。

 

 

 

 

 

三、Java API

API是我们每天必须用到的东西,但是你了解它么??

 

我们知道,在Java中是不能直接访问本地资源的,除非通过Java基础API——中间隔了一层虚拟机。随之而来就有一个问题,不同平台上的本地资源的数据结构是不同的,为什么我们的Java程序在不同的平台上都运行良好?? 这是因为API帮我们屏蔽了这些看似无关紧要,但却十分重要的东西:Java API class文件调用了本地方法,Java程序就不需要额外调用它们了。

 

 

Java API在程序安全性上也有极大的作用,它是“沙箱模型”的能够起作用的重要保证。这点以后再谈