(计算机软件与理论专业论文)一种嵌入式java虚拟机编译技术优化研究.pdf_第1页
(计算机软件与理论专业论文)一种嵌入式java虚拟机编译技术优化研究.pdf_第2页
(计算机软件与理论专业论文)一种嵌入式java虚拟机编译技术优化研究.pdf_第3页
(计算机软件与理论专业论文)一种嵌入式java虚拟机编译技术优化研究.pdf_第4页
(计算机软件与理论专业论文)一种嵌入式java虚拟机编译技术优化研究.pdf_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

摘要 j 2 m e ( j a v a2 m i c r oe d i t i o n ) 是s u n 公司针对消费电子和嵌入式设 备制定的j a v a2 技术的精简版本。m i d p ( m o b i l ei n f o r m a t i o nd e v i c e p r o f i le ) 是j 2 m e 针对移动通信设备设计的一个子集。j 2 m e m i d p 为移动 通信设备提供了一个统一的开发平台,使得开发人员可以快速为不同 的移动通信设备开发完全可移植的增值应用,而无需考虑设备的软硬 件差别。 j 2 m e m i d p 应用要在移动通信领域取得成功,其运行性能是一个关 键因素。今年来,多种性能优化技术在j a v a 虚拟机中的成功运用使得 j a v a 在p c 工作站和服务器端的性能已经达到了接近或超过c 程序性能 的水平,然而嵌入式平台又给j a v a 虚拟机的性能优化提出了新的要求。 移动通信设备通常只具备相当有限的计算能力,存储能力和电力供应, 这些特殊情况大大制约了现行的复杂的优化技术在嵌入式设备上的应 用。 本文分析了应用于j a v a 虚拟机的几种主要性能优化技术,并针对 具体的硬件提出并实现了一种部分借鉴h o t s p o t 技术将解释执行与即 时编译相结合的嵌入式j a v a 虚拟机性能优化方案。该方案能有效提高 嵌入式j a v a 虚拟机的性能。 随着移动通信市场的高速发展和对增值应用需求的快速增长,在 最近几年,j 2 m e m i d p 技术将在移动通信市场中扮演一个举足轻重的角 色,而对嵌入式j a v a 虚拟机性能优化的研究工作也就具有重要的实用 价值。本文所介绍的优化方案已经应用于成都万创科技有限公司的 v t j v m 中。对v t j v m 的测试表明该方案在性能上有了很大的提高。最后 对该系统进行总结,并指出将来的改进工作。 关键词:j a v a 虚拟机,h o t s p o t ,j 2 m e ,即时编译 a b s t r a c t t h ej a v a2p l a t f o r m ,m i c r oe d i t i o n ( j 2 m e ) i st h ej a v ap l a t f o r mf o r c o n s u m e ra n de m b e d d e dd e v i c e ss u c ha sm o b i l ep h o n e s ,p d a so rt v s e t t o pb o x e s t h em o b i l ei n f o r m a t i o nd e v i c ep r o f i l e ( m i d p ) ,c o m b i n e d w i t ht h ec 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 ( c l d c ) ,i sas u b s e to f j 2 m ef o r t o d a y s m o b i l ei n f o r m a t i o n d e v i c e s ( m i d s ) s u c h a sm o b i l e p h o n e sa n de n t r yl e v e lp d a s j 2 m e m i d pe n a b l e sd e v e l o p e r st od e v e l o p j a v aa p p l i c a t i o n sf o rm i d se a s i l y ,q u i c k l ya n dw i t hf u l lp o r t a b i l i t y t h er e a ls u c c e s so fj 2 m e m i d pd e p e n d so ni t s p e r f o r m a n c e o n m l d s d u et or e s o u r c ec o n s t r a i n t so fm l d s ( s l o wc p u s m a l lm e m o r y & l i m i t e db a t t e r i e s ) ,t h ec o m p l i c a t e dp e r f o r m a n c et e c h n i q u e sd e v e l o p e df o r d e s k t o pp c sa n d o rs e r v e r s ( s u c h a s j i t ,a d a p t i v ec o m p i l i n g o rs t a t i c c o m p i l a t i o n ) c a nh a r d l yb ea p p l i e dt oj 2 m e m d p t h i sd i s s e r t a t i o nd e s c r i b e so u rw o r ko na n a l y z i n gt h ek e yt e c h n i q u e s o fo p t i m i z a t i o no fc o m p i l i n gc o d e b y t e w ep u tf o r w a r dt h ep o l i c yt h a t c o m b i n e st h ei n t e r p r e t e rw i t ht h ej u s t - i n - t i m ec o m p i l e ru s i n gh o t s p o t t e c h n o l o g ya n da p p l yi t i ne m b e d d e dj v mv t j v m t h et e s tt ov t j v m i n d i c a t e st h i ss c h e m eh a sb e e n i m p r o v e d a1 0 to n p 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 e i m p r o v e m e n ti n t h e f u t u r e k e y w o r d s :j v m ,h o t s p o t ,j 2 m e ,j i t i i 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工 作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地 方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含 为获得电子科技大学或其它教育机构的学位或证书而使用过的材料。 与我一同工作的同志对本研究所做的任何贡献均己在论文中作了明 确的说明并表示谢意。 签名: i 墨夔日期:护厂年f 月f f 日 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁 盘,允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文 的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或 扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后应遵守此规定) 签名:薹复 导师签名: 蔓癌多八 日期:三卯 年f 月,占日 一种嵌入式j a v a 虚拟机编译技术优化研究 1 1 课题背景 第一章引言 在我们今天的生活中,个性化的智能信息消费品已经日益成为人 们生活的必需品。这些消费品包括移动电话、寻呼机、智能卡、个人 电脑记事本( p e r s o n a lo r g a n iz 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 8 k b 的 存储器的微型设备上运行j a v a 程序。这些设备都符合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 ) ,同时也保留了j a v a 的传统特性,即 任何时间、任何地点的代码可移植性、部署灵活性、安全的网络传送 以及代码稳定性。j 2 m ec l d c 的先决条件是一个紧缩的j v m ,称为k 虚拟 机( kv i r t u a lm a c h i t i e ( k v m ) ) 。另一个j 2 m e 配置是c d c ( c o n n e c t e d d e v i c ec o n f i g u r a t i o n ) 。它的目标是高档的消费类电子产品。典型地, 这些设备运行一个3 2 位的微处理器控制器,而且有总量大于2 m 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 l m o s 上所实现的。为了达到让应用程序本身能够跨平台的缘故, 已经有许多公司积极地将k v m 放置到本身的产品之中,例如i b m 的 v is u a l a g em ic r oe 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 av m 、 i n s i g n i as o l u t i o n s 的j e o d ev 1 等,还有就是较多的o p e ns o u r c e 产品。 国外对嵌入式j a v a 虚拟机的研究和应用作了很多工作,但是还是不能 够达到一个令人满意的程度,所以很多大公司都在不停地研究提升自 己产品的性能。2 0 0 4 年3 月,s u n 针对这类应用提出了c l d ch o t s p o t i m p le m e n t a t i o nv ir t i a l m a c h in e 白皮书,它将应用于j 2 e e 和j 2 s e 平 台的h o t s p o t 技术转移到j 2 m e 平台,这对提高应用于嵌入式系统环境的 虚拟机技术有很大的指导作用。 一种嵌入式j a v a 虚拟机编译技术优化研究 而国内的研究工作虽然相对比较落后,也有了一些相关的产品出 现,但随着3 g 技术和产品的出现与运用,还有很多的研究和开发工作 需要去做。因此,本文就是从j 2 m e 中的j a v a 虚拟枫的字节码执行技术 的角度来研究如何设计相应的算法,从而从整体上提高系统的性能的。 1 2 嵌入式实时系统简介 1 2 1 嵌入式系统 嵌入式系统没有一个非常明确的定义,这是由于硬件性能的提升 和价格的下降使通用计算机和嵌入式系统之间的界限变得很模糊,技 术的进步使得人们很难定义什么是嵌入式。一般说来,大部分的嵌入 式系统执行特定的任务。这种特定的功能限定使嵌入式设备有功能上 的惟一性。 嵌入式系统自动化程度高、性能强、速度快。用户不需要知道嵌 入式系统的处理机和操作系统的具体细节,一般也不需要被用户编程。 当然,有的嵌入式系统会提供应用程序级的开发,从而可以为用户提 供丰富的内容。它有一些专用的i 0 设备,对用户的接口是应用专用的。 嵌入式系统广泛应用于办公自动化、消费电子产品、通信、汽车、 工业控制和军事领域等。其中,通信、办公自动化和消费电子产品占 的份额最大,约占9 0 以上。 1 2 2 实时系统 实时系统是对外来事件在限定对问内能作出反应的系统。限定时 间的范围很广,可以从微秒级( 如信号处理) 到分秒级( 如联机查询系 统) 。 实时控制系统和实时信息处理系统统称为实时系统。在实时控制 系统中计算机通过特定的外围设备与被控对象发生联系,被控对象的 信息经加工后,通过显示屏幕向控制人员显示或通过外设向被控对象 发出指示,实现对被控对象的控制:在实时信息处理系统中,用户通 过终端设备向系统提出服务请求,系统完成服务后通过终端回答给用 户。 在实时系统中主要有响应时间、生存时间、吞吐量三个指标来衡 量系统的实时性。 一种嵌入式j a v a 虚拟机编译技术优化研究 实时系统的软件是实时应用软件和实时操作系统r t o s ( r e a l t i m eo p e r a t i n gs y s t e m ) 两部分的有机结合,其中r t o s 起着核 心作用,由它来管理和协调各项工作,为应用软件提供良好的运行软 件环境及开发环境。 从系统响应时间的确定性上来说,实时系统一般是指硬实时系统 和软实时系统,硬实时系统保证系统事件响应的确定性,认为延迟的 响应是系统错误;软实时系统试图使事件响应的时间减到最小,而不 将延迟的响应看作系统错误。 1 3 j v 技术简介 1 3 1 j a v a 平台体系结构 如图1 1 所示,j a v a 的整体结构主要由两个部分构成,即虚拟机 ( v i r t u a lm a c h i n e ) 和应用程序接口( a p i ) 。 a p p l e t sa n da p p l i c a t i o n s j a v a b a s e a p ij a v as t a n d a r de x t e n s i o na p i j a v ab a s ec l a s s e sj a v as t a n d a r de x t e n s i o nc l a s s e s j a v a 虚拟机 移植界面层 a d a p t e ra d a p t e r a d a p t e r 浏览器j a v a 0 s 操作系统 小型操作系统 操作系统 硬件硬件硬件硬件 图】一1j a v a 系统结构图 我们可以把虚拟机看成是一套虚拟的计算机,有一个标准的规格 可以用软件或硬件来实现。而位于j a v a 虚拟机下层的移植接口层和 a d a p t e r 是为了使j a v a 虚拟机能够方便地移植到不同的操作系统平台 上而开发设计的。另外,位于j a v a 虚拟机之上的j a v aa p i 部分则包含 一种嵌入式j a v a 虚拟机编译技术优化研究 了基本的a p i 类与扩展的a p i 类,如标准的i 0 功能、网络功能、g u i 和 应用类等。 1 3 2j a v a 程序运行过程 我们用文本编辑器或j a v a 集成开发环境编写的j a v a 源代码经过 j a v a 编译器的编译,被转换成特殊的j a v a 字节码( b y t e c o d e ) 。程序加 载器在加载b y t e c o d e 时会对其进行验证,并从类库中动态加载所需使 用的j a v a 类,而后交给位于j a v a 虚拟机内部的解释器( i n t e r p r e t e r ) 或 即时编译器( j u s t i n t i m ec o m p i l e l ) 执行,最后交给j a v a 运行时环境 ( r u n t i m es y s t e m ) 来运行。如图卜2 所示: 1 3 3j a v a 平台版本 图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 运行环境就显得不再适合了。 因此,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 为小型的资源有限的设备开发应用的开发商。 虽然三个版本面向不同的应用,但是这三个版本之间存在着包容关 系,可以从图卜3 中看出: 1 3 4j 2 m e 图卜3j 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 a2 m ic r oe d i t io n ) 这套j a v a 版本来符合像p d a 这类资源有限设备的需求。 j 2 m e 主要瞄准两类广泛的产品: 1 共享固定设备( s h a r e d ,f ix e d ,c o n b e c t e di n f o r m a t i o n d e v ic e s ) ,这一类归属于c d c ( c o n n e c t e d d e v ic e 一种嵌入式j a v a 虚拟机编译技术优化研究 c o n f i g u r a t i o n ) ,如电视机顶盒、数字电视、视频电话、高端 通讯设备、车载娱乐或导航系统等。这类设备相对来说内存较 大,能够保持持续高带宽的网络连接,而且常使用t c p i p 协议。 2 个人移动设备( p e r s o r l 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 i l d e v ic e s ) ,这一类归属于c l d c ( c o n n e c t e d ,l i i l l i t e dd e v i c e c o n f i g u r a t i o n ) ,如移动电话、传呼机和p d a 等。这类设备有 非常简单的用户接口,有限的内存容量和低带宽的网络连接。 对于这两类设备,我们可以从图卜3 的j 2 m e 平台结构中看出。 ei 口 厂 i 垦垦里璺 j p r o f i l e s c o n f i g u r a t i o n j a v av i r t u a lm a c h i n e h o s to p e r a t i n gs y s t e m 图1 4j 2 m e 平台结构图1 5j 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 ) 两个概念。 1 配置( c o n f i g u r a t i o i l ) ,j 2 m e 配置层为一类或一组设备从横向 定义了一个最小平台,比如需要的总的存储器大小和处理器性 能,同时定义了j a v a 语言和虚拟机的特征以及最小类库。这些 定义可阻应用于同类的所有设备。 2 简要表( p r o f i l e ) ,简要表层位于配置层的上部,它从纵向定 义了某一类设备的特定需求。它为一类设备在j a v a 最小类库基 础上扩充了类库,从而为应用开发者提供一定的接口和工具框 架,以此开发一系列基本的应用软件。 3 2 m e 主要目的是在为小型的资源有限的设备定义一套完整的规 范,它涵盖了各式各样的消费性电子产品。虽然它是为小型设备服务 的,但它同样维持了j a v a 技术的重要特性。j 2 m e 技术已经广泛应用到 大量的消费类电子产品,特别是在移动通信设备上,这些设备已经日 6 一种嵌入式j a v a 虚拟机编译技术优化研究 益成为了人们生活中不可缺少的一部分。 1 4 课题来源 本课题来源于成都万创科技有限公司申请的全国中小企业创新基 金项目多媒体嵌入式无线j a v a 移动终端通信平台,该项目主要对移 动终端设备的软硬件进行研究,包括g p r s c d m a 2 0 0 0 通信模块、嵌入 式实时l i n u x 系统、i n t e l x s c a le p x a 2 5 5 高性能处理器应用开发、嵌 入式j a v a 虚拟机v t j v m 等,从而推动3 g 多媒体无线产品的开发和应用。 本文作者在该项目中负责对j a v a 虚拟机的字节码执行模块进行优化。 1 5 论文安排 本论文主要是对嵌入式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 i t 和 h o t s p o t 技术进行了详细分析。 第四章:v t j v m 技术方案 根据目前的应用环境和嵌入式硬件的发展水平在对第三章中的各 种方法分析的基础上提出了一套的适用于本公司嵌入式硬件平台的 j a v a 虚拟机性能优化方案,说明其工作原理和技术特点。 第五章:v t j v m 技术方案实现 说明嵌入式j a v a 虚拟机性能优化方案的实现过程。 第六章:性能测试 通过一些简单的测试案例来对v t j v m 和k a f f e 进行横向的比较,表 明在性能上有了一定的提高。 一种嵌入式j a v a 虚拟机编译技术优化研究 第七章:结论及将来的工作 对该系统进行总结,讨论本课题的成功与不足之处,并指出将来 改进工作的方向和目标。 一种嵌入式j a v a 虚拟机编译技术优化研究 第二章j a v a 虚拟机技术 2 1 j a v a 虚拟机简介 j a v a 的面向网络的核心就是j a y a 虚拟机,它支持j a y a 面向网络体 系结构三大支柱的所有方面:平台无关性,安全性和网络移动性。虚 拟机是在实际的计算机上通过软件模拟出来的虚拟计算机“3 。j a v a 虚 拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的 指令系统。它的作用是向上层应用程序提供了一个抽象层。在一个分 层的应用系统中,虚拟机扮演着最底层的角色,该层提供本地环境的 抽象( 屏蔽本地差异) 。要移植一个应用程序到别的平台,只需要重新 实现虚拟机就可以了,因为应用程序使用的是同样的抽象层接口,所 以应用程序不需要任何修改。 j a v a 源程序经编译器以后生成j a v a 字节码,运行于j a v a 虚拟机上。 虚拟机的基本结构如图2 1 所示: 程序的c l a s s 文件+ j a v a a p i 的 c l s a a 文件 图2 1j a v a 虚拟机基本结构图 和传统的编译型面向对象语言相比, 性。这些特性包括( 但不限于) : 1 ) 目标代码( b y t e c o d e ) 与平台无关, 2 ) 不支持指针; j a v a 语言拥有一些重要的特 完全可移植 3 ) 用内置的垃圾回收器取代传统的显式内存分配与回收操作; 4 ) 多线程支持。和c c + + 语言不同,这种多线程支持是j a v a 语言 9 一种嵌入式5 a v a 虚拟机编译技术优化研究 标准的一部分,与平台和操作系统无关; 5 ) 运行时的安全检查,包括字节码校验、数组边界检查、类型转 换检查等; 6 ) 9 a v a 类可以在运行时动态加载; 7 ) 统一的数据类型。整数类型规定为3 2 位,长整形为6 4 位,单精 度浮点数为3 2 位,双精度浮点数为6 4 位,字符为1 6 位: 8 ) 内置的u n ic o d e 支持。 2 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 虚拟机实例通过调用某个初始类的 m a i n 0 方法来运行一个j a y a 程序。而这个m a i n 0 方法必须是p u b l i c , s t a t ic ,返回值为v o i d 。m a i n ( ) 方法作为该程序初始线程的起点,任何 其他的线程都是由这个初始线程启动的。 j a v a 虚拟机内部有两种线程:守护线程和非守护线程。守护线程 通常由虚拟机自己使用的,比如执行垃圾收集任务的线程。但是,j a v a 程序也可以把它的创建的任何线程标记为守护线程。而j a v a 程序中的 初始线程,就是开始于m a i n ( ) 的那个,是非守护线程。只要有非守护 线程在运行,那么这个j a v a 程序也在继续运行,只有该程序中所有的 非守护线程都终止时,虚拟机实例将自动退出。 2 3 j a v a 虚拟机的内部体系结构 j a v a 虚拟机的结构分为:类装载子系统,运行时数据区,执行引 擎,本地方法接口。其中运行时数据区又分为:方法区,堆,j a v a 栈, p c 寄存器,本地方法栈。其结构框图如下。 j a v a 虚拟机由五个部分组成:一组指令集、一组寄存器、一个栈、 一个无用单元收集堆( g a r b a g e c o i le c t e d h e a p ) 、一个方法区域。如 图2 2 所示,这五部分是j a v a 虚拟机的逻辑成份,不依赖任何实现技术 或组织方式,但它们的功能必须在真实机器上以某种方式实现。 1 0 一种嵌入式j a v a 虚拟机编译技术优化研究 图2 - 2j a v a 虚拟机的内部体系结构 每个j a v a 虚拟机都有一个类装载器子系统,它根据给定的全限定 名来装入类型( 类或接口) 。同样,每个j a v a 虚拟机都有一个执行引擎, 它负责执行那些包含在被装载类的方法中的指令。 2 3 1 数据类型 j a v a 虚拟机是通过某些数据类型来执行计算的。数据类型可以分 为两种:基本类型和引用类型。对于不同的数据类型的运算在j v m 的 有不同的指令去执行,比如i a d d ,l a d d ,f a d d 就是分剐针对i n t ,l o n g , f l o a t 的加法运算,而且它们的执行效率也不一样。j a v a 虚拟机支持 j a v a 语言的数据类型图2 3 所示: 一种嵌入式j a v a 虚拟机编译技术优化研究 数组类型 图2 - 3j a v a 虚拟机中的数据类型 j a v a 语言中的所有基本类型同样也都是j a v a 虚拟机中的基本类 型。但是b 0 0 1e a n 有点不同,j a v a 虚拟机指令集对b o o le a n 只有很有限 的支持。r e t u r n a d d r e s s 是个只在内部使用的基本类型,j a v a 程序员 不能使用。j a v a 虚拟机的引用类型被统称为“引用( r e f e r e n c e ) ”,有 三种引用类型,他们的值都是对动态创建对象的引用。类类型的值是 对类实例的引用;数组类型的值是对数组对象的引用( 在j a v a 虚拟机中 数组是个真正的对象) :接口类型的值是对实现了该接口的某个类实例 的引用。 几乎所有的j a v a 类型检查都是在编译时完成的。上面列出的原始 数据类型的数据在j a v a 执行时不需要用硬件标记。操作这些原始数据 类型数据的字节码( 指令) 本身就已经指出了操作数的数据类型,例如 i a d d 、l a d d 、f a d d 和d a d d 指令都是把两个数相加,其操作数类型别是 i n t 、l o n g 、f l o a t 和d o u b le 。虚拟机没有给b o o l e a n ( 布尔) 类型设置单 独的指令。b o o e a n 型的数据是由i n t e g e r 指令,包括i n t e g e r 返回来处 理的。b o o l e a n 型的数组则是用b y t e 数组来处理的。虚拟机使用i e e e 7 5 4 格式的浮点数。不支持i e e e 格式的较旧的计算机,在运行j a v a 数值计算 程序时,可能会非常慢。 一种嵌入式j a v a 虚拟机编译技术优化研究 2 3 2 类装载器子系统 类装载子系统负责查找并装载类型。j a v a 虚拟机有两种类装载器: 启动类装载器和用户自定义类装载器。前者是j a v a 虚拟机实现的一部 分,后者则是j a v a 程序的一部分。有不同的类装载器装载的类将被放 在虚拟机内部的不同命名空间中。类装载器子系统除了要定位和导入 二进制c l a s s 文件外,还必须负责验证被导入类的正确性,为类变量分 配并初始化内存,以及帮助解析符号引用。这些动作必须严格按以下 顺序进行: 1 ) 装载:查找并装载类型的二进制数据; 2 ) 连接:执行验证,准备,以及解析( 可选) ; 验证:确保被导入类型的正确性。 准备:为类变量分配内存,并将其初始化为默认值。 解析:把类型中的符号引用转换为直接引用。 3 ) 初始化:把类变量初始化为正确初始值; 2 3 3 运行时数据区 当j a v a 虚拟机运行一个程序时,它需要内存来存储许多东西,例 如,字节码、从已装载的c l a s s 文件中得到的其他信息、程序创建的对 象、传递给方法的参数、返回值、局部变量,以及运算的中间结果等 等。j a v a 虚拟机把这些东西都组织到几个“运行时数据区”中,以便 于管理,其结构如图2 - 2 中所示。 运行时数据区部件可分为两种:公共部件和线程私有部件。公共 部件由程序中所有线程共享,线程私有部件只能由一个线程拥有。 2 3 3 1 公共部件 公共部件即为可以被虚拟机内所有的线程访问的部件。这些部件 包括:方法区和堆。当虚拟机装载一个c l a s s 文件时,它会从这个c l a s s 文件包含的二进制数据中解析类型信息。然后,它把这些类型信息放 到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的 对象都放到堆中。如图2 - 4 所示: 一种嵌入式j a v a 虚拟机编译技术优化研究 图2 4 所有线程共享的运行时数据区 对于每个装载的类型,虚拟机都会在方法区中存储以下类型信息: 1 ) 这个类型的全限定名: 2 ) 这个类型的直接超类的全限定名( 除非这个类型是 j a v a 1 a n g 。o b j e c t ,它没有超类) ; 3 ) 这个类型是类类型还是接口类型; 4 ) 这个类型的访问修饰符( p u b l ic 、a b s t r a c t 或f i n a l 的某个子 集) ; 5 ) 任何直接超接口的全限定名的有序列表; 6 ) 字段信息; 7 ) 方法信息; 8 ) 除了常量以外的所有类( 静态) 变量。 j a v a 程序在运行时创建的所有类实例或数组都放在同一个堆里。 而一个j a v a 虚拟机实例中只存在一个堆空间,因此所有线程都将共享 这个堆。又由于一个j a v a 程序独占一个j a v a 虚拟机实倒,因而每个j a v a 程序都有自己的堆空间,不会彼此干扰。 2 3 3 2 私有部件 私有部件即只可被对应线程访问的部件。私有部件包括:j a v a 栈、 p c 寄存器、本地方法栈( 可选) ,如图2 - 5 所示。当每一个新线程被创建 时,它都将得到它自己的p c 寄存器( 程序计数器) 以及一个j a v a 栈。如 果线程正在执行的是个j a v a 方法( 非本地方法) ,那么p c 寄存嚣的值 一种嵌入式j a v a 虚拟机编译技术优化研究 将总是指示下一条将被执行的指令,而它的j a v a 栈则总是存储该线程 中的j a v a 方法调用的状态,包括它的局部变量,被调用时传进来的参 数,它的返回值,以及运算的中间结果等等。而本地方法调用的状态, 则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在 寄存器或者其他某些与特定实现相关的内存区中。 线程】线程2线程3 陌习 圈i 囤线程3 i 一 墓 茵 栈帧 i 一 广i j 栈帧i i _ j 厂 ;l 栈帧i i 一 本地方法栈 图2 - 5 线程专有的运行时数据区 j a v a 栈是由许多栈帧( s t a c kf r a m e ) 组成的,一个栈帧包含一个 j a v a 方法调用的状态。当线程调用一个j a y a :y 法时,虚拟机压入一个 新的栈帧到该线程的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 虚拟机的这种基于栈的体系结构,也有助于运行时某些虚拟机实现的 动态编译器和即时编译器的代码优化。如图2 - 5 ,它描绘了j a v a 虚拟机 为每一个线程创建的内存区,这些内存区域是私有的,任何线程都不 能访问另个线程的p 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 虚拟机指令集的一种可编程 扩展。如果某个虚拟机实现的本地方法接口是使用c 连接模型的话,那 么它的本地方法栈就是c 栈,它的调度与使用则完全与c 栈相同。图2 6 描绘的是一个j a v a 方法调用本地方法,然后本地方法又回调另一个 j a v a 方法时j a v a 虚拟机内部线程运行的全景图。 该j a v a 方法调用 了一个本地方法 当前栈帧 一 一 、l _ 一 o j a v a 栈本地方法栈 这个c 函数调用了 另一个c 函数 这个c 函数调用了 一个l a v a 方法 图2 - 6 一个线程调用j a v a 方法和本地方法时的栈 2 4 类文件格式 j a v a 类文件是对j a v a 程序二进制文件格式的精确定义。每一个 j a v ac 1 a s s 文件都对一个j a v a 类或j a v a 接口做出了全面描述。无论j a v a c l a s s j c 件在何种系统上产生,无论虚拟机在何种系统上运行,对j a v a c l a s s 文件的精确定义使得所有j a v a 虚拟机都能够正确地读取和解释 所有j a v ac l a s s 文件,从而严格保证了j a v a 程序的可移植性。( c l a s s 文件格式定义了一个类或接口的表示方法,包括一些细节比如那些用 于表示特定平台对象的文件格式的二进制序列。) 一种嵌入式j a v a 虚拟机编译技术优化研究 j a v a 类文件是8 5 字节的二进制流。数据项按顺序存储在类文件 中,相邻的项之间没有任何间隔,这样可以使类文件紧凑。占据多个 字节空间的项按照高位在前的顺序分为几个连续的字节存放。和j a v a 的类可以包含多个不同的字段、方法、方法参数、局部变量等样, j a v a 类文件也能够包含许多不同大小的项。在类文件中,可变长度项 的大小和长度位于其实际数据之前。这个特性使得类文件流可以从头 到尾被顺序解析,首先读出项的大小,然后读出项的数据。我们把j a v a f i l a s s 的架构名称称为c 1 a s s f i l e ,其结构如下: c 1 a s s f j l e u 4 m a g i c n u m b e r用于分辨该文件是否是j a v a 类文件 u 2 m i n o r v e r s i o n该项和m a j o r v e r s i o n 项共同指明该 j a v a 类文件版本号 u 2 m a j o r v e f s i o n u 2c o n s t a n t p o o l c o u n t 常量池数组的大小 c p i n f oc o n s t a n t p o o l c o n s t a n t p o o l c o u n t 1 常量池 数组 u 2 a e c e s s f l a g s代表该c l a s s 或i n t e r f a c e 的存取权限以及 性质 u 2 t h i s _ c l a s s 索引值 u 2s u p e r c l a s s 项目的索引值或者为零 个指到常量池数组中某个项目的 为指向常量池数组中某个c o n s t a n t c l a s s u 2 i n t e r f a c e s c o u r t t 在文件中由该类直接实现或者由接口所 扩展的父接口的数量 u 2 i n t e r f a c e s i 肌e r f a c e s c o u n t 接口数组 u 2 f i e l d s c o u n t类变量和实例变量的字段的数量总合 f ie l d j n f o f ie l d s f ie ld s c o u n t 字段数组 u 2 m e t h o d s c o u n t代表j a v a 类文件中的由类或接口定义的所 有方法的总数 m e t h o d j n f o m e t h o d s m e t h o d s c o u n t 方法数组 u 2 a t t r ib u t e s c o u n t指出现在后续a t t r i b u t e s 列表中的 a t t r i b u te - i n f o 表的数量总和。 一种嵌入式j a v a 虚拟机编译技术优化研究 a t t r i b u t e - i n f oa t t r ib u t e s a t t r i b u t e s c o u n t 属性数组 】 2 5j a v a 字节码 j a v a 字节码也被称为j a y a 虚拟机指令集( j a v av i r t u a l m a c h i n e i n s t r u c t i o ns e t ) 。与具体的c p u 指令集类似,j a v a 字节码就是运行于 j a v a 虚拟机上的指令集。每条j a v a 字节码长度为一个字节( 8 位) ,因此 被称为字节码。j a v a 虚拟机支持大约2 4 8 个字节码。j a v a 指令集相当于 j a v a 程序的汇编语言。j a v a 指令集中的指令包含一个单字节的操作符, 用于指定要执行的操作,还有0 个或多个操作数,提供操作所需的参数 或数据。许多指令没有操作数,仅由一个单字节的操作符构成。 j a v a 虚拟机是一种栈式虚拟机,字节码的所有运算操作都基于堆 栈。这种栈式结构大大简化了字节码的设计,同时也将优化工作留给 j v m 的具体实现去完成。 大部分标准j a v a 字节码完成的功能常常可以对应到具体c p u 的机 器指令,如各种常量和变量的入栈出栈指令,给予堆栈的算术和逻辑 运算指令,跳转和转子程序返回指令等。另一部分标准j a v a 字节码完 成的功能则要复杂的多,包括分配对象实例,异常处理,类型检查, 同步,虚方法调用等。 2 6 类库 c l d c 所定义的类库是标准j a v a 平台版本的一个子集合,而且是直 接继承与j 2 s e 的核心类库,包含系统类、文件类、集合类及输入输出、 时间、数学、异常等类。 一种嵌入式j a v a 虚拟机编译技术优化研究 第三章j a v a 虚拟机的字节码执行技术 用j a v a 编程语言编写的应用程序般依赖于四个因素: 】应用程序的总体设计; 2 执行j a v a 字节码的速度; 3 库执行( 用本地代码) 的速度; 4

温馨提示

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

评论

0/150

提交评论