低干扰动态更新技术解析
1. 类转换方法
类转换方法 updateClass 与对象转换方法类似,但它主要处理静态字段。每个被删除的静态字段的值作为带注释的方法参数提供。
1.1 超类型处理
当当前类型变更类的超类也发生类型变更时,超类对应的转换类需要作为超类被继承。如果为超类定义了对象转换方法,Javelus 会在当前类的对象转换方法开始时自动调用它。
1.2 转换代码编写注意事项
开发者可以自由使用 Java 语言编写转换代码,但要注意类更新可能在任何 DSU 安全点发生,对象转换在类更新后按需触发。为确保语义正确性,需要深入理解应用逻辑和两个版本之间的差异。一般来说,差异通常较小,转换逻辑也相对简单。
1.3 编程技巧与策略
- 避免潜在死锁 :在转换代码中不要使用锁。
- 谨慎访问对象状态 :除非明确知道操作后果,否则不要访问当前对象的局部状态以外的值。
- 限制 DSU 发生时间 :将 DSU 发生时间限制在旧版本和新版本行为“收敛”的时间段内。可以手动将一些方法添加到受限方法集中,避免在这些方法活动时进行 DSU,但这可能会降低动态更新的及时性。
2. 更新代码
2.1 到达 DSU 安全点
运行的程序需要到达 DSU 安全点才能进行更新。DSU 安全点是更严格的 VM 安全点,此时应用线程栈中不包含任何活
超级会员免费看
订阅专栏 解锁全文
15万+

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



