Javelus:高效低干扰的Java动态更新系统
1. 对象更新机制
1.1 混合对象模型
Javelus采用混合对象模型来处理对象更新时大小增加的情况。在该模型中,原地对象(in - place object)占用陈旧对象的空间,而幻影对象(phantom object)则被分配到其他地方,用于存放无法放入原地对象空间的字段。幻影对象仅由其对应的原地对象引用,对混合对象的任何访问都必须以原地对象为入口点。
为了实现这一模型,Javelus利用了对象的抽象字段。在JVM中,每个对象都会分配一些抽象字段以支持诸如锁定、默认哈希码和垃圾回收等功能。在32位Java HotSpot VM中,这些字段占用64位空间。Javelus定义了这些抽象字段的新模式,用于指示当前对象是否为混合对象,并对其幻影对象的地址进行编码。新模式占用原抽象字段的空间,原抽象字段则被移动到幻影对象中。
需要注意的是,混合对象仅用于转换在更新过程中大小增加的对象。从新版本类直接实例化的对象会正常分配。为了支持对幻影对象字段的透明访问,Javelus会拦截对这些字段的所有访问,如果目标对象是混合对象,则进行重定向。
Javelus原则上不依赖于任何特定的垃圾回收算法,但可以利用垃圾回收器将混合对象转换为正常对象,从而最终消除访问间接性和内存局部性损失带来的开销。例如,通过标记 - 整理垃圾回收器可以消除混合对象。初始堆中有三个对象x、y和z,更新后为y创建了混合对象。在垃圾回收过程中,y的原地对象与幻影对象合并形成正常对象,原地对象被释放。当对象被整理时,对y的引用(如x中的引用)最终会更新到y的新位置。
1.2 对象转换
Ja
超级会员免费看
订阅专栏 解锁全文
36

被折叠的 条评论
为什么被折叠?



