Java已 经在各个范畴得到了广泛的运用,特别是无线移动范畴,全球超越100个移动运营商现已推出了Java下载服务。Java也正成为其它嵌入式设备的支撑标 准,如机顶盒。Java运用的快速增长源于以下几点:尽管Java的可移植性一向有争辩,但无庸置疑的是其快速上市的优势,开发和发布Java运用都很便 捷;Java有着广泛的支撑网络,许多的第三方在开发各色各样的Java运用;Java渠道固有的安全性合适网络下载。
能够说,现在Java游戏现已开展成一项工业,三维图画、多人连线等更高档的支撑也不罕见。网络运营商和手机制造商期望呈现更具可玩性的游戏,乃至跳出游戏运用开展比方商务、定位、视频等各式各样的增值服务,以带来更多的收入。
为支撑这些新的服务,J2ME渠道有必要快速开展,集成新的API(如移动3D),融入新的特性,比方能够运转多个MIDlet。移动设备上运转Java需求处理好这两个问题:Java分解和在资源有限的设备上怎么确保Java的功用。
运营商和手机制造商为标准Java API参加了许多扩展,造成了必定程度上的“Java分解”,影响到了Java的进一步运用,工业链上各个环节的厂家不得不做额定投入以支撑各种扩展。于 是Sun公司建立了JCP(Java Community Process)企图削减这种分解,一起尽力能够跟上嵌入式设备上Java运用和改变的脚步。现在许多JSR扩展标准都是经过JCP提出的,证明JCP起 着正面的促进作用,能根本上处理分解问题。
嵌入式Java虚拟机的规划约束
现在商场上现已有许多声称支撑Java的手机,从技能上来看,许多中低端手机基本上是在30~50MHz ARM7TDMI处理器上运转一个小型的软件字节码(bytecode)解说器,相对较慢。这对许多的Java小游戏是够用了,由于其功用是由体系的图形处理才能决议的,对Java的要求不是特别高。可是商场开展改变很快,越来越多的Java运用需求更强的图形处理才能,以及一个强壮的Java虚拟机。
图1:指令流水线示意图。 |
几种加快Java履行速度的传统办法包含几种软件计划,如字节码解说器优化、即时(JIT, just-in-time)编译器、预先(AOT, ahead-of-time)编译器等;硬件计划有专用Java处理器和Java协处理器。这些办法在进步功用的一起,一般也会添加对功耗、内存的需求, 影响到了体系渠道的本钱,特别是硬件计划。
JIT或AOT编译器是把字节码动态地编译成方针渠道的本地码,然后直接履行。望文生义,AOT编译计划便是在运用下载完后编译一切代码,而实际上 某些代码很有或许根本就履行不到。JIT编译计划则是运转到某段代码之前,只对这一段作即时的编译。这种即时处理战略会让用户在挑选发动运用程序后,不得 不等候很长的一段时刻程序才真实运转起来。别的,研讨显现动态编译会导致代码胀大4~6倍。因而,除了减慢运用程序发动速度,不管JIT仍是 AOT计划,都需求很大的额定内存来保存编译生成的本地码。
动态编译技能
有一种补偿JIT编译器缺陷的办法便是选用一般被称为动态自适应编译(DAC)的混合软件计划,它能够看成是JIT编译器和字节码解说器的组合。在 开端阶段,程序解说履行,一起软件对代码作剖析并决议哪些要害代码需求被编译,这些要害代码被辨别出来后,即被编译本钱地码运转。
选用了DAC计划,JIT编译的一些负面影响或许会削减,可是JIT究竟无法供给最好的速度功用,发动时刻和代码胀大的问题仍会比较突出。
在完结要害代码剖析前,程序得运转于慢速的解说器方法,然后暂停再进行编译。运用程序发动时,许多函数办法仅运转一次,抱负情况下不应该编译这些代码。从用户体会视点来看,影响是很显着的,特别是程序发动阶段会感觉到较长时刻内程序没有任何用户呼应。
由于纯软件的解说器很慢,大多数DAC计划实际上很少做代码剖析,而编译简直一切的函数办法,就像赌博相同,赌这个函数办法接下去会履行许屡次。假如赌错,将会支付更多的价值—不光花费了更多的编译时刻,并且编译发生的那些不再运转的代码耗费了名贵的内存资源。
编译的代码会占用内存资源,DAC有必要从内存中删掉曾经编译好的代码,为新的编译让出空间,接下去假如运转到刚被删掉的代码,又得从头编译。这样产 生了功用滑润度问题,由于在编译新代码或重编译过程中,程序得暂停履行。比方在切换游戏场景时,玩家会感觉到难以忍受的等候。
尽管动态编译存在一些缺陷,可现在嵌入式设备的硬件装备也越来越高,特别是RAM或ROM,因而比方DAC乃至一些AOT计划变得很有吸引力。然 而,咱们也看到一个体系渠道中许多的组件是用Java开发的,越来越多的可下载运用是用Java写,多个Java程序并行履行的需求也开端发生。这些开展 趋势意味着Java对内存的需求是无止境的。
硬件加快
硬件Java加快计划一般需求添加额定的芯片以及更多的功耗。专用Java处理器支撑直接履行Java字节码,这尽管看起来功用不错,可是体系集成和开发的杂乱度却大幅上升。Java处理器不会支撑已有的许多操作体系和运用程序,它需求和其他的嵌入式处理器协作运用。
图2:选用ARM处理器的Java运用嵌入式体系架构。 |
Java协处理器是把Java字节码翻译成主处理器的指令。这当然需求许多软硬件集成作业,要在操作体系参加对协处理器的支撑特别困难。相同协处理 器需求额定的板上空间和额定的功耗,并且自身也很贵。别的,协处理器和主内核之间的松耦合衔接方法决议了其运转速度相对较慢。
硬件架构扩展和Jazelle DBX技能
在已有处理器架构上加硬件扩展能够相同支撑直接运转Java字节码,并且坚持了操作体系和运用程序的兼容性。架构扩展计划相当于为处理器附加了一套 指令集,重用已有的处理器资源不会添加额定的硬件本钱和功耗。带扩展的内核能够一起履行Java字节码及本地码,开发者能够充分利用已有的操作体系、运用 程序开发技能,在Java程序可移植性和功用之间获得很好的平衡。
传统的ARM处理器都支撑两套指令集:32位ARM指令集和16位Thumb指令集。一般运用Thumb指令集的代码巨细约为ARM代码的 35~40%,但会细微下降程序功用。指令集支撑在ARM和Thumb代码之间相互作函数调用,程序员能够在编译时分别从功用和代码密度的视点考虑,以决 定不同部分的代码编译成ARM或是Thumb(图1)。
Jazelle DBX是一种硬件架构扩展技能,为ARM处理器引入了第三套指令集—Java字节码。新指令集建立了一种新的状况,处理器在此状况下处理Java字节码取指、译码和保护Java操作数栈。
为了下降芯片尺寸并进步功用,Jazelle DBX没有规划成传统方法的微引擎,而是融入流水线中的一个有限状况机。和协处理器或专用处理器规划不同的是,Jazelle DBX和主处理器共用缓存,这都会对功耗和功用带来好处。另一个重要的规划考虑是确保Jazelle DBX技能不会影响实时中止功用,仍坚持与操作体系中已有ARM反常处理代码的兼容。
Jazelle DBX技能添加了一条新的“Branch-to-Java”指令来进入Java状况。此指令支撑条件履行,先查看条件标志,假如条件满意,处理器进入Java状况,跳转到指定方针地址,开端履行Java字节码。
在Java状况下,PC寄存器仍是32位寻址Java字节代码。字节码取指、译码分别在两个流水级完结(对应ARM/Thumb状况下为一个译码流水级)。32位取指操作一次功用够取4个Java字节码,功用优势显着。
当时处理器状况寄存器(CPSR)新界说了一个位,用来记载处理器的状况。这很重要,由于在处理中止或其它反常时,CPSR会主动保存或康复程序运转状况。
Jazelle DBX技能答应一切的Java指令是“可从头开端”的。这样在履行Java指令过程中,立刻呼应中止,然后削减中止推迟,确保实时功用。
在Java状况下,有若干个ARM寄存器能够功用复用(包含栈指针、栈顶四项(top4 elements of stack)、局部变量0等)。正是这些硬件复用规划,才使得只用了很少的额定逻辑(约一万两千门)就完成了一个Java机。把一切Jazelle DBX扩展所需的状况用ARM寄存器保存,也确保了和现有操作体系、中止处理程序和反常处理代码的兼容性。
把栈顶四项保存在ARM寄存器中也能进步Java功用。许多的程序剖析显现,大多数程序的栈深度是很小的,所以这项战略能够尽量削减内存拜访,硬件也可主动处理栈溢出或下溢。
Jazelle DBX技能的功用
关于一个高度优化的商业Java虚拟机,运转评测程序或杂乱的MIDP2.0运用,Jazelle DBX技能一般可带来约2~4倍的功用提高,并且对实时性不会发生任何影响。
关于嵌入式设备来说,运转速度还不是仅有的考虑要素,功耗、存储器占用、集成的难度、体系本钱和用户体会等都很重要,需求很好的平衡。
Jazelle DBX技能把Java字节码分为3类:直接履行、模仿履行(emulated)和未界说。大多数Java字节码(ARM926EJ-S支撑134个)可由 硬件直接履行,余下的由一些简略的高度优化的ARM指令序列模仿履行。把原先虚拟机中的解说器去掉,替换以ARM专有的代码(称为VMZ,这些代码乃至比 替掉的代码更小)。
统计剖析标明,在一段典型的程序代码中,需求模仿履行的字节码不会超越5%。这便是为什么ARM决议Jazelle DBX硬件扩展只支撑直接履行部分的字节码,而非悉数。Jazelle DBX硬件扩展的完成约为一万两千门的规划,而大多数的专用Java处理器或协处理器一般有6万到10万门的规划。这样的规划战略把硬件逻辑的杂乱度减到 最小、功耗低、体系集成难度低,却仍能表现出很高的全体Java功用。
未界说的字节码与模仿履行的字节码天壤之别。一旦履行到未界说的字节码,处理器退出Java状况,进入ARM状况履行反常处理。有了这样的机制,就能够以软件补丁的方法完成对未来或许会扩展的Java字节码支撑。
为协助用户运用Jazelle DBX,ARM公司供给了JTEK件包,其间包含了VMZ源代码,为一个现有的Java虚拟机和操作体系集成JTEK一般只需几天时刻。ARM也和干流的 Java渠道供货商协作,如Aplix/iasolution和Sun等,在他们的软件产品中参加了Jazelle DBX支撑。别的,ARM和许多操作体系厂商协作,干流的如WindowsCE、SymbianOS、PalmOS、Linux,以及许多实时专有的操作 体系都支撑Jazelle DBX。
本文小结
移动Java游戏促进了Java在无线设备上的运用,Java固有的端对端的安全性和Java运用开发的方便性使Java成为新的收入增长点。在资 源有限的嵌入式设备上也需求高功用的Java渠道,Jazelle DBX这样的加快技能正是应对了这样的需求,其他一些硬件或纯软件加快计划将获益于Jazelle DBX,并防止原有的各种缺陷。
经过交融各种新特性的参加,ARM将在未来架构开展中持续支撑Jazelle DBX以及后续的新技能。Jazlle技能和相应的JTEK软件包将更广泛的促进Java在嵌入式设备上的运用,更多更新的移动Java运用将随之出现。