已阅读5页,还剩60页未读, 继续免费阅读
(计算机软件与理论专业论文)嵌入式java虚拟机内存储器管理技术研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式j a 、,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 a v a 虚拟机是特别重 要的,因此在小型的、资源有限的嵌入式设备中,需要专为嵌入式系统优化j a v a 虚拟机。 在c c _ 卜+ 语言中,内存的分配和回收都必须由程序员自己完成。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 虚拟 机v t j v m 中。对v t j v m 的测试表明该方案在性能上有了很大的提高。最后对该 系统进行总结,并指出将来的改进工作。 关键词:j a v a 虚拟机,j 2 m e ,嵌入式,内存管理 嵌入式j a v a 虚拟机内存储器管理技术研究 a b s t r a c t w i t ht h e d e v e l o p m e n t o fe m b e d d e d t e c h n o l o g y ,e s p e c i a l l y i nt h e3 g c o m m u n i c a t i o n t e r m i n a l ,m o r e a n dm o r e p e o p l e d e m a n df o rt h em u l t i m e d i a a p p l i c a t i o nt h a tc a r lb ed o w n l o a d e dd y n a m i c a l l yw i t l la b u n d a n tc o n t e n t e m b e d d e d j a v at e c h n o l o g ya p p e a r sw i t hi t b u tj v mi st h ek e yo f s u c c e e d i n gi np o r t i n gj a v a t e c h n o l o g yt oe m b e d d e ds y s t e m h o wt oe x c a v a t et h eg r e a t e s tl a t e n te n e r g yo f j v m i ns m a l ld e v i c e sw i ml i m i t e dr e s o u r c e t h e r ea r eal o to f r e s p e c t sd e s e r v e dd i s c u s s i o n mi sak i n do fs o f t w a r e a st oj a v ap r o g r a m i ti ss h o w na st h ec o m p u t e ro f s o f t w a r ew i t hs i n g l eh a r d w a r ea n do p e r a t i n gs y s t e mc h a r a c t e r i s t i c i tm a k e sj a v a p r o g r a mp o s s e s st h eh i g hp o r t a b i l i t ya m o n gd i f f e r e n tc o m p u t e rs y s t e m s i ti sv e r y i m p o r t a n tt h a tt h e r ei s as t e a d ya n dc u s t o m i z e dj v mi ne m b e d d e ds y s t e m s ot h e s m a l l ,r e s o u r c e c o n s t r a i n e de m b e d d e dd e v i c e sn e e da no p t i m i z e dj v mf o re m b e d d e d s y s t e me n v i r o m e n t ss p e c i a l l y i nc c + + l a n g u a g e ,p r o g r a m m e rm u s tf i n i s ht h ea l l o c a t i o na n dc o l l e c t i o no f m e m o r yb yh i m s e l f , b u tj a v ae n v i r o n m e n th a sa d o p t e dt h ea u t o m a t i cm e m o r yt o a l l o c a t ea n dc o l l e c t ,a f t e rp r o d u c i n gac l a s si n s t a n c e ,j v ma l l o c a t e s a u t o m a t i c l y m e m o r yf o ri t ,a n dc a l l sg a r b a g ec o l l e c t o rt oc o l l e c tu s e l e s sm e m o r y t h i sm a k e s p r o g r a m m e rn e e d n tr e t u r nm e m o r yt os y s t e m ,a n dr e d u c e sp o s s i b i l i t yo fm e m o r y e r r o r si np r o g r a m s b u ti nt h ee m b e d d e d d e v i c e s ,t h eg r e a t e s tl i m i t a t i o no f j a v al i e si n l a c k i n gt h eh i s t o r i c a li n f o r m a t i o no fm e m o r ya n du n a b l et og u a r a n t e er e s p o n s a b i l i t y i nr e a lt i m e f o rt h i sr e a s o n ,a c c o r d i n gt ot h ec h a r a c t e r i s t i co fe m b e d d e d s y s t e m ,a n d i no r d e rt or e m e d yt h ed e f i c i e n c yi nt h es i m i l a rd e s i g na t p r e s e n tw ep u tf o r w a r da n e w 。t y p em e m o r ym a n a g e m e n tp o l i c yo fj v m i td e s i g n sa n da c c o m p l i s h e st h e o b j e c ts p a c em a n a g e m e n ti nf a s ta l l o c a t i o na n df a s tg a r b a g ec o l l e c t i o n ,s t r e n g t h e n s t h er e a l t i m e r u n n i n go fs y s t e m ,a n dr e d u c e st h es y s t e mp h e n o m e n o no fs t o p p i n g g r e a t l y t h i st h e s i si n t r o d u c e st h eb a c k g r o u n d s o u r c ea n di n t e r n a t i o n a la n dd o m e s t i c s i t u a t i o n so ft h es u b j e c ta tf i r s t ,a n dj a v a t e c h n o l o g ya n de m b e d d e d r e a l t i m es y s t e m a r ei n t r o d u c e d b r i e f l y t h e nt h ed e t a i l e di n t r o d u c t i o nt ot h er u n t i m ed a t aa r e ai sd o n e t h r o u g ha n a l y s i s o fj v mm e m o r ym a n a g e m e n t p o l i c y e s p e c i a l l y r e s e a r c ha n d a n a l y s i so fa l l o c t i o na n dg a r b a g ec o l l e c t i o na l g o r i t h m s ,w ep u tf o r w a r dt h ep o l i c yo f j v ma n d a p p l yi ne m b e d d e dj v m v t j v m t h et e s tt ov t j v mi n d i c a t e st h i ss c h e m e h a sb e e ni m p r o v e dal o to np e r f o r m a n c e s u m m a r i z et h i s s y s t e mf i n a l l y ,a n dp o i n t o u tt h ei m p r o v e m e n ti nt h ef u t u r e k e y w o r d :j v m ,j 2 m e ,e m b e d d e d ,m e m o r ym a n a g e m e n t 1 1 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明 确的说明并表示谢意。 签名:j 二# 扯 日期:2 卯乒年段月2 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名;红i 盛导师签名:三堕竺 日期:一缉台月。日 嵌入式j a v a 虚拟机内存储器管理技术研究 1 1 课题背景 第一章引言 在我们今天的生活中,个性化的智能信息消费品已经日益成为人们生活的 必需品。这些消费品包括移动电话、寻呼机、智能卡、个人电脑记事本( p e r s o n a l o r g a n i z e r ) 和掌上电脑。它们是特定的、资源有限的网络连接设备,而不是我们 迄今已知的通用台式机。为专门满足这一巨大的消费空间,s u n 在j 2 s e 的基础 上提出并发展了j a v a2 平台袖珍版( j 2 m e ) ,j 2 m e 提供了很多的创新j a v a 技 术。 j 2 m e 目标是在具有1 6 位或3 2 位处理器和总量不少于大约1 2 8k b 的存 储器的微型设备上运行j a v a 程序。这些设备都符合c l d c ( c o n n e c t e dl i m i t e d d e v i c ec o n f i g u r a t i o n ) ,同时也保留了j a v a 的传统特性,即任何时间、任何地点 的代码可移植性、部署灵活性、安全的网络传送以及代码稳定性。j 2 m e c l d c 的 先决条件是一个紧缩的j v m ,称为k 虚拟机( k v i r t u a lm a c h i n e ( k v m ) ) 。另一个 j 2 m e 配置是c d c ( c o r m e c t e dd e v i c ec o n f i g u r a t i o n ) 。它的目标是高档的消费类 电子产品。典型地,这些设备运行一个3 2 位的微处理器控制器,而且有总 量大于2m b 的用于虚拟机和库的存储器。c d c 包含有c 虚拟机( cv i r t u a l m a c h i n e ( c v m ) ) 。 由于硬件和软件方面的限制,为了给应用程序尽可能的空间和资源,让应 用程序在虚拟机上流畅、稳定地运行,因而需要对这类嵌入式j a v a 虚拟机进行 优化处理,以提高其性能。 在国外有一些大公司已经作了很多工作,最早的k v m 的实际操作是在 p a h n o s 上所实现的。为了达到让应用程序本身能够跨平台的缘故,已经有许多 公司积极地将k v m 放置到本身的产品之中,例如i b m 的v i s u a l a g em i c r o e d i t i o n 、e s m e r t e c 的j b e d 、k a d as y s t e m s 的k a d a v m 、i n s i g n i as o l u t i o n s 的j e o d e v m 等,还有就是较多的o p e ns o u r c e 产品。国外对嵌入式j a v a 虚拟机的研究和 应用作了很多工作,但是还是不能够达到个令人满意的程度,所以很多大公 司都在不停地研究提升自己产品的性能。2 0 0 4 年3 月,s u n 针对这类应用提出 了c l d c h o t s p o ti m p l e m e n t a t i o nv i r t u a lm a n c h i n e 白皮书,它将应用于j 2 e e 和 j 2 s e 平台的h o p s p o t 技术转移到j 2 m e 平台,这对提高应用于嵌入式系统环境 的虚拟机技术有很大的指导作用。 而国内的研究工作虽然相对比较落后,也有了一些相关的产品出现,但随着 嵌入式j a v a 虚拟机内存储器管理技术研究 3 g 技术和产品的出现与运用,还有很多的研究和开发工作需要去做。因此,本 文就是从j 2 m e 中的j a v a 虚拟机的内存管理的角度来研究如何设计相应的算法, 从而从整体上提高系统的性能的。 1 2 嵌入式实时系统 由于嵌入式j a v a 虚拟机大都建立在嵌入式实时系统之上的,因此在研究j a v a 虚拟机之前,还需要对嵌入式实时系统有所了解。下面我们会分别对嵌入式系 统和实时系统作一个介绍。 1 2 1 嵌入式系统 嵌入式系统没有一个非常明确的定义,这是由于硬件性能的提升和价格的下 降使通用计算机和嵌入式系统之间的界限变得很模糊,技术的进步使得人们很 难定义什么是嵌入式。一般说来,大部分的嵌入式系统执行特定的任务。这种 特定的功能限定使嵌入式设备有功能上的惟一性。 嵌入式系统自动化程度高、性能强、速度快。用户不需要知道嵌入式系统的 处理机和操作系统的具体细节,一般也不需要被用户编程。当然,有的嵌入式 系统会提供应用程序级的开发,从而可以为用户提供丰富的内容。它有一些专 用的i o 设备,对用户的接口是应用专用的。 嵌入式系统广泛应用于办公自动化、消费电子产品、通信、汽车、工业控制 和军事领域等。其中,通信、办公自动化和消费电子产品占的分额最大,约占 9 0 以上。 1 2 2 实时系统 实时系统是对外来事件在限定时间内能作出反应的系统。限定时间的范围很 广,可以从微秒级( 如信号处理) 到分秒级( 如联机查询系统) 。 实时控制系统和实时信息处理系统统称为实时系统。在实时控制系统中计算 机通过特定的外围设备与被控对象发生联系,被控对象的信息经加工后,通过 显示屏幕向控制人员显示或通过外设向被控对象发出指示,实现对被控对象的 控制;在实时信息处理系统中,用户通过终端设备向系统提出服务请求,系统完 成服务后通过终端回答给用户。 在实时系统中主要有响应时间、生存时间、吞吐量三个指标来衡量系统的实 嵌入式j a v a 虚拟机内存储器管理技术研究 时性。 实时系统的软件是实时应用软件和实时操作系统r t o s ( r e a l - t i m e o p e r a t i n gs y s r e m ) 两部分的有机结合,其中r t o s 起着核心作用,由它来管理和 协调各项工作,为应用软件提供良好的运行软件环境及开发环境。 从系统响应时间的确定性上来说,实时系统一般是指硬实时系统和软实时系 统,硬实时系统保证系统事件响应的确定性,认为延迟的响应是系统错误;软 实时系统试图使事件响应的时间减到最小,而不将延迟的响应看做系统错误。 1 3j a v a 技术 1 3 1j a v a 平台体系结构 j a v a 平台体系结构分为两个部分构成,即虚拟机( v i r t u a lm a c h i n e ) 和应用程序 接n ( g m ) 。 lj a v a 插件或应用程序 基本a p i i 扩展a p i l 基粪 扩展粪 j a v a 虚拟机 l移植接1 2 1 机# 适配器适配器适配器 j 州b 擐作系 浏览器撬柞系统书型壤柞系 统量 操榫系统 统 硬件) 硬件硬件 硬件 萤1 - 1j a v a 系统结构图 如图i l 所示,位于j a v a 虚拟机下层的移植接口层和适配器是为了使j a v a 虚拟机能够方便地移植到不同的操作系统平台上而开发设计的。另外,位于j a v a 虚拟机之上的j a v aa p i 部分则包含了基本的a p l 类与扩展的a p i 类,如标准的 1 ( 2 ) 功能、网络功能、g u i 和应用类等。 用任何一个文本文件编辑器或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 虚拟机内存储器管理技术研究 并按照字节码中的操作执行。 1 3 2j a v a 平台版本 随着j a v a 语言的不断发展壮大,j a v a 的应用范围日趋广泛,从小型的智能 卡到大型的企业应用都需要j a v a 应用程序来完成不同的任务。针对不同的应用 平台套用同一个j a v a 运行环境就显得不再适合了。因此,s u n 将开发的j a v a 运 行环境区分为三个不同的版本,每一个版本都为特定的领域服务。 企业版j 2 e e ,这个版本主要目标是企业可以为他们的客户、供应商和雇员 提供稳定的、完整的、灵活的商务网络服务方案。 标准版j 2 s e ,这个版本是用于台式计算机( 如p c 或w o r k s t a t i o n ) 上执行j a v a 程序的版本。 微型版j 2 m e ,主要是为了满足以下三个方面的需要: ( 1 ) 需要建立不同信息处理设备的消费者或嵌入式设备生产商; ( 2 ) 希望通过他们的设备为消费者提供服务内容的服务提供商; ( 3 ) 为小型的资源有限的设备开发应用的开发商。 虽然三个版本面向不同的应用,但是这三个版本之间存在着包容关系,可以 从图1 2 中看出: 1 3 3j 2 m e 图1 - 2j 2 m e ,j 2 s e 和j 2 e e 的关系 我们知道在个人计算机上运行的是j 2 s e ,如果想在p d a 或者移动电话上运 行j a v a 程序,那j 2 s e 还合适吗? 很显然这是不合适宜的。这是因为j 2 s e 提供 的j a v a 虚拟机对p d a 这类小型的资源有限设备来说体积过于庞大,而且有很多 功能是用不到的,这使得这类硬件运算能力不高的环境中j a v a 执行的效率太差, 所以s u n 才会另外提出了j 2 m e ( j a v a2m i c r oe d i t i o n ) 这套j a v a 版本来符合象 p d a 这类资源有限设备的需求。 4 嵌入式j a v a 虚拟机内存储器管理技术研究 j 2 m e 主要瞄准两类广泛的产品 共享固定设备( s h a r e d ,f i x e d ,c o n n e c t e di n f o r m a t i o nd e v i c e s ) ,这一类归属于 c d c ( c o r m e c t e d d e v i c ec o n f i g u r a t i o n ) ,如电视机顶盒、数字电视、视频电话、 - 高端通讯设备、车载娱乐或导航系统等。这类设备相对来说内存较大,能够 保持持续高带宽的网络连接,而且常使用t c p i p 协议。 个人移动设备( p e r s o n a l ,m o b i l e ,c o n n e c t e di n f o r m a t i o nd e v i c e s ) ,这一类归属 于c l d c ( c o n n e c t e d ,l i m i t e dd e v i c ec o n f i g u r a t i o n ) ,如移动电话、传呼机和 p d a 等。这类设备有非常简单的用户接口,有限的内存容量和低带宽的网 络连接。 对于这两类设备,我们可以从图1 3 的j 2 m e 平台结构中看出。 7 叵三习 、 区玉;目 互 i 臣习 p r o f i l e s c o n f i g u r a t i o n l a v av i r t u a im a c h i n e h o s to p e r a t i n gs y s t e m 图1 3j 2 m e 平台结构图1 4j 2 m e 层次结构 从分层的角度看,j 2 m e 可以分为四层,如图1 4 所示,下面简单介绍一下 配置层( c o n f i g u r a t i o n ) 和简要表层( p r o f i l e ) 两个概念。 配置( c o n f i g u r a t i o n ) ,j 2 m e 配置层为一类或一组设备从横向定义了一个最小 平台,比如需要的总的存储器大小和处理器性能,同时定义了j a v a 语言和 虚拟机的特征以及最小类库。这些定义可以应用于同类的所有设备。 简要表( p r o f i l e ) ,简要表层位于配置层的上部,它从纵向定义了某一类设备 的特定需求。它为一类设备在j a v a 最小类库基础匕扩充了类库,从而为应 用开发者提供一定的接口和工具框架,以此丌发。系列基本的应用软件。 j 2 m e 主要目的是在为小型的资源有限的设备定义一套完整的规范,它涵羔 了各式各样的消费性电子产品。虽然它是为小型设备服务的,但它同样维持了 j a v a 技术的重要特性。j 2 m e 技术已经广泛应用到大量的消费类电子产品,特别 是在移动通信设备上,这些设备已经f 1 益成为了人们生活中不可缺少的一部分。 5 嵌入式j a v a 虚拟机内存储器管理技术研究 1 4 课题来源 ,本课题来源于成都万创科技有限公司申请的全国中小企业创新基金项目多 媒体嵌入式无线j a v a 移动终端通信平台,该项目主要对移动终端设备的软硬件 进行研究,包括g p r s c d m a 2 0 0 0 通信模块、嵌入式实时t i n u x 系统、i n t e lx s c a l e p x a 2 5 5 高性能处理器应用开发、嵌入式j a v a 虚拟机v t j v m 等,从而推动3 g 多 媒体无线产品的开发和应用。 1 5 论文安排 本论文主要是对嵌入式j a v a 虚拟机的内存储器管理技术上作研究,在研究 内存管理之前还对一些背景知识作介绍,安排如下: 背景知识 第一章:引言 介绍了本论文课题的背景、来源和国际国内的情况,并简介了j a y a 技术和 嵌入式实时系统,这是研究嵌入式j a v a 虚拟机技术的基础。 j v m 内存管理技术 第二章;j a 、,a 虚拟机的内存管理 对虚拟机的运行时数据区中的方法区、堆、栈、寄存器和本地码栈作了详 细的分析介绍。 第三章:自动内存管理策略 分析了j a v a 虚拟机的内存管理策略,特别是对虚拟机内存的分配和垃圾回 收算法的研究,对各算法执行过程和适用的环境以及其优缺点作了比较分析。 v t j v m 内存管理技术 第四章:v t j v m 内存管理结构 考虑到嵌入式小型设备的特性,为提高v t j v m 的性能,设计了应用于 v t j v m 中的堆内存管理结构。 第五章:v t j v m 内存分配策略 介绍了v t j v m 中堆空间的分配问题。 第六章:v t j v m 垃圾收集策略 介绍了v t j v m 的垃圾回收策略,主要是在不同的对象空间采用了不同的垃 嵌入式j a v a 虚拟机内存储器管理技术研究 圾回收算法,同时采用多线程回收机制。 第七章:性能测试 设置相应的内存参数测试了v t 3 - v m 虚拟枧,表明与同类虚拟机比较在性能 上有了很大的提高。 总结及将来工作 第八章:结论及将来的工作 对该系统进行总结,并指出将来的改进工作。 7 骶八式j a v a 虚拟机内存储嚣管理技术研究 第二章j a v a 虚拟机的内存管理 j a v a 虚拟机为每个执行的程序定义了不同的运行时数据区,有一些数据区是 在如v a 虚拟机启动时创建而在退出时销毁。而其他一些数据区是为每一个线程 服务的,当线程创建时创建该数据区,而在线程退出时销毁。 如图2 - 1 ,我们可以看出j a v a 虚拟机将内存划分方法区( m e t h o da r e a ) 、堆 ( h e a p ) 、栈( j a v as t a c k ) 、寄存器( r e g i s t e r ) 、本地码栈( n a t i v es t a c k ) 等。执行一个 虚拟机实例时,虚拟机需要对申请到的内存进行管理,这就涉及到一个管理策 略的问题。在j a v a 虚拟机中的运行时数据区在虚拟机设计时都以某种形式实现 的,但虚拟机规范对其描述较为抽象,在运行时的数据结构细节大多数由具体 的设计者决定。 2 1 方法区 图2 - 1 虚拟机运行时数据区 j a v a 虚拟机有一个所有虚拟机线程共享的方法区( 如图2 2 ) ,它保存的是每 一个类结构比如运行时常量池、字段、方法数据( m e t h o dd a t a ) 和代码。 当虚拟机装载某个类型时,它使用类装载器定位到相应的c l a s s 文件,然后 读入这个文件( 一个线性二进制数据流) ,将它传输到虚拟机中。紧接着虚拟机提 取其中的类型信息,并将这些信息存储到方法区。该类型中的类( 静态) 变量 嵌入式j a v a 虚拟机内存储器管理技术研究 也是存储在方法区中。 由于所有线程都共享方法区,因此它们对方法区的数据的访问必须被设计为 线程安全的。比如,假如同时有两个线程都企图访问一个名为l a v a 的类,而这 个类还没有被装入虚拟机,那么,这只应该有一个线程装载它,而另一个线程 则只能等待。 方法区的大小不必是固定的,虚拟机可以根据需要动态调整。同样,方法区 也不必是连续的,方法区可以在一个堆( 甚至虚拟机自己的堆) 中自由分配。 另外,虚拟机也可以允许用户或程序员指定方法区的初始大d 、以及最小和最大 尺寸等。 方法区也可以被垃圾收集,因为虚拟机允许通过用户定义的类装载器来动态 扩展j a v a 程序,n ) l 些类也会成为程序“不再引用”的类。当某个类变为不 再被引用时,j a v a 虚拟机可以卸载这个类( 垃圾收集) ,从而使方法区占据的内 存保持最小。 在方法区需要存储每个类型的以下信息:类型信息、常量池、字段信息、方 法信息、类( 静态) 变量、类装载器等。 2 2 缝 圈2 - 2 方法区 图2 - 3 堆 堆由所有的虚拟机线程共享,所有n 类实例和数组都是从堆中分配内存f 如 图2 - 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 程序的多个线程却共享着同一个堆空间,在 这种情况下,就得考虑多线程访问对象( 堆数据) 的问题。 9 嵌入式j a 、,a 虚拟机内存储器管理技术研究 j a v a 虚拟机有一条在堆中分配新对象的指令,却没有释放内存的指令。虚拟 机自己负责决定如何以及何时释放不再被运行的程序引用的对象所占据的内 存。通常,这个任务虚拟机交给垃圾收集器来完成。 垃圾收集器的主要工作就是自动回收不再被运行的程序引用的对象所占用 的内存。此外,它也可能去移动那些还没有使用的对象,阻此减少堆碎片。 和方法区一样,堆空间也不必是连续的内存区。在程序运行时,它可以动态 扩展或收缩。事卖上,一个实现的方法区可以在堆顶实现。换句话说,就是当 虚拟机需要为一个新装载的类分配内存时,类型信息和实际对象可以都在同一 个堆上。因此,负责回收无用对象的垃圾收集器可能也要负责无用类的释放( 卸 载) 。另外,某些实现可能也允许用户或者程序员指定堆的初始大小、最大最小 值等。 j a v a 对象中包含的基本数据由它所属的类及其所有超类声明的实例变量组 成。只要有一个对象引用,虚拟机就必须能够快速地定位对象实例的数据。另 外,它也必须能够通过该对象引用相应的类数据( 存储于方法区的类型信息) 。 因此在对象中通常会有一个指向方法区的指针。 种可能的空间设计是把堆分成两个部分:旬柄池和对象池,如图2 - 4 所示, 对象引用就是指向旬柄池的本地指针。旬柄池的每个条目有两个部分:一个指 向对象实例变量的指针,一个指向方法区类型数据的指针。这种设计的好处是 有利于堆碎片的整理,当移动对象池中的对象时,句柄部分只需要更改一下指 针指向对象的新地址就可以了,也就是将在旬柄池中的对象指针替换为新地址。 缺点是每次访问对象的实例变量都要经过两次指针传递。 剀2 4 第一种堆空间殴计 另种设计方法是使对象指针直接指向一组数据,而该数据包括对象实例数 据以及指向方法区中类数据的指针,如图2 5 所示。这样设计的优缺点f 好跟上 嵌入式j a v a 虚拟机内存储器管理技术研究 一种相反,它只需要一个指针就可以访问对象的实例数据,但是移动对象就变 得更加复杂。当使用这种堆的虚拟机为了减少内存碎片而移动对象时,它必须 在整个运行时数据区中更新指向被移动对象的引用。 2 3 栈 图2 - 5 第二种堆空间设计 每当启动一个新线程时,j a v a 虚拟机都会为它分配个j a v a 栈( 如图2 - 6 ) 。 j a v a 栈是以帧( f r a m e ) 为单位保存线程的运行状态。虚拟机只会直接对j a v a 栈执 行两个操作:以帧为单位的压栈或出栈。 ,一、 j a v a 、登曼, 幽2 - 6j a v a 拽 本地方法调用 ? 本地线 一 程c 或 i 、其它语言, 某个线程f 在执行的方法被称为该线程的当前方法,当前方法使用的栈帧称 为当前帧,当前方法所属的类称为当前类,当前类的常量池称为当前常量池。 在线程执行一个方法时,它会跟踪当前类和当前常量池。此外,当虚拟机遇到 栈内操作指令时,它对当前帧内数据执行操作。 嵌入式j a 、,a 虚拟机内存储器管理技术研究 每当线程调用一个j a v a 方法时,虚拟机都会在该线程的j a v a 栈中压入一个 新帧。而这个新帧自然就成为了当前帧。在执行方法时,它使用这个帧来存储 参数、局部变量、中间运算结果等数据。 j a v a 方法可以以两种方式完成。一种通过r e t u m 返回的,称为正常返回;一 种通过抛出异常而异常终止。不管以哪种方式返回,虚拟机都会将当前帧弹出 j a v a 栈然后释放掉,这样上一个方法的帧就成为当前帧。 j a v a 栈上的所有数据都是此线程私有的。任何线程都不能访问另一个线程的 栈数据。 栈帧由三个部分组成:局部变量区、操作数栈和帧数据区。局部变量区和操 作数栈的大小要视对应的方法而定,它们是按字长计算的。编译器在编译时就 确定了这些值并放在c l a s s 文件中。而帧数据区的大小依赖于具体的实现。 当虚拟机调用一个j a v a 方法时,它从对应类的类型信息中得到此方法的局 部变量和操作数栈的大小,并据此分配栈帧内存,然后压入j a v a 栈中。 2 4 寄存器 对于一个运行中的j a v a 程序而言,其中的每一个程序都有它自己的p c ( 程 序计数器) 寄存器,它是在该线程启动时创建的。p c 寄存器的大小是一个字长, 因此它既能够有一个本地指针,也能够持有一个r e t u r na d d r e s s 。当线程执行某个 j a v a 方法时,p c 寄存器的内容总是下一条将执行的地址。这里的地址可以是一 个本地指针,也可以是方法字节码中相对于该方法起始指令的偏移量。如果该 线程正在执行一个本地方法,那么此时p c 寄存器的值是“u n d e f m e d ” 2 5 本地码栈 任何本地方法接口都会使用某种本地方法栈。当线程调用j a v a 方法时,虚 拟机会创建一个新的栈帧并压入j a v a 栈。然而当它调用的是本地方法时,虚拟 机会保持j a v a 栈不变,不再在线程的j a v a 栈中压入新的帧,虚拟机只是简单地 动态连接并直接调用指定的本地方法。可以看着是虚拟机利用本地方法来动态 扩展自己。 如果某个虚拟机实现的本地方法接口是使用c 连接模型,那么它的本地方法 栈就是c 栈。当c 程序调用一个c 函数时,其栈操作都是确定的。传递给该函 数的参数以某个确定的顺序入栈,它的返回值也以确定的方式传回调用者。同 嵌入式j a v a 虚拟机内存储器管理技术研究 样,这就是虚拟机实现中本地方法栈的行为。很可能本地方法接口需要回调j a v a 虚拟机中的j a v a 方法,这种情况下,该线程会保存本她方法栈的状态并进入到 另一个j a v a 栈。 如图2 ,7 所示,该线程首先调用了两个j a v a 方法,而第二个j a v a 方法又调 用了一个本地方法,这样导致虚拟枫使用了一个本地方法栈。图中的本地方法 栈显示为一个连续的内存空问。假设这是一个c 语言栈,其问有两个c 函数, 它们都以包围在虚线中的灰色块表示。第一个c 函数被第二个j a v a 方法当作本 地方法调用,而这个c 函数又调用了第二个c 函数。之后第二个c 函数又通过 本地方法接口回调了一个j a v a 方法( 第三个方法) ,最终这个j a v a 方法又调用 了一个j a v a 方法( 它成为图中的当前方法1 。 占 舌 内 部 调 用 j a v a 线程 本地线程 隔羽 本地方法调用 i ;、,¥# 穗 隧滴稚| f 蕊 i :_ i 橱 j a v a 方法铡用 栈帧f ? 、 i j 、 j 型! j n 函 数 内 部 调 用 图2 7 本地码调用 就像其它运行时内存区一样,本地方法栈占用的内存区也不必是固定大小 的,它可以根据需要动态扩展或者收缩。某些实现也允许用户或者程序员指定 内存区的初始大小以及最大、最小值。 2 6 本章小结 , l a v a 虚拟机的内存管理是虚拟机设计的一个核心问题,它是影响虚拟机性 能的重要因素。在这一章,我们对虚拟机的运行日、j 数据区中的方法区、堆、栈、 寄存器和本地码栈作了详细的分析介绍。住虚拟机的内存管理中,为简化虚拟 机的内存空1 只j 管理常将方法区、栈和寄存器等在堆中实现,统一出垃圾收集器 来管理。 1 3 嵌入式j a v a 虚拟机内存储器管理技术研究 第三章自动内存管理策略 j a v a 语言与c c + + 的一个显著的区别就在于j a v a 语言不再通过指针来直接 访问内存,而提供的是引用。抛弃了指针有效地防止了c c + + 语言中指针操作 失误所造成的系统崩溃,这大大提高了j a v a 程序的安全。但也不是说j a v a 没 有指针,虚拟机内部还是使用了指针,只是由虚拟机来统一管理起来而虚拟机 外部不得使用而已。抛弃了指针,那么内存空间的分配和回收是如何实现的呢? j a v a 虚拟枫采用的是自动内存管理功能,在这一章,我们会对j a v a 虚拟机的自 动内存管理的策略问题作研究。 3 1 分配策略 大多数主流的语言或运行环境都支持三种最基本的内存分配方式,它们分别 是: 静态分配( s t a t i ca l l o c a t i o n ) :静态变量和全局变量的通常采用这种分配形式, 它们无需内存释放和回收。 自动分f i g ( a u t o m a t i ca l l o c a t i o n ) :这是在栈中为局部变量分配内存的方法, 栈中的内存可以随着代码块退出时的出栈操作被自动释放。 动态分配( d y n a m i ca l l o c a t i o n ) :这是在堆中动态分配内存空间以存储数据的 方式。 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 对象。当然,这可能涉及到页对齐或者字对齐等,需要由具体的 硬件平台和操作系统来确定。块的组织上一般不要求在连续的物理空间上,块 与块之阿通过链表( 如图3 - l 所示) 管理起来,它需要设置块首指锋帮块尾指针来 指出第一块和最后一块。 图3 - 1 块的管理 块可能是已经分配绘对象的对象块或者是未分配出去的空闵块,当一个对象 请求为其分配空间时,就需要查找空闲块链表,根据某种分配策略找到合适大 小的空间后就从空闲链表中分离出来。对于查找合适大小的空闲空间可以采用 如下一些策略: 最先匹配,即选择第一块足够大小的空闲块; 最佳匹配,把最接近申请大小的那一块分配给对蒙,通常需要对空闲空间按 从小到大排序; 最差匹配,即将最大的鄢块空闲块分配给对象。 通常,空闲块的管理并不单纯使用链式结构,可能需要将不同的管理策略结 合其来寻求最佳的分配方法。因而我们会在以后的设计中结合起来讨论内存的 分配问题。 3 2 垃圾回收策略 在j a v a 虚拟机的堆里存放着正在运行的j a v a 程序所创建的所有对象。使用 n e w 、n e w a r r a y 等指令来创建对象,但是没有明确的代码来释放它们。垃圾收集 就是自动释放不再被程序所使用的对象的过程。垃圾收集器必须能断定哪些对 嵌入式j a 、,a 虚拟机内存储器管理技术研究 象是不再被引用的,哪些对象是活动的,并且能够把不再被引用的对象所占据 的空间释放出来,而不影响活动对象。同时,由于空间的不断分配和回收,必 然会形成大量的堆碎片,堆碎片占用空间且不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论