版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、面向普适计算终端的Java虚拟机性能优化技术研究*李允1,罗蕾2,雷昊峰2,熊光泽2(1. 西南交通大学计算机与通信工程学院,四川成都610031;2.电子科技大学计算机科学与工程学院,四川成都610054)摘要:分析了解释运行中利用线索化方法进行性能优化的技术,实现了以直接线索化方法为基础的Java虚拟机的解释器性能优化方案,并对嵌入式Java虚拟机的参考实现和Java的优化实现进行了性能对比。关键词:普适计算;Java虚拟机;线索化方法;直接线索化方法;性能优化中图法分类号:TP316;TP273文献标识码:A文章编号:1001-3695(2005)03-0055-03Performanc
2、eOptimization Technology JavaVirtualMachine forPervasive ComputingTerminalsLIYun1,LUO Lei2,LEIHao-feng2,XIONG Guang-ze2(1.SchoolofComputerCommunicationsEngineering,SouthwestJiaotongUniversity,Chengdu Sichuan610031,China;2.SchoolofComputerScienceEngineering,University ofElectronic ScienceTechnology,C
3、hengdu Sichuan610054,China)Abstract:The paperanalyzes a performance optimization technology uses the threadedmethod in interpreting runningmodesand implements a performance optimization ofJavaVM based on direct threaded technology. The paperdemonstrates the com-parison performance ofembedded JavaVM
4、and optimizedVM based on the reference implementation of J2ME.Key words:Pervasive Computing;JavaVM;ThreadedMethod;DirectThreadedMethod;PerformanceOptimization1引言随着计算机技术的深入发展,逐渐呈现出了普适计算的模式1,2。普适计算的目的在于突破基于桌面系统的计算模式,使人们能够在任何情况下获得计算服务。在普适计算模式下,PDA和移动电话、家用电器等通用设备,以及用于医疗、军事、娱乐等方面的专用设备将协同工作,以快速、高效和便捷的模式为人
5、们提供服务。Java由于其平台无关特性及其庞大的应用开发团队等显著特点,逐渐在移动终端领域形成了强大的需求,Java技术本身也被称为普适Java(Pervasive Java)。为满足服务使用的便捷性,普适计算设备应该能够工作于移动环境。因此,与固定设备相比,普适计算设备主要具有资源有限等局限性。资源有限性主要是由于终端在设计方面存在以下需求:功耗低,重量轻和物理尺寸比较小。根据这些需求设计出来的设备所拥有的资源在以下方面存在不足:磁盘容量、物理内存大小、处理能力、缓存大小和屏幕大小。尽管随着技术的发展,普适计算终端的资源会得到不断增强,但固定设备同样也能从技术发展中获益,且固定设备不用考虑大
6、小、功耗和重量等约束3。因此,资源有限性是普适计算终端的固有特性,技术的发展过程也不能弥补它与固定设备之间的差距。为此,形成了针对移动终端的、适合于嵌入式应用的Java技术J2ME。但对于日益增长的复杂应用来说,J2ME仍要求终端具有比较丰富的资源。因此,对终端的Java进行性能优化,不但能降低Java对资源的需求,满足更广泛普适应用的需要,还能有效降低Java应用的功耗情况,并使普适计算终端进行电子商务、电子银行和3D游戏等复杂应用成为可能。由于解释运行的虚拟机存在系统简单、容易实现等优势,且由于编译运行存在重复编译、编译过程需要消耗大量资源等方面的不足,使得嵌入式应用中大多采用Java的解
7、释运行方式。2基于解释执行的线索化优化技术在程序的解释执行中,通常在解释器中采用Switch-case的解释处理方式,如下程序段通过Switch-case方式实现的解释器比较简单,易于移植和理解,但由于不少指令的解释程序比较简单(只有几条到十几条机制指令),使得Switch-case语句本身的执行开销太大,直接影响到解释执行的效率。uint8 bytecodes=OP LDC,OP ILOAD,OPADD,OP ISTORE,.;uint8*pc=bytescodes;while(notEnd)switch(*pc+)caseOP LDC:interpretLDC;break:caseOP I
8、LOAD:interpret ILOAD;break;caseOP ISTORE:interpret ISTORE;break;caseOPADD:interpretADD;break;2. 1线索化的解释器作为对传统的Switch-case解释执行方式的改进,线索化的解释器4,5(Threaded Interpreter)最早在Forth语言解释器中得到应用。线索化的解释器意味着解释器对相邻字节码的解释执行过程通过一定的方式直接联系在一起,而Switch-case解释器每解释完一条字节码都要重新经过由Switch进行解释分发的过程。在C /C+语言中,可以用Goto语句跳转到特定的标号。虽然
9、Goto语句在结构化编程和面向对象编程的过程中都不提倡使用,但在实现解释器时,Goto语句却可以发挥独到的作用。通常,Goto跳转的地址在编译时就已经确定,不过,大多数C语言的编译器允许在程序中对标号寻址,使得Goto语句的跳转地址可以在运行时动态确定,如下程序段:void*labels=label1,label2,label3;label1:label2:label3:goto labels1;/*跳转到label2*/goto labels1;/*跳转地址动态决定,i=0时跳转到label1,以此类推*/线索化解释器正是基于这种特性,将所有字节码对应的解释程序的标号地址保存在一个标号数组中
10、。然后,解释器以字节码的值作为标号数组的下标,直接跳转到对应的解释程序。在每个字节码解释执行完毕后,直接跳转到下一条字节码对应的解释程序。如下的伪码表示了线索化解释器的工作过程:#defineOP LDC0 uint8*pc=bytescodes;#defineOP ILOAD1 goto*labels*pc+#defineOP ISTORE 2#defineOPADD3 OP LDC LABEL:#defineOP SUB4interpretLDC; goto*labels*pc+;uint8 bytecodes=OP ILOAD LABEL:OP LDC, interpret ILOAD;
11、OP ILOAD, goto*labels*pc+;OPADD OP ISTORE LABEL:Op ISTORE, interpret ISTORE; goto*labels*pc+;OPADD LABEL:void*labels= interpretADD;OP LDC LABEL,/*OP LDC=0*/goto*labels*pc+;OP ILOAD LABEL,/*OP ILOAD=1*/ OP SUB LABEL:OP ISTORE LABEL,/*OP ISTORE=2*/interpretSUB;OPADD LABEL,/*OPADD=3*/goto*labels*pc+;OP
12、 SUB LABEL,/*OP SUB=4*/;与Switch-case解释器相比,线索化解释器省掉了以下的开销:每条字节码解释完毕后,到Switch的跳转指令;Switch在查找跳转表之前对字节码的值进行边界检查的指令。并且,由于许多常用字节码本身的解释程序很短(甚至不到10条机器指令),线索化解释器的优化效果相当明显。另外,线索化解释器也没有增加内存占用上的开销。通过实际的实验验证,线索化解释器的运行速度比Switch-case解释器快7%10%。2. 2直接线索化的解释器线索化解释器将字节码的处理程序的入口地址集中保存在标号数组中,解释执行字节码时需要至少两次内存访问:读入PC指向的字节
13、码;以字节码作为下标,读入对应的处理程序的地址。直接线索化解释器5(DirectThreaded Inter-preter)为对线索化解释器的一种改进方案。在运行字节码之前将所有字节码所对应的处理程序的地址保存在一个数组中。在解释运行时不再访问原来的字节码数组,而是直接访问地址数组,因而在线索化解释器的基础上减少了一次内存访问的开销。直接线索化解释器的实现可以用如下所示的伪码表示:#defineOP LDC0 void*instructionLabel=labels0;#defineOP ILOAD1 goto*instructionLabel+;#defineOP ISTORE 2 OP L
14、DC LABEL:#defineOPADD3interpretLDC;#defineOP SUB4goto*instuction Label+;OP ILOAD LABEL:uint8 bytecodes= interpret ILOAD;OP LDC, goto*instuction Label+;OP ILOAD,OP ISTORE LABEL:OPADDinterpret ISTORE;Op ISTORE, goto*instuction Label+;OPADD LABEL:; interpretADD;void*labelssizeof(bytecodes); goto*instuc
15、tion Label+;labels0=OP LDC LABEL;/*对应bytecodes0=OP LDC*/OP SUB LABEL:labels1=OP ILOAD LABEL;/*对应bytecodes1OP ILOAD*/interpretSUB;labels2=OPADD LABEL;/*对应bytecodes2OPADD*/goto*instuction Label+;labels3=OP ISTORE LABEL;/*对应bytecodes3OP ISTORE*/与Switch-case解释器执行过程相比,直接线索化解释器减少的开销包括一次跳转,一次访存和对字节码的值进行的边界
16、检查操作。通过实际的实验结果表明,直接线索化解释器的速度比Switch-case解释器快40%100%。但是,由于需要额外的内存空间来存放解释程序的地址数组,直接线索化解释器的内存开销要大于Switch-case解释器和线索化解释器(需要约4倍于字节码自身大小的内存空间)。直接线索化解释器在每条字节码解释完后仍然需要一条跳转指令,转到下一条字节码对应的解释程序入口。这样频繁的跳转对CPU的指令Cache和分支预测机构仍然会带来很大的影响。内联线索化的解释器6(Inlined Threaded Interpreter)为直接线索化解释器的改进方案,将若干连续字节码对应的解释程序本身(而不是标号)
17、复制到一个连续的地址空间中,然后运行这一段解释程序,这样就完全消除了在字节码解释程序间的访存和跳转指令的开销。可以看出,内联线索化解释器以一种简化的方式实现了类似JIT的代码生成工作。其代价是需要占用大量的内存(需要约数十倍于字节码自身大小的内存空间)。3普适计算终端Java虚拟机性能优化技术3. 1直接线索化优化采用直接线索化解释器作为Java虚拟机解释器的核心实现方案,其原因是:Switch-case方式实现的字节码解释器性能过于低下;线索化解释器与Switch-case解释器相比性能有一定提高(7%10%),但提高幅度仍然有限;内联线索化解释器与Switch-case解释器相比性能有很大
18、提高(150%300%),但内存占用太大;直接线索化解释器与Switch-case解释器相比性能有显著提高(40%100%),同时仍然保持较少的内存占用。解释器在运行字节码之前把字节码数组翻译为直接包含字节码对应解释程序入口的线索化代码数组,如图1所示。实现以上翻译过程的代码可以用如下伪码表示(翻译程序按顺序读入每一个字节码,查找其对应的解释程序入口地址,再将地址写入线索化代码数组中):void*opcode entriesMAX OPCODE;/*保存字节码解释程序入口地址*/*初始化解释程序入口地址表*/opcode entriesOP CODE1=OP1ENTRY;opcode entr
19、iesOP CODE2=OP2ENTRY;opcode entriesOP CODE3=OP3ENTRY;/*将字节码翻译为threaded code*/uint8*pc=bytecodes;intbytecodes length=length ofbytecodes;void* *threadedPC=threadedCodes;while(bytecodes length-)if(ISOPCODE(*pc)/*该字节是操作码,翻译为解释程序入口地址*/*threadedPC=opcode entries*pc;else/*该字节是操作码的参数,直接保存*/*threadedPC=*pc;t
20、hreadedPC+;pC+;实际上,图1和上述的伪码只考虑了最简单的字节码翻译过程,即每个字节码对应线索化代码的一条数据(通常为4字节),其中操作码对应翻译程序标号地址,操作码后续的操作数则直接复制到线索化代码中。无论是操作码还是操作数,每一个字节码在翻译后都要占用4字节的存储空间。在实际的翻译过程中,有两个问题需要解决:操作数的翻译;相对跳转地址的处理。在32位CPU上,标号地址(类型为void*)长度为32位,占用四个字节的存储器。一条Java操作码的后续操作数长度从一字节到数十字节不等,这些操作数有的是16位整数,长为两个字节;有的是32位整数,长为四个字节。如果按照跳转地址动态确定的
21、翻译方式,16位的操作数在翻译后将占用两个线索化代码单元,即八个字节;而32位操作数则要占用16个字节。并且,在线索化代码运行时,还需要重新组装这些操作数。这样做既增加了无谓的内存占用,又降低了运行效率。因此,在翻译过程中,通常是将一个操作数的若干个字节码合并在一条线索化代码单元中,如图2所示。如图2所示,在翻译时对字节码操作数进行合并处理,可以在一定程度上降低线索化代码的内存占用,同时提高了运行效率。可以看出,合并操作数使得字节码数组与线索化代码数组的下标不再具有一一对应关系。对顺序执行的字节码而言,这种变化没有影响,但对于进行相对地址跳转的字节码而言,情况就发生了变化。以图2为例,假设字节
22、码数组中下标为2的OP_CODE2是一条跳转指令,其后的操作数是相对地址,值为8,则OP_CODE2的执行结果为跳转到下标为10的指令处。而在线索化代码中,OP_CODE2的解释程序则应该跳转到对应的指令,即下标为6的线索化代码处。因此,在对跳转指令进行翻译时,必须对操作数进行调整。3. 2字节码替换优化字节码替换主要包括以下几个方面的内容:(1)将某些不指定操作数类型的指令细分并改写为针对特定类型的指令。例如,LDC指令将常量表中指定的常量压入Java堆栈,它的操作数(指定常量的下标)也是一个常量。在翻译代码时可以得知不同的LDC指令所装入常量的数据类型,并将LDC指令细分为LDC_INT,
23、LDC_FLOAT,LDC_STRING等指令,以提高运行效率。(2)将常量操作数直接嵌入在线索化代码中。每一个Ja-va方法都有自己的常量表,程序运行时通过LDC指令和一个下标操作数来将常量表中指定的常量压入Java堆栈。可以将长度不超过四个字节的常量直接嵌入到线索化代码中,如整型常量、字符串指针常量等,这样可以减少一次查表的开销。(3)合并某些功能相近或相同的指令。例如,BIPUSH和SIPUSH指令分别向一个8位整数和16位整数压入堆栈,考虑到8位和16位整数在线索化代码和堆栈上实际都要占用四个字节,这两条指令可以由同一段解释程序来执行。3. 3线索化代码存储空间优化字节码翻译为线索化代
24、码后,需要占用原字节码大小34倍的存储空间。相对内联线索化解释器而言,开销已经大大减小,但对于内存资源有限的移动终端而言,这样的开销仍然不可忽视。线索化代码存储空间优化技术即用来降低线索化代码的内存占用情况,其工作原理是:(1)开辟一块专门用于存放线索化代码的内存空间;(2)Java方法只在被运行之前才翻译为线索化代码;(3)通过LRU(最近最久未用)表对已翻译为线索化代码的Java方法的被调用情况进行记录;(4)当存放线索化代码的内存空间不足以容纳新的需要翻译的Java方法时,在LRU表中查找最近最久未调用的线索化代码,并释放这段代码。有必要的话,重复这个过程直到可以容纳新的Java方法为止
25、。通常由于移动终端本身存储能力的限制,Java应用代码的规模通常不会超过100KB,大多数常用应用不会超过30KB40KB。在这个前提下,通过LRU表来维护线索化代码的内存空间,能够大大降低线索化代码所占用的内存。3. 4提高CPU指令Cache命中率Java虚拟机一共定义了204条指令,这些指令在Java程序中出现的频率是不一样的。根据Radhakrishnan7的统计,Java程序中使用频率最高的15条指令,其运行次数占所有指令运行次数的56%85%。这些使用频率最高的指令随程序不同而不完全一致。但总的来说,常量表访问指令、变量表访问指令、算术运行指令和分支指令的使用频率相对其他指令要高得
26、多。为此,将使用频率高的指令的解释程序安排在相邻的地址空间中,可以提高CPU指令Cache的命中率,进而改善虚拟机的性能。4性能分析Java虚拟机性能优化是在嵌入式Java(下转第79页)Multi-Agent信息检索系统的需求会变得日益突出,它将更加精确地满足用户对个性化信息的需要。它面临的问题有:(1)MAS中学习成功的协商和协作策略;(2)Agent的适应性何时对系统有害或有利;(3)多个信息Agent间的合作行为如何有效发展;(4)在开放的环境中,用于知识发现、表示和维持的哪些方法是最适合的。在信息Agent系统中,机器学习的各种技术是很有用的。最流行的学习方法类型,可以从神经网络学习
27、中的Q学习和基于示例的推理,直到遗传算法的学习。如:指导学习。由Agent收到的用户的反馈,用于指派某个希望的活动;这个希望的活动将尽可能近地与学习目标相匹配。非指导学习。这种情况是无用户的反馈,而是通过自组织的过程、学习目标来发现有用的和希望的活动。再励学习。通过用户的反馈来说明Agent执行的活动的效用,学习的目标就是如何将这种效用最大化。今后的工作将把各种学习算法以及各种信息技术应用于MAS中,比较各种方法的效用,找出最适合的那些方法,以提高系统的精确性和效率,更好地满足用户的需要。参考文献:1TravisBauer-David B Leake. Calvin:AMulti-AgentP
28、ersonal Infor-mation RetrievalSystemEB /OL. http:/www. cs. Indiana. edu /trbauer/papers /agents02,2002.2M Klusch. InformationAgentTechnology for the Internet:A SurveyJ. DataKnowledge Engineering,2001,36(3):337-372.3Keith LClark,Vasilios S Lazarou. AMulti-AgentSystem forDis-tributed Information Retri
29、eval on theWorldW ideWebC. Procee-dings of the 6thWorkshop on EnablingTechnologies Infrastructure forCollaborative Enterprises(WET-ICE97),1997. 87-93.4TsviKuflik,PeretzShova.l Generation ofUserProfiles for InformationFiltering Research AgentC. Proceedings of the 23rd Annual Inter-nationalACM SIGIR C
30、onference on Research and Development in In-formation Retrieval(SIGIR 2000),SIGIR-2000,2000. 313-315.5Suat Ugurlu,Nadia Erdogan. An Agent-based Information RetrievalSystemC. Proceedings of the 1st International Conference ofAd-vances in Information Systems(ADVIS-2000),2000. 429-436.6Bin Ling,Colin A
31、llison. An Agent-based Knowledge SharingModelfor Information Retrieval on the InternetC. Proceedings of the 3rdInternationalConference on Enterprise Information Systems(ICEIS-2001),2001. 1118-1125.7董红斌,石纯一.移动Agent技术研究J.计算机科学,2000,27(4):58-61.8董红斌,孙羽.多Agent系统的现状与进展J.计算机应用研究,2001,18(1):54-56.作者简介:侯薇(1
32、973-),女,黑龙江望奎人,硕士研究生,主要研究领域为多Agent系统;董红斌(1963-)男,河北唐山人,副教授,硕士生导师,主要研究领域为分布式人工智能应用基础。(上接第57页)J2ME参考实现的基础上来实现的,并进行了实际测试用例的性能分析工作。限于篇幅,从中选取了部分操作的性能数据,如表1所示。测试是在运行于x86 PC工作站的Linux操作系统上进行的,工作站装备了1GHz主频的CeleronCPU和512MB RAM。从性能测试的结果来看,采用了优化技术实现的Java虚拟机的性能比参考实现获得了明显的提高。表1性能比较操作类型循环执行次数执行时间(ms)J2ME参考实现优化后访问
33、字节数组3 200 000 2 749 1 398字节数据加法运算3 200 000 853 452串比较800 000 245 190异常处理6 400 000 2945 2 297对象之间的转换6 400 000 1 527 767整型到字节型转换6 400 000 1 238 611整型到长整型转换6 400 000 1 234 7035结束语普遍认为,Java是能够适应普适计算的关键技术,并已经在目前的智能手机等移动终端领域形成了比较广泛的应用需求。由于普适计算终端的多样性和资源有限性,要使Java能够适应普适计算的需要,需要对Java进行一定的性能优化,以降低Java对资源的需求,满
34、足更广泛普适应用的需要,并有效降低Java应用的功耗情况,使普适计算终端进行电子商务、电子银行和3D游戏等复杂应用成为可能。本文详细分析了基于线索化方法的解释器优化技术,并在Java虚拟机中实现了基于直接线索化的解释器优化方案。文中对Java虚拟机的直接线索化优化方案进行了详细描述,并采用了字节码替换、提高CPU指令Cache命中率等执行时间优化措施和基于线索化代码的存储空间优化技术。通过性能对比,说明了优化后的Java虚拟机解释器的性能得到了比较显著的提高,并正在用于实际的智能手机产品应用。为进一步提高性能,也正在考虑把部分对整体性能影响较大的内容通过芯片掩膜的方式来实现。通过性能优化,使Java能更好地适应普适计算的发展,进一步拓宽了Java的应用范围。参考文献:1RandyH Katz. Adaptation andMobility inW ireless Information Sys-temsJ. Adaptation andMobility inW ireless Information Systems,1995,(1):6-17.2GregoryD Abowd,Elizabeth DMynat.t Charting Past,Present,andFuture Research in UbiquitousComputingJ. ACM Transactions o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 47189-2026油井水泥浆体弹性模量试验方法
- 宫腔镜下子宫内膜息肉摘除术后护理查房
- 肱骨内固定装置去除术后护理查房
- 根治性颈淋巴结清扫术后护理查房
- 风险评估与应对措施规划手册
- 餐饮服务业食品安全操作指导书
- 供应链环节责任管理品质保障承诺书范文3篇
- 行业文档归档与检索管理工具
- 辽宁省铁岭市达标名校2026届初三下学期月考二英语试题含解析
- 浙江省仙居县2025-2026学年初三零模语文试题含解析
- 《医学影像检查技术学》课件-足X线摄影
- 黄金冶炼项目可行性研究报告
- 第15课《十月革命与苏联社会主义建设》中职高一下学期高教版(2023)世界历史全一册
- GB/T 11981-2024建筑用轻钢龙骨
- 2024年高等教育文学类自考-06216中外建筑史考试近5年真题集锦(频考类试题)带答案
- 《AutoCAD 2023基础与应用》 课件全套 劳动 项目1-8 AutoCAD 2023 入门、绘制简单平面图形-综合实训
- 缠论-简单就是美
- 教师读书分享《做温暖的教育者》
- QCT1177-2022汽车空调用冷凝器
- 2.1科学探究感应电流的方向课件-高二物理(2019选择性)
- 2024陆上风电场安全生产标准化实施规范
评论
0/150
提交评论