嵌入式实时Java虚拟机的关键技术研究

VIP免费
4.2 Java 动态内存机制的局限性
虽然 Java 最初是为嵌入式系统设计,但事实上,它却并不能很好的应用于
硬实时的应用。其主要原因在于,Java 的GC 回收特性与实时系统的确定性要求
相冲突,程序员无法控制 GC 何时执行,也不知道 GC 会执行多少时间。尽管如
此,许多嵌入式控制终端并不是硬实时,Java 的可移植性、面向对象性以及开发
简单等优点对于这些实时要求不高的应用仍具有强烈的吸引力。垃圾收集器是
Java 的不可预测性的原因之一。实时 GC 必须能够保证在不影响实时要求的情况
下为新生对象提供可用的内存。而在目前的传统的 Java 虚拟机(JVM)的设计实现
时,在 GC 执行过程中,所有的线程都将被阻塞。
4.2.1“保守”扫描和碎片
传统上,Java 虚拟机主要采用保守的或部分精确的垃圾回收算法,保守算
法中将那些看似有效的指针认为就是一个实际的引用指针。保守的垃圾收集方法
简单而且易于实现,因而在 Java 虚拟机设计中广泛采用。
但是,保守垃圾收集算法也有其缺陷,它不能确切地断定所有对象的引用
的分布位置。其结果是,它必须保守地假设那些看似要引用一个对象的内存字
(memory word)是事实上的对象引用。这就意味着它可能导致某种错误,例如将
一个整数误认为是一个对象指针,这会造成一些负面影响。
首先,当发生这样的错误时(可能并不是常发生),内存泄漏会不可预知地
以一种对应用程序员来说实质上不可再生(reproduce)或调试(debug)的方式出现。
(当然如果采用适当的措施,该程序仍可正确执行);
第二,当已经导致了某个错误,可能会导致对象内存碎片。由于一个保守的
回收器重新定位对象需要更新所有对对象的引用,这在回收器不能确切地断定
一个表面上的引用就是一个真的引用时,是不可能做到的。不能重新定位对象就
会导致对象内存碎片,而这些碎片将无法回收。在嵌入式系统中这种碎片积累造
成的后果是非常可怕的。
4.2.2 简单的 GC
某些 Java 虚拟机使用“标记并清除”(mark-sweep)算法的垃圾回收器。该收
集器周期性的运行,遍历整个堆内存以查找出可达对象。一旦标记出所有的可达
对象,收集器就收集来自自由内存区的已标记对象。为了避免内存碎片的问题,
摘要:
展开>>
收起<<
4.2Java动态内存机制的局限性虽然Java最初是为嵌入式系统设计,但事实上,它却并不能很好的应用于硬实时的应用。其主要原因在于,Java的GC回收特性与实时系统的确定性要求相冲突,程序员无法控制GC何时执行,也不知道GC会执行多少时间。尽管如此,许多嵌入式控制终端并不是硬实时,Java的可移植性、面向对象性以及开发简单等优点对于这些实时要求不高的应用仍具有强烈的吸引力。垃圾收集器是Java的不可预测性的原因之一。实时GC必须能够保证在不影响实时要求的情况下为新生对象提供可用的内存。而在目前的传统的Java虚拟机(JVM)的设计实现时,在GC执行过程中,所有的线程都将被阻塞。4.2.1“保守...
相关推荐
作者:李佳
分类:高等教育资料
价格:150积分
属性:8 页
大小:364KB
格式:DOC
时间:2024-09-23