| 摘要 | 第1-7页 |
| Abstract | 第7-8页 |
| 第一章 引言 | 第8-18页 |
| ·研究背景和动机 | 第8-9页 |
| ·相关工作 | 第9-14页 |
| ·利用自省机制进行更新 | 第9-12页 |
| ·方法体替换 | 第12页 |
| ·修改Java虚拟机以支持更新 | 第12-14页 |
| ·本文工作 | 第14-16页 |
| ·全文结构 | 第16-18页 |
| 第二章 动态更新算法介绍 | 第18-23页 |
| ·Ginseng和安全点更新算法 | 第18-20页 |
| ·单线程程序的更新 | 第18-19页 |
| ·单线程程序的更新算法 | 第19-20页 |
| ·多线程程序的更新算法 | 第20页 |
| ·POLUS和双向写穿同步更新算法 | 第20-22页 |
| ·函数的更新 | 第21页 |
| ·数据结构的更新 | 第21页 |
| ·新旧版本全局变量的同步 | 第21-22页 |
| ·更新算法 | 第22页 |
| ·动态更新对C语言软件的适用性调查 | 第22-23页 |
| 第三章 Java程序演化的研究 | 第23-29页 |
| ·使用抽象语法树分析Java软件演化规律 | 第23-26页 |
| ·分析类型的变化 | 第24-25页 |
| ·处理多态、接口以及匿名类的问题 | 第25页 |
| ·泛型类和数组 | 第25-26页 |
| ·自省(Reflection)和注解(Annotation) | 第26页 |
| ·枚举类型 | 第26页 |
| ·讨论Java软件演化过程中动态更新技术的适用性 | 第26-29页 |
| ·类的改变是否频繁 | 第28页 |
| ·静态域的改变是否频繁 | 第28页 |
| ·实验结果分析 | 第28-29页 |
| 第四章 修改Java虚拟机支持动态更新 | 第29-39页 |
| ·以线程为单元的更新算法 | 第29-31页 |
| ·更新算法介绍 | 第29-30页 |
| ·和POLUS的更新算法的比较 | 第30-31页 |
| ·基于Harmony的设计 | 第31-32页 |
| ·动态更新技术所需类加载器的实现 | 第32-33页 |
| ·类的重命名 | 第32页 |
| ·访问同一个类的不同版本 | 第32-33页 |
| ·线程调用栈跟踪 | 第33-34页 |
| ·线程调用栈跟踪的实现 | 第33-34页 |
| ·线程的结束和创建 | 第34页 |
| ·对象保护和同步 | 第34-37页 |
| ·对象的保护 | 第35页 |
| ·对象的同步 | 第35页 |
| ·Java语言层的实现 | 第35-36页 |
| ·JNI的支持 | 第36-37页 |
| ·同步类生成工具 | 第37-39页 |
| ·设计 | 第37-38页 |
| ·实现 | 第38-39页 |
| 第五章 在JVMTI上实现动态更新 | 第39-46页 |
| ·类加载器 | 第39-42页 |
| ·访问同一个类的不同版本 | 第40-41页 |
| ·访问重命名的类 | 第41-42页 |
| ·线程调用栈跟踪 | 第42-45页 |
| ·利用JNI获取需要的信息 | 第43页 |
| ·避开JNI调用 | 第43-45页 |
| ·简化线程跟踪 | 第45页 |
| ·对象保护和同步 | 第45-46页 |
| 第六章 实验 | 第46-50页 |
| ·实验结果 | 第46-47页 |
| ·无限循环 | 第47-48页 |
| ·多余引用 | 第48页 |
| ·更新速度 | 第48-50页 |
| 第七章 分析及展望 | 第50-55页 |
| ·和其他动态更新技术的比较 | 第50-51页 |
| ·期望的Java虚拟机的支持 | 第51-52页 |
| ·Caprice的改进 | 第52-55页 |
| ·在初始化更新时避免暂停 | 第52页 |
| ·把更新中发生的修改精确到方法 | 第52-53页 |
| ·针对类加载器的优化 | 第53-55页 |
| 第八章 总结 | 第55-56页 |
| 参考文献 | 第56-59页 |
| 致谢 | 第59-60页 |