面向网络体系结构3大支柱的所有方面:平台无关性、安
全性和网络移动性。
1.1
~”
体系结构
每个Java虚拟机都有一个类装载器子
系统,他根据给
I圈圉回围区
运行期数据区
7耐
定的全限定名来装入类型(类或接口)。同样,每个Java虚
拟机都有一个执行引擎,他负责执行那些包含在被装载类
的方法中的指令。当Java虚拟机运行一个
程序时,他需要
E兰堂叫…蝴卜…游
图1
,11-,执行引擎
牛
Java虚拟机的结构框图
内存来存储许多东西,例如字节码,从已装载的class文件中得到的其他信息,程序创建的对象,传递给方法的参数,
返回值,局部变量,以及运行的中间结果等等。Java虚拟机
1.2
内存分配
即使是最简单的计算机,其内存需求量也在飞快增
把这些东西都组织到几个“运行时数据区”中,以便管理。尽管这些“运行时数据区”都会以某种形式存在于每
一个Java虚拟机实现中,但是规范对他们的描述却是相
长,像一切有限的资源一样,内存也需要小心地保存和回收。高级程序设计语言必须依赖编译器分配目标计算机
的资源,其中重要的一点就是分配内存。内存可以通过
3种方式分配:静态分配是最简单的内存分配策略。程序
收稿日期:2006—08—16172
中的所有名字在编译时绑定在某个存储位置上:这些绑定
万方数据
不会在运行时改变;栈分配,块结构语言通过在栈上分配内存,克服了静态分配的一些限制。每次过程调用时,一个活动记录或是帧被压入系统栈,并在返回时弹出;堆分配与栈所遵循的后进先出的规律不同,堆中的数据结构能够以任意次序分配与释放。因而活动记录和动态数据结构可能比创建他们的过程更长寿。在Java虚拟机的堆里存放着正在运行的Java程序所创建的所有对象。使用new,newarray,anewarray和mul—tianewarray指令来创建对象,但是没有专门的代码来释放他们,垃圾收集的
工作就是自动释放不再被程序所使用的对象的过程。对于不同的虚拟机,垃圾回收机制就成为了判断虚拟机性能的一项指标。
是无用单元也不可能被回收。因此,JVM中一般不采用该算法。
2.1.2
跟踪查找算法
该算法首先确定一组树根,根为Java栈的局部变量及引用对象的常数池,根确定后以根为起点,对对象引用图进
行
搜索(深度优先或广度优先),并标记搜索过程中遇到的对象,搜索完毕后,没有标记的对象即为无用对象。Java对象有些有finalizer()方法,有些没有。含有该方法的垃圾对
象释放前应执行finalizero方法释放系统资源。若某一不含finalizem方法的垃圾对象被另一含finalizer()方法的垃圾对象引用则应先释放后者。
2.1.3
压缩算法
2垃圾回收
Java虚拟机规范中没有要求任何特定的垃圾收集技术,但是显然在发明可以无限度使用的内存前,垃圾收集
回收对象时,不可避免地会产生堆碎片,为有效地利用堆,必须进行碎片合并。一般采用如下策略:压缩策略
将所有对象依次水平移动到对象堆的一
端,则对象堆的另一端为连续的空白区,移动的同时其他变量对被移动对象的引用修改为新的对象位置。为便于