嵌入式Java虚拟机的改进

来源 :计算机光盘软件与应用 | 被引量 : 0次 | 上传用户:a83017396
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:本文研究了Java技术在嵌入式领域应用中所存在的系统占用资源较多和程序执行效率较低两个关键性难题。在研究国内外目前应用于嵌入式Java虚拟机中的各种性能优化技术和尚待解决的问题的基础上,尝试从对垃圾回收方式改进和虚拟机内部结构改造两方面对两个难题提出了解决的新方法。结合在垃圾回收和虚拟机内部结构方面的改进,本文搭建了一个新的改进型嵌入式Java虚拟机。
  关键词:嵌入式Java;虚拟机;垃圾回收
  中图分类号:TP307
  从1993年美国Sun公司提出Java语言规范和Java虚拟机规范的Java技术以来,关于Java的应用和研究就一直呈逐渐上升的趋势。随着互联网的不断发展,Java语言以其独特的平台无关性和安全性迅速占领了PC端和Server端。现在Java技术已经被广泛的应用到了嵌入式领域,形成了嵌入式Java技术。嵌入式Java技术就是将采用Java语言编写的应用程序嵌入到电话、电视、洗衣机、电冰箱等各类消费类电子产品中,使这些设备具有了计算机的计算、执行等部分功能。并且由于有嵌入式Java技术的互联网接口功能,各种嵌入设备可以安全地通过网络接受和执行应用程序[1]。
  Java语言、JVM和Java API是Java技术主要组成部分,而JVM(Java虚拟机)是其在嵌入式系统应用的主要瓶颈。嵌入式系统与微型计算机系统有很大的差异,所以Java语言在嵌入式系统的应用中所出现的问题也常有它自己的特色。Java语言的全新处理方式其关键创新有两点:(1)编译在服务器端进行,编译过程中只是将Java源程序编译为与平台无关的字节码型中间代码;(2)客户端上安装了Java虚拟机JVM,JVM以解释的方式执行中间代码程序。Java语言其独特处理过程如图1所示:
  从上面的图可知,经过编译之后Java程序所生成的不是能直接在处理器上运行的机器码,而只是在虚拟机上运行的Java字节码型中间代码,然后由不同平台上虚拟机根据自己平台将字节码译成其处理器真正可执行的机器码后运行。由于Java程序存在这一比较复杂的编译、译码过程,其运行所耗费的时间将会是C或C++等高级语言编译的相同功能指令程序的好几倍,甚至几十倍。因此,在Java得到广泛应用的同时,也存在一个影响使用的最大问题—执行速度慢。关于如何提高Java虚拟机的执行效率方面的研究已经成为了Java研究的热点[2]。
  针对嵌入式Java虚拟机存在的两个难题——硬件资源少和运行速度慢,本文在嵌入式Java虚拟机的结构设计和内存管理方面作了一些探索研究,主要包括两个方面:数据堆栈结构优化和垃圾回收算法的改进。
  1 数据堆栈结构优化
  现在嵌入式系统中常采用的是基于堆栈的处理器,因为这类处理器支持比较短小的程序,在资源有限的嵌入式中也能工作得很好。在执行同样一个程序时,基于堆栈处理器编译出来的机器码要比基于寄存器的处理器编译出来的机器码小好几倍。但基于寄存器的处理器也有一个极其重要的优势:速度快。基于堆栈的处理器,它的堆栈几乎都是在外部内存里的,这就造成即使执行一个面向堆栈的基本操作,处理器也需要到内存里去读取数据,大大降低了基于堆栈的处理器的执行速度[3]。经过对基于堆栈的处理器与基于寄存器的处理器优缺点的分析,它们的优势和劣势主要体现在具体的硬件上。由于虚拟机是完全以软件构成的,没有硬件设备,所以在本文虚拟机设计当中不像一般Java虚拟机那样完全采用基于堆栈式的结构,而是吸取了这两种结构的优点,采用了既有堆栈又有寄存器的机器结构。
  2 垃圾回收算法改进
  常用的垃圾回收算法有标记压缩法、停止拷贝法以及标记清除法,它们都有一个共同的特点,即一次性对整个内存的垃圾进行回收,在垃圾的回收过程当中可能会致使其它程序被明显地中断,影响了这些方法在实时系统等对系统运行时间有较高要求的环境中的应用。
  针对这些问题本文采用增量式跟踪法来进行优化,增量式跟踪法的基本思想是将垃圾回收过程分成若干小片与应用程序交叉运行。
  通过下图的三色模型对垃圾检测过程进行介绍。在内存检查过程开始时,所有的结点都为白色。从根结点开始检查,将可以直接访问到的结点标记为灰色,然后对灰色结点进行检查,一个灰色结点的所有子孙都经过检查后,则将此结点改为黑色,整个检查过程结束后,只剩下黑色结点和白色结点,此时黑色结点对象为可以访问的对象,而白色结点则是需要回收的对象。因为这一标记回收过程是和应用程序“并行”工作的,所以为了保证垃圾回收的正确性,程序的执行必须要遵守一条原则,即应用程序不能将一个黑色结点上的指针指向一个白色结点,原因是可能导致此结点可能被错误地作为垃圾清除掉,如图2所示,当A的子孙检查完成后,B和C被标记为灰色,下一步应该对B和C的子孙进行标记,如果此时发生了图3中所示的指针变化,则结点D将无法再被检查到,从而可能导致被错误地清除。为了避免发生这种错误,可以采取在回收的程序段设置读屏障或写屏障的方法。在读屏障方法中,对应用程序访问对象的过程进行监视,如果发现其试图访问一个标记为“白色”对象的指针,则立即将此对象置为灰色;在写屏障方法中,如果应用程序为某个对象设置指向其它对象的指针,则将其记录下来,确保检查程序能对此对象进行正确检查。
  在采用写屏障方法时可以采取两种算法:一是对所有被修改的指向白色对象的指针保留记录,即当检测到应用程序试图修改指向白色对象的指针时,首先将此指针保存到一个专门的数据结构并压入堆栈当中,例如图2中将B→D的指针保存在堆栈当中,从而后面可以根据堆栈当中的数据对D进行检查;另一种方法是检测到应用程序试图将指向白色对象的指针复制到黑色对象时,将黑色对象修改为灰色,图2中将A修改为灰色,从而使垃圾检测程序能对A的子孙再次检查。
  3 显式内存管理法和自动内存管理法比较及内存管理法的选择   显式内存管理法把追踪已分配内存的责任放在了程序员人员的肩上,由于程序员可以在编写程序时对内存管理进行设置,所以该方法可以使系统中的内存分配算法简单一些,相关的标记等工作也会少一些,但也会可能由于程序员出错造成系统不稳定等问题。显式内存管理法下的程序要简短一些,这是因为用不着在程序里额外插入那些内存回收工作的指令或数据。显式内存管理法还能让程序编写人员对内存分配中的具体情况有一个更好的掌握[4]。
  内存自动管理办法,它的内存回收工作有完善、安全的细节。这使程序编写人员能够集中注意力解决真正的应用问题。心理学统计证明,普通人只能同时跟踪记忆7件事。如果软件开发人员在编写程序的同时还不得不考虑内存回收问题的话,需要他跟踪记忆的事项就会大大超出普通人的极限。自动内存管理法恰好解决了这个问题。
  而在Java虚拟机规范中规定了垃圾回收任务需由虚拟机这个底层运行系统来完成,所以本虚拟机在设计时选择了具备自动垃圾回收的功能的自动内存管理法,但在分配内存时可借鉴显式内存管理法的一些思想。
  本文中所做的研究都是针对提高Java虚拟机执行效率方面的研究,未来要实现一个应用于商业实用的嵌入式Java虚拟机,还必须提高Java虚拟机的安全性。Java的安全模型是其最重要特点之一,正是因为Java比以往的程序开发语言具有更高的安全性,才使Java成为了最适合网络环境的技术。Java虚拟机中一般都采用了沙箱安全模型这一安全机制,重点来保护终端用户不受从网上下载的、或来自不可靠来源的、恶意程序的侵犯。
  本文设计的虚拟机中,只具备了基本的安全检查,对恶意程序的纠错能力还不足,所以未来在加强本虚拟机的安全性方面还有许多工作要做。
  参考文献:
  [1]刘科,许洪华,付德永.基于以太网和嵌入式Web Server的控制系统设计研究[J].微计算机信息,2006,22(29):143-145.
  [2]Bill Blunden.Virtual Machine Design and Implementation in C/C++[M].Wordware Publishing,Inc,2005.
  [3]李蜀瑜,吴健,胡正国.嵌入式Java Script解释器的设计与实现[J].计算机应用研究,2003,1:128-130.
  [4]黄广君,吴健,胡正国.关于KVM中预处理程序的研究[J].计算机应用研究,2002,10:27-28.
  作者简介:崔琳(1979-),河南南阳人,讲师,主要研究方向:计算机应用技术;马丽艳(1983-),河南开封人,助理实验师,研究方向:计算机应用技术。
  作者单位:河南化工职业学院,郑州 450042
其他文献
开源工作流领域,最近因为JBoss jBPM的缔造者和·领导者Tom Baeyens的那篇《过程组件模型:下一代工作流?》而引发不少热议和关注。
围绕烟草行业"卷烟上水平"基本方针和战略任务,烟草行业的改革发展将进入全面推进的关键时期,这对思想政治工作提出了新课题,客观要求充分发挥思想政治工作作用,为改革的顺利推
对不确定度进行测量已经成为了一项重要的数据衡量指标,很多国家都认为,测量的结果如没有带不确定度的话,是没有任何实际意义的测量数据。现在大多数国家都存有自己的不确定
热激蛋白在植物干旱和正常生长发育过程中具有重要的调控作用,近年来,研究者利用水稻、大豆、玉米等不同类群植物分析了植物干旱胁迫应答蛋白,尤其是热激蛋白的表达调控策略
简介:Sawin 2006根据实际研发管理中积累的经验.针对软件研发过程改进中最容易开展的需求和测试两部分入手,提供了流程相对灵活的研发协同管理,具有较好的适用性。作为轻量级的管
摘 要:C语言应用中,自增自减运算符运用灵活、广泛且具有一定的使用技巧和难度,在编程过程中,往往是初学者最难理解和最容易出错的运算符。本文根据自增自减运算符的特点和两种使用形式,剖析自增自减运算符的功能和在不同编译环境下的运算规则,以便更好地为初学者学习和使用提供帮助。  关键词:C语言;自增运算符;运算规则;自减运算符  中图分类号:TP312.1  C语言中自增自减运算符使用过于灵活多变、不易
公路沥青路面基层施工技术是公路工程基层建设的中心环节,是决定公路沥青路面基层施工质量的重要基础,同时也是公路建设整体质量的关键部位,直接决定着公路建设投资的成败,因
本文分析了开关柜内高压电弧的物理过程,并介绍在内部故障电弧条件下,开关柜试验的方法.
我国对高水平、复合应用型人才有着迫切需求,培养高水平的全日制专业型硕士是研究生教育的重中之重。本文以哈尔滨工程大学核科学与技术专业为例,针对专业型硕士培养模式中认同
中国台湾成功大学运用美国国家科学院院士钱百敦研发的近红外线早期乳癌诊断装置基础上进行小型化研究,经过2年的努力,研制成功的近红外线乳癌早期诊断装置象手机一样大。预计2