【vfp开源代码栏目提醒】:网学会员,鉴于大家对vfp开源代码十分关注,论文会员在此为大家搜集整理了“基于ARM7_uClinux的JVM移植研究 - 讲义教程”一文,供大家参考学习!
慨分类号:——工学硕士学位论文密级:——编号:——基于ARM7/uClinux的JVM移植研究硕士研究生:指导教师:学位级别:学科、专业:所在单位:论文提交日期:论文答辩日期:学位授予单位:郑超峰李静梅教授工学硕士计算机系统结构计算机科学与技术学院2008年12月2009年3月哈尔滨工程大学哈尔滨T程大学硕十学位论文摘要Java虚拟机是Java的核心技术之一,是Java技术实现“平台无关”特性的基础。
Kaffe虚拟机是一款能够净室执行的
开源Java虚拟机,是需要执行Java应用程序的
开源嵌入式系统的很好选择。
但Kaffe目前并不支持MMU(MemoryManagementUnit).Less的嵌入式处理器和操作系统以简化系统设计,因此本文的研究目的就是通过对Kaffe的一些特性进行修改并附加相关类库,将其移植到正在广泛使用的ARM7/uClinux嵌入式平台上,构建‘‘Java运行时环境”使该平台能够执行Java应用程序。
本文为k疵虚拟机建立了全新的平台配置文件和初始化文件,对Kaffe虚拟机包含解释器和即时编译器等核心组成部分进行平台相关文件的完善和修改。
根据ARM7处理器的指令长度和数据类型等方面的特点,对Ka氐虚拟机的数据结构进行了重新设置。
根据ARM7和uClinux的MMU.Less的特点,在Kaffe的处理器配置文件中定义新的宏操作来协助ARM7访问内存,并且通过GLIBC来查找本地方法中内存管理的处理方法。
因为ARM7处理器采用了FPA(浮点协处理器)和VFP(向量浮点协处理器)两种不同的浮点运算单元,而Kaffe虚拟机目前仅支持FPA方式,所以本文又设计了不同的处理机制完成K疵虚拟机对VFP方式的支持。
采用iMocha和SciMark工具集对上述研究内容进行系统测试的结果表明,改进后的Kaffe虚拟机能够在MMU.Less的ARM7/uClinux嵌入式平台上运行,同时支持Java应用程序的正常执行。
最后,对Kaffe虚拟机与Wonka虚拟机的运行数据进行了比较,结果证明Kaffe虚拟机不仅在一些操作上具有速度优势,并且能够完成Wonka虚拟机所不具备的字符动态连接和字符串连接的功能。
关键词:Java虚拟机:Kaffe虚拟机:ARM处理器;uClinux;移植哈尔滨丁程大学硕士学位论文AbstractJavaVirtualMachinewasoneofcoI.ctechnologiesinJava,whichWasthebasicof”platform-independent”characteristic.KaffevirtualmachineWasaclean-roomandopensourceJavaVirtualMachine,WhichWasgoodchoicetoexecuteJavaapplicationinopensourceembeddedsystems.ButcurrentlyKaffedidnotsupporttheembeddedprocessorsandoperatingsystemswhichwereMMU(MemoryManagementUnit)一Lesstosimplifythesystem,SOthepurposeofthispaperwastoportKaffetoARM7/uClinuxthatWaspopularembeddedplatform,bymodifyingsomecharacteristicsandaddingrelatedclasslibrariesinKaffe,building”Javaruntimeenvironment”tomakeJavaapplicationsrunonit.NewfilesofplatformconfigurationandinitializationwereestablishedforKaffeinpaper,platform-relateddocumentswhichwerekernelofKaffelikeinterpreterandjust-in-timecompilerwereimprovedandmodified.AccordingtothecharacteristicssuchaslengthoftheinstructionsanddatatypesofARM7,datastructureofKaffewasreset.AccordingtoMMU—LesscharacteristicofARM7anduClinux,newmacrooperationsweredefinedinKaffeprofiletoassistARM7accessingmemory,andmemorymanagementapproachinlocalmethodswassearchedbyGLIBC.BecauseARM7usedFPA(floating—pointco-processor)andVFP(vectorfloatingpointCO—processor)whichweretwodifferentfloatingpointunitsandKaffesupportedFPAonly,differentmechanismweredesignedforsupportingVFPinKaffe.ResultsfromJMochaandSciMarktoolsthatwereusedtotestsystemforreserchaboveshowedthatimprovedKaffecouldrunonMMU—LessEmbeddedPlatformARM7/uClinux,andcouldexecuteJavaapplications.Finally,dataofKaffewascomparedwithWonkavirtualmachineinthepaper,resultsprovedthatKaffedidnotonlyhavespeedadvantageinsomeoperations,butalsohadcharacter-dynamic.concatandstring—concatfunctionsthatWonkadidnothave.Keywords:Kaffevirtualmachine;ARMprocessor;uClinux;Floatoperation;P0rt哈尔滨工程大学学位论文
原创性声明本人郑重声明:本论文的所有工作,是在导师的指导下,由作者本人独立完成的。
有关观点、方法、数据和文献的引用已在文中指出,并与参考文献相对应。
除文中已注明引用的内容外,本论文不包含任何其他个人或集体己经公开发表的作品成果。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律结果由本人承担。
作者(签字):关}起IlI箪日期:)口。
乡年3月1日哈尔滨工程大学学位论文授权使用声明本人完全了解学校保护知识产权的有关规定,即研究生在校攻读学位期间论文工作的知识产权属于哈尔滨工程大学。
哈尔滨工程大学有权保留并向国家有关部门或机构送交论文的复印件。
本人允许哈尔滨工程大学将论文的部分或全部内容编入有关数据库进行检索,可采用影印、缩印或扫描等复制手段保存和汇编本学位论文,可以公布论文的全部内容。
同时本人保证
毕业后结合学位论文研究课题再撰写的论文一律注明作者第一署名单位为哈尔滨工程大学。
涉密学位论文待解密后适用本声明。
本论文(口在授予学位后即可口在授予学位12个月后口解密后)由哈尔滨工程大学送交有关部门进行保存、汇编等。
.卜作者(签字):美懈导师(签字‖辅辛糁日期:弦07年3月1日工oo,年3月1日哈尔滨工程大学硕士学位论文第l章绪论1.1课题的背景与意义在目前网络电子产品设计过程中,涉及到不同的网络设备、微处理器和在其基础之上运行的嵌入式操作系统。
它们之间存在多种标准、众多家厂商相互竞争的情况。
因此应用系统必须能够应对多种不同技术和不同标准的网络、硬件和操作系统,这使得传统的交叉开发和移植过程十分漫长。
而Java技术强大的平台无关性克服了以上缺点,为程序设计提供了方便的跨平台能力。
现在Java技术已经发展为四种独立又相互关联的技术_JavaLanguage、JavaAPI、JavaClasss以及ⅣM(JavaVirtualMachine)【¨。
其中ⅣM技术保证了平台无关性的实现,它负责在不同环境下将Java
代码进行解释和运行,这样使编程从真正意义上抛开了操作系统和硬件平台之间的壁垒,从而实现了程序的通用性。
Java出现的初衷是为电子产品的设计而准备,SUN的设计小组在进行电子设备的研发过程中发现采用C/C++的方法对设计并不适合〔21。
经过设计人员与其他相关方面的研究人员的合作,Java平台由于它的安全性、便携性、移动性和网络支持等特点,逐渐成为无线设备公认的标准执行环境。
而现在嵌入式设备多采用嵌入式微处理器和嵌入式操作系统作为平台的核心,因此能够在各类平台上执行Java应用程序是现在无线嵌入式领域的发展方向,而ⅣM针对不同平台的移植是此项技术实现的关键。
现在,嵌入式微处理器和嵌入式操作系统的种类和标准很多,加之Java虚拟机也是各具特色,选择具有代表性并且适合实际发展要求的目标平台和ⅣM才能使研究具有现实意义。
1.1.1目标平台的选择主要包括嵌入式微处理器(硬件环境)和嵌入式操作系统(软件环境)的选择:1)嵌入式微处理器代替专用集成电路(ASIC)成为嵌入式计算机系统的核心,而ARM处理器以其低功耗、低成本与高性能赢得了众多厂商的青哈尔滨工程大学硕十学位论文睐。
对于多数采用低价位战术抢占市场的国内嵌入式应用产品厂商,通常采用ARMV4架构的ARM7系列或ARM9系列作为其产品的内核。
因此针对ARM7处理器的研究在国内最为集中,ARM7也成为使用最广泛的32位嵌入式RISC(精简指令集
计算机)处理器。
2)Linux操作系统是第一款对Java提供直接支持的系统内核,具有高效率、稳定、可裁剪、可移植、源
代码开放等优点,并且内含了完整的TCP/IP
网络协议栈,因此十分适合在嵌入式网络领域应用。
现在几乎所有的Linux分发版本都能够支持Java平台的运行,专用的嵌入式Linux系统(如常见的uClinux)虽然只有几MB到十几MB,其中也包含了内核和特定的硬件驱动程序和应用程序,也为嵌入式系统运行Java应用程序提供了可行的内核环境。
1.1.2Java虚拟机的选择传统ⅣM采用的纯线性解释技术经不能满足对嵌入式网络设备越来越快的速度要求,因此要选择具有加速执行功能的Java虚拟机。
而加快JVM的执行速度主要有两个途径:1)硬件加速:利用超大规模集成电路(VLSI)组建执行Java字节码的Java处理器,其优点是提供了最大的加速比、性能可以随电子技术的进步而提高。
但由电路组成的Java处理机使系统需要更高的功率和更高的成本。
2)软件加速:采用更有效率的ⅣM组成部件(如更好的垃圾回收器、更优化的线程机制、更快的查找表机制等):采用静态分析的方法(包括流分析、解释类别分析和抽像解释等)在程序执行之前对系统进行优化;引入JIT(Just.In.Time)编译器同解释器一同嵌入到ⅣM之中;采用SDC(SelectiveDynamicCompliation)编译器仅对可以反复执行的
代码段进行编译。
其中成本较低、效果较好的方法是采用JIT和SDC编译器的方法,虽然SDC的设计节省了内存,但执行速度却受到影响,所以仅适合小型低速系统;JIT方法虽然将Java字节码转换成目标平台可执行的
代码,占用的存储空间较大,但是在大多数情况下它是软件加速中最快的一种方法。
采用JIT引擎的Kaffe虚拟机是现在广泛使用的
开源ⅣM,并且在编译过程中执行精密的流量分析和寄存器分配算法,保证了产生
代码是最优化的。
通过选择正在广泛使用的平台和Java虚拟机,本文的实验结果就可以为哈尔滨rT程大学硕士学何论文实际的嵌入式系统设计中Java虚拟机的选择直接提供参考,本文所述的方法也可以对以后Kaffe移植到其它MMU.Less的嵌入式平台上提供研究基础。
1.2国内外发展现状国内外对Java虚拟机的研究发展情况大不相同,在电子产品有着新需求时,国外厂商主要以推出新的JVM为主,而在国内则主要选择现有的功能较全面的ⅣM进一步加以完善。
1.2.1国外研究现状国外对虚拟机的研究独立性很强,大型的电子设备厂商都对JVM进行自主的研发。
如表1.1所示是国际移动嵌入式系统领域中广泛使用的几种主流的Java虚拟机,它们分别为适应各自的应用场合出现,因此它们也有各自的优缺点,下面重点选择本设计涉及的Kaffe和Wonka进行介绍。
表1.1国外公司对JVM的开发情况名称开处理器大小研发主要缺点源操作系统公司JRE否几乎所有1.5MSUN类库管理存在冗余Kaffe是几乎所有3MTVT不支持NOMMUJl洲是几乎所有3MIBM垃圾回收方法存在不足肋nlm是主要ARM3MACUNIA过于简单、已停止研发肋6a是WinCE1.5M鼢6a支持目标系统有限1.2.1.1Kaffe1996年TimWilkinson预见到Java技术广阔的应用前景,提出了Kaffe的最初框架。
Kaffe的最初设计理念是一款净室的ⅣM,净室(clean.room)系统的概念就是在不参考SUN公司的JDK(JavaDevelopKit)和JRE(JavaRuntimeEnvironment)前提下,开发出的一种与Java语言相兼容的ⅣM。
1997年TimWilkinson与PeterMehlitz创立了专门从事ⅣM开发的公司TramVirtualTechnologies(TVT)成功的将Kaffe商业化,2000年1’vT推出了Kaffe+DebianLinux的完整的PocketLinux系统,它以GNUDebianLinux为主框架、以Kaffe为基础在其上运行Java程序,从而为手持设备提供了功能强大3哈尔滨丁程大学硕士学位论文的应用开发平台。
目前,大小仅为3M的I(埘efe已经移植到X86、M68K、ARM、MIPS、PowerPC等70余种平台上,并能够支持很多操作系统。
更重要的是由于Kaffe虚拟机的成功,许多以Kaffe为基础的研究方案相继提出,许多新的JVM概念借由Kaffe实现,而Kaffe虚拟机的移植能力也一直受到系统设计者的好评。
由于Katie引入JIT引擎加快了Java程序的运行速度,使Java程序的执行速度理论上接近纯编译技术,满足了嵌入式系统对速度越来越高的要求。
在传统方法中ⅣM通过解释器将Java字节码相对应的机器指令逐条读入并逐条解释,这样的过程必然使程序执行速度比直接执行二进制程序慢。
引入JIT技术的Kaffe运行时JIT会把翻译过的机器码保存起来以备下次使用,采用JIT技术的K旅是一个功能完备的Java虚拟机,它完全能够满足嵌入式系统对ⅣM的要求,在嵌入式领域也发挥着巨大的作用。
但是目前触尚未支持uCLinux和NOMMU的嵌入式处理器,这也是本研究课题要进行的主要工作。
1.2.1.2Wonka1998年,SUN公司的JRE不
开源并且十分昂贵,而
开源的Kaffe技术还不够成熟,并且不能满足很多专门的移植需求,Wonka的出现弥补了Kaffe在嵌入式系统上对ⅣM进行移植的某些不足。
Wonka虚拟机的大小为5MB,2001年版本了通过SUN公司认证,符合SRFC.26规定标准。
Wonka首先解决了NOMMU的ARM处理器和Linux操作
系统使用ⅣM的问题,在此类嵌入式平台上可以稳定的运行。
另外,Wonka虚拟机是在基于组件的概念上建立起来的,各主要功能模块可以独立编译,因此十分易于进行裁剪和移植工作。
但是,Wonka的设计思想是在ⅣM内部都尽量采用最简单的方式处理,例如Wonka在对象布局方面不采用任何处理方法,而是将class、prt和flags直接同接口相连;在类装载的过程中,Wonka所做的工作也仅仅是将对像进行标注:更重要的是Wonka缺少Java.beans,Java.rmi.activation和Java.1ang.reflect.Proxy类。
主观上因为Wonka过分追求结构简单而存在的上述自身设计缺陷,客视上嵌入式系统越来越复杂、需要的功能越来越全面,勋l虢也日益成熟,都使Wonka的应用领域越来越少。
4哈尔滨工程大学硕士学付论文不过Wonka在
设计之初就针对ARM和X86处理器进行支持,并且为Linux提供高质量服务。
它甚至经过很简单的修改就能够支持NOMMU的处理器,并能很好的支持Linux的分发版本甚至是uClinux。
因此,在本课题中选择基于ARM7/uClinux的Wonka虚拟机的移植数据作为标准,同本课题的实验结果进行比较,进一步的证明本设计的正确性。
1.2.2国内研究现状国内的IT人员虽然在Java技术刚刚开始流行时,就对Java语言进行了广泛的研究,但是对Java平台内部结构的研究起步比较晚。
特别是ⅣM技术的发展十分缓慢,参与研发的公司也很少,基本没有自主移植的产品出现,在嵌入式移动设备上大多采用国外已经移植好的ⅣM。
随着嵌入式移动设备的流行和J2ME技术的广泛使用,国外在
开源JVM基础之上根据自己的设计需求进行的修改和研究结果,已经不可能提供完全合乎国内设计者要求的服务,而采用十分昂贵的不
开源的商业化JVM极大增加了成本,这就要求国内的嵌入式系统开发者拥有适合自身产品的Java平台。
因此,近两年来国内很多高校和科研院所开始了基于嵌入式网络平台的Java技术的研究和开发。
2005年,西北大学在PowerPC平台上,利用Kaffe虚拟机完成了一系列的应用设计。
该设计完成的嵌入式短消息通信机项目以嵌入式技术、Lniux操作系统和短信通信技术为基础,通过改造Unix操作系统,优化现有的短信通信协议,从而实现多种业务数据格式与短信标准格式的高效转换。
将嵌入式技术引入到短信
通信系统中,克服了基于通用机的纯
软件短信通信系统性能差、成本高的问题。
通过短消息通信协议,分别与GSM/CDMA手机终端、小灵通本地通终端以及固定电话终端进行可靠连接。
服务提供商即可以通过该短消息通信机,可以方便、快捷、安全地使用运营商提供的短消息服务接口,并将此系统最终实现在装载有Katie虚拟机的MPC852T平台上。
2006年IBM放弃JRVM的研发并将其源码公布在网络上后,电子科技大学立即开始了对它的分析和研究,并参照PowerPC的方法将YRVM成功的移植到ARMLinux平台上,并且进一步对JRVM进行了优化。
针对JRVM的弱点,电子科技大学积极研究非拷贝和拷贝两种不同的内存管理器方法,其目标是找到在哪些应用情况下哪种方法是首选内存管理方法,并研究出一种5哈尔滨T程大学硕士学何论文混合解决方案,以寻找一个折衷的优化方法,使JRVM在适当的时候使用拷贝管理的方法,使回收之间的运行在整体上更快,而在其它时刻使用非拷贝管理的方法使系统的暂停次数更少。
2006年北京邮电大学以Kaffe虚拟机为平台,分析和研究嵌入式Java的特点。
针对其实时性的不足,以RTSJ(RealTimeSpeeificationforJava)的实现为参考基础,分析实时Java的特性。
在以上分析的基础之上,得出实时Java的改进和补充
方案以及其部分实现。
利用RTSJ规范在现有Java规范的基础之上,针对其实时性的不足,在线程调度、内存管理、同步、异步控制、异步事件等方面对Java进行了扩展,使得Java可以满足嵌入式实时应用的要求。
RTSJ使得应用系统能够满足每个进程或任务的有限时间片,从而保证了应用的实时性。
1.3论文的主要工作本设计的
工作内容是解决如何使基于ARM7和uClinux组成的嵌入式系统能够执行Java应用程序,论文采用移植Kaffe虚拟机的方法解决该问题,并且在移植成功的基础之上提出了在嵌入式系统中构建Java平台的方案。
本研究的具体工作按照以下步骤进行:第1步,针对目前存在并且被广泛使用的JVM的主要结构进行分析,同时通过分析其它平台上已经成功移植的案例来寻找普遍的解决方法,最后对案例中的移植共同点和通用部分进行总结。
第2步,对ⅣM平台无关的特性进行有针对性的分析,并结合ⅣM各组成单元深入了解Java程序在ⅣM中的执行过程,以及ⅣM对Java字节码的操作过程,分析在ⅣM移植过程中应该重点掌握的技术。
第3步,深入剖析Kaffe虚拟机的具体结构和组成元件,并对实现不同功能的文件和目录加以区分,得到需要增加和修改文件的具体方法。
然后通过对ARM7/uClinux目标平台的进一步分析,得到解决移植Kaffe过程中应该重点关注的“平台相关”
问题。
第4步,寻找Ka能虚拟机与移植工作相关的
代码进行针对目标平台的修改,创建平台相关的处理器和操作系统目录及文件、并进行初始化,对Kaffc所使用的解释器和JIT编译器进行平台相关的修改和配置,为ARM处理器6哈尔滨下程大学硕十学位论文采用的PFA和VFA浮点处理单元设计不同的浮点数操作机制。
第5步,处理移植后的工作,正确配置宿主机和目标机的关系,并利用第三方系统测试工具得出平台运行的相关数据。
另外将Wonka虚拟机也在相同的平台系统上实现,最后对两种不同的虚拟机移植结果进行对比分析。
1.4论文的组织本文内容共分为5章,组织如下:第1章,介绍本课题的背景、目的和意义,对国内外的ⅣM移植问题的研究状况进行综述,提出本文的主要工作。
第2章,介绍Java的平台无关性的概念和实现方法,分析ⅣM的相关理论知识,为ⅣM的移植提供相应的理论支撑。
第3章,首先根据研究需要和实验平台条件,对ARM7实验平台和uClinux操作系统的结构进行分析,并分析K疵虚拟机的组织结构。
第4章,根据第3章的分析结果,完成具体的设计实现过程,创建平台相关的处理器和操作系统初始化文件,并对K啦虚拟机所使用的解释器和Jrr编译器进行平台相关的配置,对ARM7所采用的不同浮点运算单元采用不同的处理机制分别实现。
第5章,编写测试程序并引入测试工具集,验证移植完成的Katie虚拟机的正确性和执行性能。
同时完成Wonka虚拟机的移植,并对比分析两款虚拟机在ARM7/uClinux平台上的运行数据,证明本文所研究的Kaffe虚拟机具有的优点。
哈尔滨下程大学硕+学位论文第2章JVM技术研究Java虚拟机是Java技术的重要组成部分,它是通过抽象设计并由软件实现的计算机【3J。
JVM的实质就是在目标系统上通过软件模拟实现完整的计算机体系结构,如处理器、指令系统、堆栈、寄存器等。
为了实现应用程序和目标平台的分离,ⅣM需要利用解释器部件将字节码翻译成特定机器的机器
代码(本设计中的ARM指令集)。
2.1平台无关的分析因为Java应用程序运行在Java虚拟机中,而不是直接运行在操作系统上,所以对于普通用户来说这些过程都是是透明的【4】。
对于不同的操作系统和微处理器上都建立与平台相适合的不同Java虚拟机,就可以为Java应用
程序提供一个统一并且一致的平台。
因此,对于Java应用程序是平台无关的,所有与平台相关的数据已经被Java虚拟机所屏蔽。
2.1.1JVM执行程序的过程一般情况下,如果高级语言编写的程序要在不同的平台上运行,就需要编译成适合平台的不同的目标
代码。
Java语言在引入ⅣM后,用它编写的程序在不同平台上运行时则不需要重新编译【5】。
在宿主机上,设计人员编写的Java源程序(.java)经过编译器编译后,生成由字节码组成的类文件(.class)。
在目标平台上执行时,首先ⅣM中的类装载器自动装入来自类文件的字节码及Java平台中自带的基本类库(如java.1ang.class等),由ⅣM读取字节码并转换为特定的平台可以执行的指令,最后ⅣM本身会调用本地核心库来运行装载后的程序。
结合图2.1可以看出,Java平台由ⅣM和JavaAPI搭建,Java语言则是进入这个平台的通道,用Java语言编写并编译的程序可以运行在这个平台上。
ⅣM执行从类文件中读入的字节码,类文件(.class)是宿主机和目标机的唯一联系,而相同的类文件可以运行于任何一个已经实现JVM的目标平台。
因此ⅣM是Java程序执行的心脏,包括平台无关性在内的很多Java技术的优点就来源于ⅣM的概念和实现。
8哈尔滨工程大学硕士学位论文/,¨a类库//3∞紫/士类装载器装载虚拟机ClassLoader’r上编译器编译一或案显忑墓蓑输卜_醐勰魍H账本鬻溅口JDK牟●◆/Java字节码/操作系统支持/本挚搿库//.class/OS+硬件平台支持CPU宿主机目标机图2.1Java程序的执行过程2.1.2JVM统一的体系结构任何Java程序要跨平台运行必须要求存在统一标准的ⅣM的体系结构。
执行Java程序的任务全部由ⅣM运行期的实例完成,此实例即可看成是在实际的系统上通过软件模拟实现的计算机。
在实例中JVM拥有自己的抽象硬件,如处理器、堆栈、寄存器和相应的指令系统。
ⅣM实例的行为涉及到它的子系统、存储区域、数据类型和指令集等部分,如图2.2所示。
每个ⅣM实例都有两种机制№J:1)装载系统:装载具有合适名称的类(类或是接口);2)执行引擎:负责执行包含在已装载的类或接口中的指令。
并且每个ⅣM实例又包括由本地方法区、Java栈、Java堆和程序计数器几部分组成的数据区,其中本地方法区中包括本地方法栈和本地方法堆。
Java程序在运行时创建的所有类和数组都放在堆中(包括Java堆和本地方法堆),在ⅣM实例中只存在此堆空间。
栈结构包括Java栈(以帧为单位保存和读取线程的运行状态)和本地方法栈(可能会用到的和运行平台相关的数据)。
其中,所有栈都包括三个区域:局部变量区、运行环境区、操作数斟71。
9哈尔滨工程大学硕士学位论文本地方法库类文件◆◆本地方法接口I??,I执行引擎类装载器▲JL—Lf◆1r1rJava栈Java堆本地方法区程序计数器运行时数据区图2.2JVM的体系结构2.1.3建立JVM运行时数据区标准的ⅣM创建每个实例时,都将建立属于自身的方法区和Java堆栈,运行于JVM内的所有的线程都共享这个数据空间。
数据区的数据字长都基于“字”,栈帧的两个部分(局部变量和操作数栈)都是按照“字”的长度来定义的【8】o数据区在ⅣM中的作用为【9】:1)对字节码进行解析时,将包含的信息都存放在运行时数据区中;2)程序开始执行时,JVM进行程序初始化时所有对象都置于Java堆上;3)线程创建时,ⅣM建立此线程的程序计数器(PC)和Java栈,PC指向下一条即将被执行的指令,Java栈则存储此线程调用的Java方法的状态;4)本地方法调用的状态被存储在本地方区中。
ⅣM数据区的数据类型及其相应的运算也有严格定义的规范如图2.3所示。
数据类型主要分为两种:基本类型和对象类型,其中基本类型的变量持有原始值,而对象类型的变量持有引用值【101。
值得注意的是,与Java语言中的常量的概念不同,.class文件中的常量包含内容十分非富、组织也比较复杂,因此这些常量被集中在.claSs中的Java常量池中连续存放。
10ⅣM=LOADER+EXECUTEENGINELOADER;CLASSLOADER+JNIEXECUTEENGINE=EXECUTEKERNEL+OPSTACK+CALLFRAME图2.4JVM的简单表达示描述综上所述,设计中的移植工作主要集中在对CALSSLOADER、JNI和EXECUTEENGINE三个方面进行相应的修改。
哈尔滨T程大学硕士学位论文2.2.1类装载器类装载器的特点是在其运行时使用多种不同库创建应用程序,并能够使同种资源的不同版本在ⅣM实例上共存【451。
类装载器的主要作用就是通知ⅣM在何处以何种方式加载类,还要处理不同版本的库文件命名冲突和版本不兼容问题,并且具有从不同位置、按不同方式加载的库能力【ll】。
因此,标准的类装载器要实现以下特点:1)透明性:类装载器对应用程序设计者应该是透明的,在类中并未包含涉及类装载器的语句,但仍可被正确加载到ⅣM。
2)可扩展性:为了满足用户的某些特殊需求,因此类装载器必须在不修改待加载类和自身系统结构的情况下完成对库的扩展。
3)可配置性:类加载之前必须先经过配置,当类传入后要返回可区别的所加载类的对象。
如果类加载过程中出现故障,应抛出一个已检测的异常。
所有的类装载器必须满足以上三种属性,但对于加载Java标准类和用户自定义类,其过程就有着显著的不同。
因此就需要类装载器可以对这两种类库进行识别,并解决命名冲突和版本冲突,这就需要建立起如下的加载规则:1)唯一性:类加载结束后如果还需要将相同的类加载,只需要返回类加载器中已加载的类。
在此过程中只要增加一个标志位,每次加载时对标志位进行检测即可完成。
2)集合性:类装载器在加载类之前要参考其父类的装载器,可通过getParent0方法得到父类,对类加载器及其所有父类加载器的集合进行处理。
因此在类装载器加载类前将使用递归的方法检测整个集合,这项规则的作用是允许类装载器之间共享类。
3)可见性:规定被加载的类只能看到其使用的加载器集合加载的其它类,如图2.4中的PROCl和PROC2包含有相同名称的类SameClass。
其中,唯一性规则并不难实现。
如果不遵守此规则可以简化在运行时替换类的过程,虽然这样做不能确定系统安全,为简化设计并适用于设计者要求的系统也值得考虑。
集合规则和可见性规则为在运行时替换类提供了必需的架构,若能正确的实现以上规则,则类装载器的动态替换性能可以移植到所有合法的ⅣM上。
哈尔滨T程大学硕士学何论文2.2.2本地方法接口在系统中单纯使用Java只是理想的方法,Java在某些任务中并不很适用。
例如直接访问系统内存操作,Java技术对内存加以保护来避免对内存的直接操作引起的错误,嵌入式系统的直接访问内存并对其进行
查询和控制的要求十分频繁M。
因此引入JNI(JavaNativeInterface)让JVM与平台本地
代码共享同一进程空间,允许从Java查找、加载和调用本地方法而不受ⅣM的限制【121。
一个完善的JNI应该具有以下几个功能:1)实现本地
代码的映射JNI定义了.