这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [转帖]用于嵌入式设备的Java技术

共1条 1/1 1 跳转至

[转帖]用于嵌入式设备的Java技术

菜鸟
2003-01-17 23:08:29     打赏
发信人: ColdFire(天地一沙鸥), 信区: Embedded. 本篇人气: 85 标 题: 用于嵌入式设备的Java技术(zt) 发信站: 南京大学小百合站 (Fri Dec 27 09:31:50 2002) 用于嵌入式设备的Java技术 上网时间 : 2000年02月01日 适于Internet的Java 动态编译与JIT 可靠性和可预测性问题 精确与保守 一些嵌入式设备开发者认为Java技术在应用中就其功能来说是不完善的:太慢、太不可预 测或是太大。这里有一些可供选择的方法可实现Java技术,并能有效地解决这些问题。 据Sun Microsystems公司估计,现在已有70多万个开发者在使用Java技术。尽管Java平台 在公司或企业应用中已有许多成功的事例,但对其在嵌入式设备开发中的应用话还鲜有公 开的论述。为了更客观地认清当前的情形,让我们从两个方面对Java技术做一评述:规范 和实现。现有的Java平台“规范”并没有问题,但是现有的很多“实现”(特别是针对Per sonalJava和EmbeddedJava)对于大多数嵌入式设备并不可行。 适于Internet的Java Java平台于1995年面市,作为一种编程语言和运行环境,它特别适用于与Internet相关的 应用。Sun Microsystems倡导“网络就是计算机”,他们已经意识到强大的微处理器正逐 渐应用于许多消费类和嵌入式设备,这些设备会越来越多的与网络相连。网络连接从工作 站和PC开始,随后迅速波及打印机、扫描仪、复印机及其它办公设备。最近,个人数字助 理、机顶盒、双向寻呼机、智能电话,甚至数字手表等带有微处理器的新式设备也连到了 数字网络。在Java之前,网络基本被视为储存和提供相对静态的信息的大型系统,也许用 “网络就是虚拟磁盘驱动器”来描述可能更贴切一些。现在,Java技术为联网的计算设备 提供了一种有效的方法,用于存储和分布动态和可扩展的功能性,从而扩展了网络的实用 性。 Java结构包含有几个截然不同但又相互关联的技术,其中每一个在Sun的规范中都有详细说 明。这些技术包括Java编程语言、Java虚拟机(JVM)和Java API(见图1)。下面我们将集中 在JVM及一些实现方面的问题,这些问题可能会影响Java技术对嵌入式应用的适用性。 http://www.eetchina.com/ARTICLES/2000FEB/INSIG-1-D.JPG 图1:Java体系包括若干个截然不同但又相互关联的技术。 跟所有的虚拟机器一样,JVM也定义了一个抽象的计算机。其规范定义了每一个JVM必须具 有的功能。但是对于每一种应用的设计者,它都会给予几乎无限制的自由。例如,每一个 JVM都可以使用任何技术去执行Java字节代码。事实上,JVM可以软件或硬件的形式实现, 或两者不同程度的混合。这种灵活性意在使JVM可在各种计算机和嵌入式设备上实现。 在最上层,JVM的主要目的是装载Java类文件并执行它们(见图2)。在执行期间,JVM实现在 两个方面会影响Java技术对特定应用的适用性:用于执行字节代码的方法;系统资源(主要 是内存)管理。 http://www.eetchina.com/ARTICLES/2000FEB/INSIG-2-D.JPG 图2:Java虚拟机的组成和功能。 JVM执行字节代码的缺省方式是解释性执行。鉴于C/C++应用程序是被编译成自然指令集并 存储在单个可执行文件里的,Java应用程序便被编译成Java字节代码且存储在由JVM装载和 执行的单独的类文件里。当Java应用程序运行时,JVM便载入类文件并将字节代码作为指令 流加以解释。 一般地,当JVM使用纯解释方法执行时,性能将会比同等的自然编译的C/C++程序慢10到20 倍。然而,有其它方法能够提高字节代码的执行速度。例如,just-in-time(JIT)编译方法 就能比纯解释执行方法将应用程序性能提高达十倍。不仅仅只解释字节代码,每当JVM第一 次遇到新的字节代码时,它就调用JIT编译器将那个代码编译成自然指令。随后这些自然指 令由JVM保存,在下一次Java应用程序需要时可再次调用。然而,性能的提高是有代价的。 JVM纯解释版本的主要优点之一是它只占用较小的内存量——典型的实现以所包含的库不同 ,需要0.5至3MB的ROM。而JIT编译技术一般情况下需要四倍于纯解释方法的内存量。此外 ,它须编译所遇到的所有代码,这需要极大数量的内存,而且经常需要磁盘和虚拟内存对 编译的代码段进行分页。因此,基于JIT的执行适用于拥有强大CPU、足够系统内存(大于3 2MB)的计算平台,而且还要有可支持插拔的快速磁盘驱动器。但是,对于通常有更多资源 限制的大多数嵌入式设备,它却不太适用。 动态编译与JIT 一种更适用于嵌入式设备的字节代码执行方法是自适应动态编译。与JIT相似,自适应动态 编译利用快速的编译技术来提高解释性字节代码的执行性能。然而,与JIT不同的是,自适 应动态编译器通常更小一些(大约为100KB);有更多的Java字节代码选择以便编译成自然代 码;不需要虚拟内存;与可用的系统内存匹配。在字节代码的解释执行期间,JVM将监控应 用程序的运行并测定出运行瓶颈在哪里。然后,它会调用自适应动态编译器(以一个线程来 实现)以编译那些执行最为频繁的字节代码段。根据实现方法的不同,自适应动态编译可能 编译整个类、单个方法或仅仅是某一方法内的一个模块。为了快速存取,所得到的自然指 令将存储在RAM中。随后,JVM会找到下一个执行最频繁的代码段并对其编译。这一过程一 直重复,直到所有可用的代码缓冲区用完。因为动态编译器是自适应的,当它遇到一个比 先前编译并存储的代码执行更为频繁的新代码段时,它就会编译这些新的Java字节代码并 把它们存储在容纳较低使用频率代码的缓冲区内。用户可以配置用于编译的系统内存容量 ,以及用于存储已编译自然指令的代码缓冲区的大小和数量。在有更高可预测性的执行期 间,应用程序也可通过自适应动态编译器的线程优先级,而得到可靠的控制,从而为嵌入 式设备提供更合适的特性(见图3)。 http://www.eetchina.com/ARTICLES/2000FEB/INSIG-3-D.JPG 图3:自适应动态编译器与JIT和解释性方案的内存占用量及相关性能之对比。 可靠性和可预测性问题 内存的有效管理对于嵌入式设备特别关键,因为它们需要更多可预测的行为。JVM在管理内 存方面扮演着重要的角色。事实上,应用程序本身仅仅为新对象发出内存分配请求,并不 明确地释放不必要的内存。JVM可自动地管理内存的释放。每一个JVM必须执行“垃圾收集 器”功能以提供内存管理的便利。有几种不同的“垃圾收集器”实现方法,其中有一些比 其它的更适用于嵌入式系统(见图4)。 http://www.eetchina.com/ARTICLES/2000FEB/INSIG-4-D.JPG 图4:垃圾收集的不同实现。 例如,一个可运行完整的批循环且不能被抢占的“垃圾收集器”将导致Java技术对大多数 嵌入式设备都不适用,因为它的行为太不可预测。而一个递增的“垃圾收集器”能够以步 进的方式回收内存,而不是从单一的途径收集所有的无用内存。这种实现方法可能会导致 比分批垃圾收集更加不可预测的行为。尽管如此,如果不能被抢占,递增的“垃圾收集器 ”可能会堵塞应用程序(尽管时间很短)。一种“并发”的“垃圾收集器”可递增地执行垃 圾收集且能够被完全抢占,它将能提供比所有其它类型更可预测的特性。 除了其执行模式外(分批、递增或并发),“垃圾收集器”还能以不同程度的效能和效率执 行它们的任务。要把有效的对象从垃圾中分离出来有两种基本方法:“参考计数”和“跟 踪”。参考计数是一种较老的垃圾收集技术,而且要为堆栈中的每个对象保留一个参考计 数。实质上,对给定对象的每一个新参考,参考计数是递增的;当某一对象的参考超出界 限时,参考计数是递减的。所有带一个零参考计数的对象都能被垃圾收集。然而,在其它 的缺点之中,由于参考计数不能承受在每次对象被参考时递增和递减参考计数的系统开销 ,使它基本上无法适用于嵌入式设备。 精确与保守 更适合JVM的方法是跟踪垃圾收集技术。跟踪垃圾收集从根节点开始跟踪对象参考树。在跟 踪期间遇到的参考对象被标记出来,跟踪完成后未做标记的对象就可以被垃圾收集。在跟 踪过程中,“垃圾收集器”既可使用“精确”策略也可以使用“保守”策略来识别对象的 参考。保守的垃圾收集器可能辩别真正的对象参考和相似或克隆的对象参考(例如对象指针 对应32位整数)。尽管这种方法可能快一些,但是它也可能导致内存溢出。另一方面,精确 的垃圾收集器可以辨别真正的和相似的对象参考之间的区别,并且适当释放所有未参考的 对象。垃圾收集最后一个需要考虑的重要方面就是能否处理好堆栈分段存储。考虑到大多 数嵌入式设备的有限内存量,一个并发、精确和紧凑的垃圾收集策略应该可以处理大多数 可预知的系统行为。 附栏 嵌入式设备的Java兼容环境 Jeode平台是专为嵌入式设备设计的,是Sun公司EmbeddedJava和PersonalJava规范的一个 快速实现,由Insignia独立开发。它通过了Sun的EmbeddedJava技术和PersonalJava平台兼 容性测试,获得了“Sun认可虚拟机(Sun Authorized Virtual Machine)”的殊荣。它采用 “自适应动态编译”技术,所需内存量只有JIT技术的四分之一。此外,由一家独立咨询公 司进行的测试宣称其平均速度要比纯解释性JVM快6倍。Jeode使用了“精确并发”的垃圾收 集技术,可作为优先抢占的线程运行,并具有内存压缩功能以清除内存碎片。使用Jeode平 台,开发者将得到全功能的、完全与Java兼容的虚拟机技术,可针对其特殊的嵌入式应用 进行配置和调整。Jeode平台既可在小至358K的内存中运行,也可在大到完全配置的2.7MB ROM中运行。它包括仅支持英语的所有Java类库和所需动态链接库。带所有Java类库的完 整国际语言支持需要大约5MB ROM。该平台可在多种操作系统和目标处理器上运行,现可支 持Windows CE和NT、VxWorks和Linux,所支持的处理器有MIPS、ARM、Intel x86、PowerP C和Hitachi SH。 欲了解更多信息,请联系作者: E-mail:jeode@insignia.com Fax : +1-510-360-3701 -- ※ 来源:.南京大学小百合站 http://bbs.nju.edu.cn[FROM: 61.144.207.46] ※ 修改:.ColdFire 於 Dec 27 09:32:57 2002 修改本文.[FROM: 61.144.207.46]



关键词: 转帖     用于     嵌入式     设备     技术     动态     编译     方法         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]