《深入Java虚拟机》_Java体系结构

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在程序安全性上也有极大的作用,它是“沙箱模型”的能够起作用的重要保证。这点以后再谈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值