27、Javelus:高效低干扰的Java动态更新系统

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值