(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf_第1页
(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf_第2页
(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf_第3页
(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf_第4页
(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf_第5页
已阅读5页,还剩50页未读 继续免费阅读

(计算机应用技术专业论文)java嵌入式虚拟机的优化与研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 通过对k v m 中关键技术的研究,基于内存管理方面的不足,本文提出了适合k v m 的一种优化算法。 首先,本文对嵌入式和嵌入式j a v a 进行简单的概述介绍,分析嵌入式的特点、应 用和发展趋势,以及j a v a 虚拟机的体系结构;然后,阐述k v m 的其本概念,深入分析 k v m 的体系结构,包括内部结构、多线程和同步、控解释器、内存管理,并通过分析基 本算法和性能的比较,分析内存管理的不足,提出一种动态抢占优先级的垃圾回收算 法优化k v m 。最后,分析测试数据,说明采用此优化算法后的好处,并给出不足和需要 改进的地方。 关键词:嵌入式 k y m动态优先级 a b s t r a c t t h i sp a p e ri sd e v o t e dt oa l li n d e p t hr e s e a r c ho nt h ek e yt e c h n o l o g yo fk v ma n d p r o p o s e da no p t i m i z i n ga l g o r i s mw h i c hb a s e d o nt h em e m o r ym a n a g e m e n t f i r s t ,ab r i e fi n t r o d u c t i o n ,w h i c hi n c l u d e sa n a l y s i so f c h a r a c t e r i s t i c sa n dd e v e l o p m e n t t r e n do fe m b e d d e ds y s t e m ,w a sm a d e t h e nj a v av i r t u lm a c h i n ew e r ed i s c u s s e d s e c o n d ,t h e t h e s i si n t r o d u c e st h e c o n c e p t a n dt h e s y s t e m s t r u c t u r eo fk v m ,w h i c ha l e i l l u m i n a t e d ,n a m e l y , t h e s t r u c t u r eo fi n s i d e j a v av i r t u a l m a c h i n e ,m u l t i t h r e a d sa n d s y n c h r o n i z a t i o n ,a n d d e t a i l so ft h e i m p l e m e n t a t i o no f t h ei n t e r p r e t e ra n dm e m o r y m a n a g e m e n t t h r o u g ha n a l y z i n gt h ek v m ,c o m p a r i n gt h ep o p u l a ra l g o r i s m s ,w ep r o p o s e d a no p t i m i z i n ga l g o r i s mw h i c hb a s e do nt h em e m o r ym a n a g e m e n t f i n a l l y , d i s c u s st h e s t r o n g p o i n ta n ds h o r t c o m i n go ft h eo p t i m i z i n ga l g o r i s mb a s e do nt h er e s u l to ft e s t k e yw o r d s :e m b e d d e ds y s t e m k v n d y n a m i op ri o ri t y 长春理工大学硕士学位论文原创性声明 本人郑重声明:所呈交的硕士学位论文, ( j a v a 嵌入式虚拟机的优化与研究是本 人在指导教师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内 容外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研 究做出重要贡献的个人和集体,均己在文中以明确方式标明。本人完全意识到本声明 的法律结果由本人承担。 储懿:勉噜哗玉月埠日 长春理工大学学位论文版权使用授权书 本学位论文作者及指导教师完全了解“长春理工大学硕士、博士学位论文版权使 用规定”,同意长春理工大学保留并向中国科学信息研究所、中国优秀博硕士学位论文 全文数据库和c n k i 系列数据库及其它国家有关部门或机构送交学位论文的复印件和电 子版,允许论文被查阅和借阅。本人授权长春理工大学可以将本学位论文的全部或部 分内容编入有关数据库进行检索,也可采用影印、缩印或扫描等复制手段保存和汇编 学位论文。 作者签名: 指导导师签名: 年土月坞日 年月玛日 1 。1 论文研究目的与意义 第一章绪论弟一早硒比 对于嵌入式系统来说,j a v a 技术比c 语言和汇编语言具有很明显的优越性,可主 要归纳为以下几点: 第一,j a v a 具有跨平台性。“一次编写,到处运行”的特点使其十分适合在硬件与 操作系统平台差异较大的嵌入式系统上进行计算,不仅可以节省大量资源,同时也可 以保证软件的可复用性。 第二,适合网络应用。j a v a 具有完备的网络编程接口,例如,s o c k e t 和s t r e a m 、 u r l 以及通过网络的类加载技术等。利用这些接口,不但可以快速开发出应用程序而且 提高了安全性。 第三,极佳的安全性。j a v a 具有多个层次的安全防护措施,可以阻挡病毒与其它 的入侵行为,以避免造成j a v a 系统内的不稳定,提高了嵌入式系统的可靠性。 第四,容易编写应用程序。除了具备面向对象的特性外,j a v a 语言是简化c + + 的 语言,编写应用程序不需要实际去了解硬件平台与操作系统,可以缩短嵌入式系统的 开发周期。 尽管j a v a 嵌入式的优点毋庸置疑,但也存在着种种限制,系统开销过大,内存占 用,缺乏硬件直接接口能力等。j a v a 虚拟机解释执行j a v a 字节码的工作方式保证了 j a v a 的“w r i t eo n c e ,r u na n y w h e r e ”的移植性,却也使得j a v a 的运行速度大打折 扣。完成同样的计算任务,j a v a 在解释执行时的性能只相当于c 语言的1 1 0 至 1 2 0 。最近几年,随着多种性能优化技术在j a v a 虚拟机中的应用,j a v a 应用的运 行程度有了很大的提高,j a v a 语言终于在服务器市场站稳了脚跟。然而嵌入式平台又 给j a v a 应用加速提出了新的问题。嵌入式设备,特别是移动通信类设备,一般只具 备相当有限的计算能力和存储能力,这些情况都大大制约了现行的复杂的优化技术在 嵌入式设备上的应用乜1 。因此,研究高效的基于j a v a 开发嵌入式应用的方法越来越有 必要和意义。 国际上对嵌入式j a v a 虚拟机性能优化的研究工作在近几年才开始发展,国内在 这方面的研究工作则几乎是一片空白。对嵌入式j a v a 虚拟机性能优化的研究工作将 具有很大的实用价值。“。 本文通过对嵌入式j a v a 虚拟机k v m 进行研究和分析,结合k v m 现行垃圾收集算法 和k v m 在小型设备应用环境的状况,提出动态抢占优先级的垃圾收集算法,避免垃圾 收集过程中出现的停顿现象,提高内存空间的使用效率。 1 2 论文研究现状 自从s u n 公司1 9 9 5 年5 月发布j a v a 以来,在短短几年时间,j a v a 己风靡全球, 成为最热门的程序设计语言之一。由于j a v a 具有的诸多优点受到了嵌入式领域的青睐, 得到了大量的研究与开发应用,并一直呈逐渐上升的趋势,其应用和研究范围覆盖面 极广,主要涵盖了以下领域超级计算领域,如: 1 超级计算机领域,如j p v m ( j a v ap a r a l l e lv i r t u a lm a c h i n e ) 、p r i m ( p a r a l l e l j a v av i r t u a lm a c h i n e ) 、j a v ag r a n d 等; 2 企业计算领域,如j 2 e e 、g r i d 、w e bs e r v i c e 等; 3 嵌入式计算领域,如p e r s o n a lj a v a 、e m b e d d e dj a v a 和c a r dj a v a 等。 在嵌入式j a v a 中,k v m 在其体系结构中处于的核心地位,在很大程度上决定了嵌 入式j a v a 技术的未来应用前景。虽然k v m 作为s u n 的参考实现最经常被提到,不过并 不等于一定要用k v m 。其它公司的虚拟机只要满足相应的c o n f i u r a t i o n 里的定义,通 过兼容性测试,一样可以作为c o n f i u r a t i o n 的虚拟机。i b mw e bs p h e r em i c r o e n v i r o n m e n t 己经通过了“j a v ap o w e r e d t m 认证,其中j 9 虚拟在相当多的平台上通 过了j 2 m e 兼容性测试h 1 。 目前,国外己经有采用多种不同方式实现的j a v a 虚拟机,以下是比较有代表的一 些j a v a 虚拟机的实现: s u nh o t s p o tv m l 4 2 是公司提供的针对平台j 2 s e 的虚拟机,其执行方式采用自 适应优化的方式,垃圾收集算法采用分代式收集算法,在新分代和老分代上提供了多 种算法以适应不同应用的需要凸1 。在j 2 m e 环境中,s u n 公司提供了两个虚拟机c v m 和 k v m 。c v m 是s u n 公司针对c d c 提供的虚拟机实现。它采用解释执行方式,提供了三个 垃圾收集算法,即标记清除算法、拷贝算法和一个分代式收集算法。k v m 是s u n 针对c l d c 提供的虚拟机实现。k v m 采用解释执行,其垃圾收集算法为基本的标记清除算法,它的 特点是虚拟机运行时占用的内存较少,适合于内存极小的嵌入式设备1 。 j i k e sr v m 是由i b m 公司开发的用于研究性质的开放源代码的j a v a 虚拟机,该虚 拟机的特点是j a v a 虚拟机本身采用了j a v a 语言来实现,它提供了一个良好的垃圾收 集模块的接口一一垃圾收集工具集( g a r b a g ec o l l e c t o rt o o l k i t s ,g c t k ) h 1 。 s a b l e v m1 o 9 是m a g il l 大学计算机系的一个研究性质的开放源代码的j v m 虚拟 机实现,采用的垃圾收集算法是精确的拷贝算法,解释执行字节码旧1 。 k a f f e l 0 7 是一个开放源代码的j a v a 虚拟机实现,它支持的平台较多,垃圾收 集机制采用了一个不分代的保守的标记清除算法,并提供了一个j i t 的编译器和一个 解释器旧】。 在国内,北京科银京成技术有限公司是第一家成功推出嵌入式j a v a 虚拟机平台 的,其产品为d e lt a k v m 。这是一个完整的j 2 m e c l d c 在科银京成的嵌入式实时操作系 统d e lt a o s 上的实现,与c l d c 的标准规范完全兼容,是目前国内比较优秀的一种嵌入 2 式虚拟机,已经在t e l 、波导、n e c 、神达等手机厂家中得到广泛应用n 训。 以上列举出的虚拟机,适合嵌入式设备应用环境的目前只有s u n 公司的c v m 和k v m 以及k a f f e ,而这些适用于嵌入式设备的j a v a 虚拟机所使用的垃圾收集算法几乎都是 基本的标记清除算法。虽然基本的标记清除算法与引用计数算法和拷贝算法相比更适 合嵌入式设备应用环境,但此算法的思想还是有个很大的局限性,即不具有实时性。 1 3 论文主要内容 本文对嵌入式j a v a 虚拟机相关技术进行探讨,主要研究内容如下: 深入分析了嵌入式j a v a 虚拟机所涉及到的技术,主要包括虚拟机的体系结构、嵌 入式j a v a 运行模式与环境等。详细研究嵌入式j a v a 虚拟机的体系结构,重点分析嵌 入式j a v a 虚拟机中内存管理中的不足。 对嵌入式j a v a 虚拟机的三种传统垃圾收集优化方法进行详细讨论,包括引用计数 法、标记清除法、拷贝法。重点研究了各个算法应用到嵌入式系统的利弊,结合一些 优化算法的优点,在增量式标记算法的基础上做出改进,引入对象分类和实时性,提 出一种动态抢占优先级的垃圾收集算法。 1 4 论文的组织 本文共分五章,各章概况如下: 第一章,绪论。介绍论文研究的目的和意义,国内外研究现状,以及论文研究的 主要内容。 第二章,嵌入式j a v a 研究。介绍j a v a 虚拟机的体系结构与嵌入式j a v a 的应用模 型与环境,引入嵌入式j a v a 虚拟机k v m 的概念,比较j v m 和k v m 的不同,并简述k v m 的四大子系统。 第三章,k v m 的体系结构。分章节研究k v m 的体系结构,分析其工作机制和在嵌 入式j a v a 虚拟机中的作用。重点研究内存管理系统,分析其管理方式,并阐述内存管 理中的垃圾回收机制。 第四章,嵌入式j a v a 虚拟机的性能分析与优化。通过k v m 性能分析,比较三种的 传统垃圾收集算法,对现有的改进算法进行分析,引入对象分类和实时性,提出一种 动态抢占优先级的策略来优化嵌入式j a v a 虚拟机。 第五章,优化算法性能分析与比较。通过对算法的实践分析,对产生的数据进行 分析,验证优化后的算法的可行性。 最后,结论。总结了论文中提出的算法优点以及可改进之处,并展望了可进行的 一些后续研究。 3 2 1 j a v a 虚拟机 2 1 1j a v a 虚拟机 第二章嵌入式j a v a 研究 j a v a 的目标代码在执行时需要有j a v a 运行系统的支持,虽然j a v a 运行系统被 建立在各种不同的平台上,但为了支持j a v a 的可移植性,它们的功能要求是统一的, 为此j a v a 引入了j a v a 虚拟机( j v m ) 的概念。从概念上看,j a v a 虚拟机是一个虚 拟的、能运行j a v a 字节码的操作平台,它实际上是一组有关指令系统、字节码格式 等的规格说明。j a v a 虚拟机是j a v a 技术的核心,只要j a v a 程序正在执行,j 也 必定正在执行。其规范定义了每一个j w 必须具有的功能,但是对于每一种应用的设 计者,它都会给予几乎无限制的自由n 。例如,每一个j v m 都可以使用任何技术去执 行j a v a 字节代码。在j a v a 语言刚刚推出的一段时间里,j a v a 虚拟机都是通过软件 仿真的方法实现的,而后出现了用硬件实现的j a v a 虚拟机,例如s u n 公司推出的专 门为j a v a 而优化设计的处理器产品:p i c oj a v a ,m i c r oj a v a ,u l t r aj a v a 等。这 种灵活性意在使j v m 可在各种计算机和嵌入式设备上实现。当然,目前大多数的j a v a 虚拟机还是用软件方法实现的。在最上层,j v m 的主要目的是装载j a v a 类文件并执 行它们1 2 】。 2 1 2j a v a 虚拟机的体系结构 j a v a 虚拟机的体系结构包括支持的数据类型、j a v a 的虚拟机寄存器、j a v a 的栈 框架、j a v a 虚拟机垃圾回收堆、j a v a 的本地方法栈、j a v a 的虚拟机存储区、j a v a 指 令集等n 引。如图2 1 所示: 4 图2 1j a v a 虚拟机( j v m ) 的体系结构 1 j a v a 虚拟机的数据类型。j 直接支持j a v a 语言的基本数据类型,包括 i n t 、l o n g 、f l o a t 、d o u b l e 、b y t e 、s h o r t 和c h a r 。它们的定义是独立于具体平台的, 这为j a v a 程序的可移植性打下了基础。几乎所有的数据类型校验都在编译时完成。 基本数据类型的数据无需标识,而是由j a v a 的指令系统按照数据类型不同而选用不 同的指令。例如加法运算,就有针对i n t 的i a d d 指令,针对l o n g 的1 a d d 指令, 这样就减轻了解释器的负担,达到更高的运行效率。另外,在j a v a 语法定义中有 b o o l e a n 型数据,而虚拟机数据类型中没有b o o l e a n 型,在实现中是用i n t 型来代 表单个b o o l e a n 变量,用b y t e 数组来代表b o o l e a n 数组。其他的数据类型还有: o b j e c t 3 2 b i t j a v a 对象实例的引用 r e t u r n a d d r e s s3 2 b i t 在j s r r e t j s r _ w 等指令中使用 这样定义使得无需为对象实例定义任何特殊的内部结构,对象实例的引用包括两 个指针:一个指向该对象实例的方法表;另一个指向为该对象分配的数据。 2 j a v a 的虚拟机寄存器。由于在各种计算机体系结构中,寄存器的设置千差万 别,所以j a v a 虚拟机只设置了四个寄存器( 3 2 位) ,这四个寄存器是程序计数器p c , 栈顶指针o p t o p 、用于指向当前执行方法的运行环境的指针f r a m e 和用于指向当前执 行方法的局部变量的指针v a r s 。虚拟机在任何时候都是在执行一个单独方法的代码, p c 寄存器包含下个要执行的字节码的地址。局部变量和操作数栈的大小在编译时就 可以得到,运行环境结构的大小由解释器提供,因此为方法分配存储器空间是很方便 的。 3 j a v a 的栈框架。作为基于栈结构的计算机,j a v a 栈是虚拟机中存储信息的主 要方法。虚拟机得到一个j a v a 代码应用后,就为该代码的类中的每个方法创建一个 栈框架,以保存该方法的状态信息。 4 j a v a 虚拟机垃圾回收堆。j a v a 中类的实例所需的存储空间都是在堆上分配 的,解释器负责为实例分配空间。j a v a 语言中用n e w 语句申请分配内存,在完成分 配之后,就开始对空间的使用情况进行追踪记录,一旦对象使用完毕,就自动将其收 回堆中。对内存进行释放和回收方案依赖于特定的解释器及平台,例如s u n 的h o t j a v a 就是利用了一个低优先级的线程进行跟踪的后台处理。 5 j a v a 的虚拟机存储区。在j a v a 的虚拟机中有两类存储区:常量缓冲区 ( c o n s t a n tp o o la r e a ) 和方法区( m e t h o da r e a ) 。常量缓冲区用于存放类名称,方 法,字段名及串常量;方法区用于存储j a v a 方法的字节码以及字符表。这两种存储 区的具体实现在虚拟机中没有明确定义,依赖于特定的解释器。 6 j a v a 的本地方法栈。j a v a 虚拟机的实现可以使用传统的栈,通俗地称为“c 栈”,来支持n a t i v e 方法,这些方法是用非j a v a 语言编写的。j a v a 虚拟机规范允 许本地方法栈固定大小或者动态可变大小。通常,本地方法栈在每个线程被创建时分 配在每个线程基础上。 7 j a v a 虚拟机的指令集。j a v a 虚拟机的指令集看起来和真正的c p u 指令相仿, 包含了典型的数学计算、流程控制、数组存取等指令。j a v a 虚拟机是堆栈式的虚拟c p u , 不用寄存器,而是用编号的“局部变量来存放运算结果。一般来说,此指令集很象 一般c p u 的指令集,但实际上,j a v a 虚拟机的某些指令甚至比真实世界的c p u ( 比 方说p e n t i u m 、p o w e r p c ) 指令复杂得多,因为j a v a 虚拟机的指令集包含了面向对象 的概念,是比较高级的指令集n 引。 2 2 嵌入式 2 2 1 嵌入式系统的定义 嵌入式系统定义比较多,常用的定义为n 5 1 : 1 嵌入式系统是以应用为中心、以计算机技术为基础、软件硬件可裁剪、适用于 对系统功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2 嵌入式系统是计算机的一种应用形式,通常指埋藏在宿主设备中的微处理机系 统,此类计算机一般不会被设备的使用者注意,亦称埋藏式计算机,如微控制器、微 处理器和d s p 等。内部装有这种计算机的系统性能强、反应速度快、自动化程度高, 用于实现对其他设备的控制、监视或管理等功能。用户不需知道装置内计算机的存在, 一般不能被用户编程,它有一些专用的i o 设备,对用户的接口是与应用相关的。 6 2 2 2 嵌入式系统的特点 1 嵌入对象的广泛性。由于科学技术的发展,特别是微电子技术的飞速发展和变 化,目前,几乎一切系统或设备都可以采用嵌入式计算技术来控制,过去很多想做的 而又无法实现的工作现在可以由嵌入式系统来完成了。从日常生活中使用的洗衣机, 要实现全套洗衣流程的自动控制操作,到提高国防力量的导弹,要实现全程自动寻找 目标并实施攻击控制,无一能离开嵌入式系统。 2 嵌入形式的多样性。嵌入式技术得到了广泛应用,但各种系统或设备对嵌入式 计算机的性能,功能、规模要求是绝对不同的。这种差异势必造成嵌入式系统有其相 应的多样形式。从目前看,在日常生活设备中有大量的单片形式的嵌入式系统,在工 业中和军事系统设备中、有无数的单板嵌入形式和整机形式的嵌入式系统。在大型系 统中,甚至还有以计算机系统形式存在的嵌入式系统。 3 嵌入作用关键性。今天,计算机已被人们美誉为“电脑,可见计算机能力和 作用的重要性。尽管嵌入式系统是从应用配套而逐步进入系统和设备的,但一旦进入 后,它就在新系统或新设备中承担许多自动控制的处理任务。因此新系统或者设备对 其依赖性越来越大,已经不再是可有可无的部分,而是上升到关键部分,可见嵌入式 的关键性作用毋庸置疑。 4 嵌入功能的专一性。由于嵌入式系统需完成的任务和需达到的性能指标十分明 确,功能目标也十分清楚,因此,嵌入式系统通常并不需要顾及其它功能,多余的功 能和过高的技术指标是毫无意义的,有时甚至是有害的,所以说嵌入式系统的功能是 十分专一的。 5 嵌入接口的多样性。尽管每种嵌入式系统i o 接口的性质、规格和数量都是 固定的,但由于应用中涉及到各行各业,所以要处理的接收信号和发出的控制信号是 多种多样的,例如:指导飞行器的陀螺信号,无线通信各种波长信号,雷达接收信号, 电机、马达、发动机等信号。在这些信号中,包括有:数字信号、模拟信号、高电压 大电流信号、低电压4 , 电流信号、连续式信号、间断式和突发性信号等,要求嵌入式 系统设有多种类型接口,它们决非如通用计算机制定的有限几个规范所能全部包含的, 也决非单靠嵌入式计算机厂商所能全部解决的。 6 嵌入性能的实时性。嵌入式系统在接收到规定信号后,必须在有限的时间内完 成确定的工作任务,这是区别于其它计算机的一个十分重要的特点,也是嵌入式系统 设计所必须考虑的主要问题,它不但涉及硬件体系结构、包括c p u 速度、内存访问速 度、总线速度及中断机制等硬件问题,还涉及软件的中断管理和任务调度策略,包括 调度算法、调度频率和调度时机等。 7 嵌入结构匹配性。通用计算机是以计算机为核心,按计算机本身的需求而设计 其结构,而嵌入式系统是以被嵌入的系统或设备为核心,按系统或设备的约束条件而 设计其结构的。不与系统或设备相匹配的嵌入式系统是没有出路的,要求其体积、重 量,还包括允许的功耗等因素符合宿主系统的要求。 8 嵌入操作的可靠性。嵌入式系统是被隐藏在系统或设备中的,不少系统或设备 用户很难直接与嵌入式计算机接触,有的甚至在工作时,人根本无法直接进行控制, 如:宇航设备上的嵌入式计算机,一旦发射、就完全独立于人的控制。因此,嵌入式 系统的可靠性是一个非常重要的因素。 9 嵌入环境的一致性。嵌入式系统必须同设备的使用环境保持一致,嵌入到日常 生活中的系统或设备,大多不必进行环境适应性加固措施。如果不考虑应用环境,使 用加固的嵌入式计算机,由于成本的提高,体积的增大,它必定也是没有生命力的。 反之,嵌入到恶劣环境中的工业和军事方面的系统或设备,那就必须进行针对性的合 适级别的环境适应性加固措施。如果有不予理会的想法,它在某些环境条件下不能工 作或不能稳定工作,最后也必会被系统否定。 1 0 嵌入产品开发周期短、生命周期长。因为嵌入式系统往往和具体应用有机地 结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入 市场,具有较长的生命周期n 6 】。 2 3 嵌入式j a v a 2 3 1 嵌入式应用模型 目前,在嵌入式系统中运行一个完整的项目是不现实的。首先,j a v a 不包括直接 访问内存和寄存器的机制,所以需要设备驱动以及其它由c c + + 或者汇编语言写成的支 持软件,这些支持软件可能被j a v a 程序所调用也可能作为一个线程与j a v a 运行环境 并行运行n 7 l 。 在准备j a v a 应用系统之前,考虑j a v a 的应用模型使其适合于整个应用的体系结 构是非常重要的。目前,针对于嵌入式系统的j a v a 应用模型主要是以下四类,n oj a v a , 嵌入式w e b 服务器,嵌入式a p p l e t ,嵌入式a p p l i c a t i o n 。这四个应用模型根据字节 码的位置、字节码所运行的处理器,这两个变量来区分,每个变量可以取值t a r g e t 或 者h o s t ,t a r g e t 指所在的嵌入式系统,h o s t 指连接嵌入式系统的计算机n8 1 。如图2 2 所示: 8 ll i h o s tii h 0 s tll h o s tiih o 吼i i “ l i a v a i t a v a j- 一, l j二jir w b r k s t a t i o nw o r k s t a t i o nw b r k s t a t i cn w b r k s t a t i o n 1r 曰u t a r g e t i - f 1 卧f - 臼者筌 t a r r g e t ,e 一1 ul j j a v a n o j a v a 嵌入式嵌入式 嵌入式 w e b 服务器 a p p l e ta p p l i c a t i o n 图2 2 嵌入式j a v a 应用模型 n oj a v a 包括所有的字节码在本机存储并且在h o s t 上执行的方案,虽然使用了 j a v a ,但不是在嵌入式系统上运行。 嵌入式w e b 服务器应用模型中,j a v a 字节码在目标嵌入式f l a s h 系统的存储器或 者r o m 中存储,但是在h o s t 上执行。这种模型对于需要图形接口的嵌入式系统非常有 用。在h o s t 上运行的w e b 浏览器执行从嵌入式系统中下载的字节码。除了字节码,这 种方案中的嵌入式系统必须存储至少一个h t m l 文件,并在嵌入式系统中运行嵌入式 w e b 服务器软件。因为j a v a 不在嵌入式系统中运行,所以无需j a v a 运行环境。 在嵌入式a p p l e t 和嵌入式a p p l i c a t i o n 模型中,j a v a 字节码真正在嵌入式系统 中运行,所以需要嵌入式j a v a 运行环境。在嵌入式a p p l e t 模型中,j a v a 字节码在h o s t 工作站中存储,通过网络发送到嵌入式系统,由嵌入式系统执行字节码并将结果发回 到h o s t 。嵌入式a p p l e t 能被用于执行网络管理的功能比如代替s n m p ( s i m p l en e t w o r k m a n a g e m e n tp r o t o c 0 1 ) 。 在嵌入式a p p l i c a t i o n 模型中,嵌入式软件或者全部或者部分的用j a v a 开发,j a v a 字节码存储在非易失存储器中,并且在嵌入式运行环境中执行。这种运行方式与在嵌 入式系统中执行c c + + 相似,本地代码由处理器取指令并且执行。因为j a v a 没有直接 访问硬件的能力,它仍然必须依赖于由c c + + 写的本地方法,这与使用汇编语言来完成 平台相关的任务相似。 2 3 2 嵌入式j a v a 虚拟机的实现 s u n 公司在虚拟机规范中没有对功能的实现做具体规定,因此可以在不同平台上 灵活实现j a v a 虚拟机。嵌入式系统中j a v a 虚拟机实现包括软件实现方法和硬件实现 方法,现有的实现主要有三种方式,解释执行,即时编译,j a v a 微处理器系统n 引。 1 解释执行。最早出现的软件实现方法是采用解释器作为虚拟机的核心,由软件 9 逐条解释字节码。虽然实现简单、占用资源少,但由于解释执行速度太慢,不能提供 较好j a v a 的性能,因而无法得到较大范围的应用。 2 即时编译技术j i t ( j u s t i n t i m ec o m p i l i n g ) 。通过动态翻译技术,把将要 调用的方法编译成本地机器代码,并保存在内存中,当该方法再次被使用时,就可以 直接执行编译后的代码。采用j i t 技术可以大大提高j a v a 执行速度,但是它将以付出 内存资源为代价,一个高级的j i t 运行时需要大约上兆的内存资源,这一问题无疑大 大影响了它在嵌入式系统中的应用。 3 j a v a 微处理器系统。随着j a v a 技术的普遍使用及网络化程度的进一步提高, 为了给资源受限的嵌入式系统提供较高的j a v a 性能,用硬件支持j a v a 程序的运行是 另外一种选择,出现了多种j a v a 微处理器系统,它包括能直接执行j a v a 虚拟机指令 的微处理器芯片和相关的操作系统。 2 3 3 嵌入式运行环境 1 9 9 9 年1 月,s u n 公司发布了嵌入式j a v a 应用环境规范e j a e ( e m b e d d e dj a v a a p p li c a t i o n e n v i r o n m e n ts p e c i f i c a t i o n ) ,其中对嵌入式环境中运行j a v a 程序应该 具备的j a v a 环境要求如下啪1 : 1 完全支持j a v a 语言规范中定义的语言; 2 完全支持j a v a 虚拟机规范中定义的虚拟机。 典型的嵌入式运行环境如图2 3 所示: ! 。一一。一。一。1 类库j a v a 线程c c + + 任务 1r j a v a 虚拟机( 有垃圾回收) r 本地方法多任务操作系统 处理器及其他硬件 : i 图2 3 嵌入式j a v a 运行时环境组成结构图 嵌入式j a v a 运行环境,包括以下几个部分: 1 j a v a 虚拟机。由j a v a 虚拟机将与平台无关的字节码翻译为目标机器的本地代 码,并且完成动态类装载。虚拟机可以以解释执行或者即时编译( j i t ) 的形式运行, 他们之间的差别是字节码执行的速度,j i t 速度快一点,因为它避免了重新编译程序先 l o 前执行过的部分。 2 一个以字节码形式存储的标准的j a v a 类库。如果应用没有引用任何这些类, 那么它不一定需要。在嵌入式应用中,j a v a 类库一般设计为与s u n 的某一个的标准a p i 兼容,比如p e r s o n a lj a v a 或者e m b e d d e dj a v a 。 3 虚拟机和类文件需要的任何本地方法。这些函数用其它一些语言写成,预编译, 并与虚拟机链接在一起。他们主要完成一些与特定处理器相关的功能或者不能直接由 j a v a 执行的功能。 4 一个多任务操作系统。用来提供底层j a v a 线程执行和同步机制。 5 一个垃圾回收线程。回收器周期的运行或者当内存不能满足一个分配需求时启 动。 2 3 4 嵌入式j a v a 虚拟机k v m k v m 的体系结构和通常j v m 基本上是一样的。但k v m 的应用平台主要是比较便宜 的移动设备,要在没有良好的硬件设备上运行基本的技术,它就需要在设计时特别地 考虑内存的使用、执行的时间等。k v m 通常是用c c + + 语言实现的乜。 k v m 在功能上和j v m 相比,也做了很多的裁剪,重要的限制有: 1 对浮点运算的支持:c l d c i 1 ( c o n n e c t e dl i m i t e dd e v i c ec o n f i g u r a t i o n ) 规范中要求支持浮点运算,然而一些硬件平台不支持浮点运算,这就需要k v m 用一些 函数来模拟实现。对各个平台此功能是否启用是可选的; 2 不支持j n i ( j a v an a t i v ei n t e r f a c e ) ,但k v m 实现了自己的本地函数接口k n i ( kn a t i v ei n t e r f a c e ) ,k n i 可以说是轻量级的j n i ; 3 不支持用户定义j a v a t m l e v e l 类加载器,不支持r e f l e c t i o n 功能; 4 有限的错误处理方式,大多数的j a v a 1 a n g e r r o r 都没有支持。 k v m 可以说是j v m 的缩型,但在设计上有更多的限制和考虑,但是这也不是绝对 的,可以视具体的应用环境进行功能上的增减。 从虚拟机设计的角度出发,k v m 的体系结构如图2 4 所示: 类装载器和j a r 加载器校验器 解释器和执行堆栈 编译器 线程系统和线程调度 本地接口内部运行时结构 内存系统和垃圾收集 图2 4k v m 体系结构 由图2 4 所示,可以将k v m 分为四大子系统: 1 内部结构:这部分包括类装载器和j a r 加载器、校验器、本地接口和函数与内 部运行时数据结构; 2 多线程和同步控制:这部分包括k v m 的线程系统和线程调度; 3 解释器:这部分包括解释器和执行堆栈以及编译器( 编译器是可有可无,通常 的k v m 是没有的) ; 4 内存管理系统:这部分包括内存的分配和内存的回谢2 2 1 。 3 1 内部结构 第三章k v m 的体系结构 k v m 内部结构模式如图3 1 所示: 3 1 1 内部运行时数据结构 j a v a 类文件涵盖了文件所定义的类或者接口的所有信息。虚拟机能够解释执行此 类,就必须能够理解类文件,而类文件本身是8 位字节的二进制流,结构很紧凑,各 项的长度不一,若需要从中提取某项信息,就必须从类文件开始扫描,按照类文件的 结构定义进行计算直到找到相应的项心3 。这是件很费时的工作,因此当k v m 装载一个 c l a s s 文件时,就要从这个文件所包含的二进制数据中解析类型信息,建立我们需要的 运行时结构。 1 执行时的i n s t a n c e 结构 k v m 在执行时,基本上是以下面的i n s t a n c e s t r u c t 结构来代表每一个依照某个具 体c l a s s 所创造出来的i n s t a n c e : s t u c ti n s t a n c e s t r u c t c o m m o n o b j e c t _ i n f o ( i n s t a n c e _ c l a s s ) u n i o n c e l l 幸c e e l p ; c e l lc e l l ; 1 3 ) d a t a 1 】; ) ; 其中c e ll 代表一个大小为3 2 b i t 的数据类型,定义如下: c o m m o n o b j e c t _ i n f o ( i n s t a n c ec l a s s ) 是个m a c r o ,定义如下所示: d e f i n ec o m m o n o b j e c t _ i n f o ( o f c l a s s ) m o n i t o r o r h a s h c o d em h c 而i n s t a n c e c l a s s 则是代表一个指向i n s t a n c e c l a s s s t r u c t 结构的指针,定义如 下: 如果某个c l a s s 创建了一个i n s t a n c e ,那么这个i n s t a n c e 在内存中的表现方式 是以一个i n s t a n c e s t r u c t 结构而存在。i n s t a n c e 与c l a s s 之间是有着所谓的从属关系。 在i n s t a n c e 结构中的o f c l a s s 字段就反映了这种关系,它就是用来记录一个i n s t a n c e 是从属于哪一个c l a s s 的。 在j a v a 中的每一个i n s t a n c e 都属于某种c l a s s ,而属于某种c l a s s 的i n s t a n c e 的行为都是由c l a s s 来定义的,包括可以执行的m e t h o d 有哪些,如何执行那些m e t h o d 以及可以用到的f i e l d 等等。如果在j a v a 可以使用的内存空间中,有个被用来代表某 个i n s t a n c e 的i n s t a n c e s t r u c t 结构的话,可以通过这个结构内的o f c l a s s 字段快速 的找到该i n s t a n c e 所属的c l a s s 。这种从属关系如图3 2 所示: 图3 2i n s t a n c e 与c l a s s 之间的从属关系 结构体中的d a t a 数组是用来存放各自所属的i n s t a n c ev a r i a b l e 值( 包括定义 在所属c l a s s 中的i n s t a n c ev a r i a b l e s ,以及继承自该c l a s s 的s u p e rc l a s s 中的 i n s t a n c ev a r i a b l e s ) 。实际上,这个数组的用途也唯一在这个地方。有了这个数组, 就可以区分出两个不同的i n s t a n c e ,即使它们都从属于某个相同的c l a s s 。d a t a 数 组内部存储方式如图3 3 所示: 1 4 - - 一- _ - - - _ _ - - - - _ - _ - - - - 一一- - 一- - - 一二一- - - - - - - 一- 一- 一- 一- 一一- 一- - 一- - - - - - 图3 3i n s t a n c e s t r u c t 结构中的d a t a 数组内部存储方式 2 执行时的c l a s s 结构 k v m 中c l a s s 运行时的数据结构有两个结构体,分别是c l a s s s t r u c t 和 i n s t a n c e c l a s s s t r u c t ,如图3 4 所示: 图3 4c l a s s s t r u c t 结构和i n s t a n c e c l a s s s t r u c t 结构之间的关系 对一个c l a s s 来说,k v m 在执行时是使用一个i n s t a n c e c l a s s s t r u c t 结构来描述 每一个c l a s s 。所以在k v m 执行时,所有需要用到的c l a s s 都会从对应的j a v a 类中加 载到内存中,并在内存中以一个i n s t a n c e c l a s s s t u c t 结构来代表它。 对于以上的几个结构体之间的关系,i n s t a n c e c l a s s s t r u c t 结构中的c l a s s s t u c t 结构可以看成是c l a s s 的声明,而把整个i n s t a n c e c l a s s s t r u c t 结构看成是c l a s s 的 定义。这和传统c 语言中的声明与定义很类似,即声明只是说明某个变量或者函数的 类型,而定义则说明了某个变量的内存值或者函数内容。 在j a v a 系统中,几乎每一个c l a s s 都继承自另外一个c l a s s ,而在 i n s t a n c e c l a s s s t r u c t 结构中的字段就是用来记录这种继承关系用的 ( j a v a 1 a n g 。o b j e c t 的s u p e r c l a s s 字段应该是0 ) 。在j a v a 系统中,是用c l a s s 来描 述c l a s s 的。这个用来描述c l a s s 行为模式的特殊c l a s s 就是j a v a 1 a n g c l a s s 这个 特殊类。也可以这么理解,即把j a v a 1 a n g c l a s 看作是其他c l a s s e s 的c l a s s ,而除 了j a v a 1 a n g c l a s s 之外的其他c l a s s e s 都是j a v a 1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论