互联网软件应用的低干扰动态更新
1. 动态软件更新的背景与需求
软件不断发展以消除缺陷和满足新需求,传统的软件更新通常采用“关闭 - 打补丁 - 重启”的方式。但对于一些对可用性要求极高的关键任务系统,如金融交易处理、交通管理和医疗生命支持系统,服务停机是不可接受的,成本也过高。即使是日常软件,如微软 Windows 和 Office,软件升级带来的干扰也会令人烦恼。此外,调试复杂软件系统时,频繁重启进行代码修改既繁琐又耗时。
动态软件更新(DSU)能够在不停止和重启运行中的软件系统的情况下进行更新,从而缓解上述问题。近年来,DSU 得到了广泛研究,对于 Java 程序的运行时更新,自然会考虑在 Java 虚拟机(JVM)中添加 DSU 支持。在 JVM 中,运行时的 Java 程序由一组类、从这些类实例化的堆对象以及存储活动方法帧的线程栈组成。更新运行中的程序时,需要用新版本替换类,并使用用户提供或默认的转换器相应地转换对象。为保持系统一致性,DSU 系统通常会暂停执行,并在没有要更新的方法处于活动状态时应用更新。
2. 动态更新的两种方式:急切与懒惰
动态更新可分为急切(eager)和懒惰(lazy)两种方式。
- 急切更新 :在程序在某个安全点暂停时,执行所有更新工作。这种方式通常被认为更高效,但也更具破坏性。它会定位所有陈旧对象(即从旧版本类实例化的对象)并一次性更新。通过遍历整个堆来检测陈旧对象,对于大小增加的对象,无法原地更新,需要调整所有引用,包括栈变量和对象字段,使其指向新位置。通常利用虚拟机提供的垃圾回收机制完成这些任务,垃圾回收器必须进入“停止世界”模式并进行全堆收集,程序在此过程中无法继
超级会员免费看
订阅专栏 解锁全文
4974

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



