摘要 | 第3-5页 |
ABSTRACT | 第5-6页 |
目录 | 第7-10页 |
1 绪论 | 第10-16页 |
1.1 研究背景 | 第10-11页 |
1.2 国内外现状 | 第11-13页 |
1.3 选题意义和完成主要工作 | 第13-16页 |
1.3.1 选题意义 | 第13-14页 |
1.3.2 论文主要工作 | 第14-16页 |
2 Java优化相关基础知识 | 第16-24页 |
2.1 程序分析技术 | 第16-17页 |
2.2 Java语言规范中线程间同步机制 | 第17-20页 |
2.2.1 线程(Thread)同步 | 第17-18页 |
2.2.2 Java中线程同步特点 | 第18页 |
2.2.3 同步安全的类 | 第18-19页 |
2.2.4 对象锁被释放情况 | 第19页 |
2.2.5 死锁产生以及如何避免 | 第19页 |
2.2.6 多线程间通信机制 | 第19-20页 |
2.3 Java虚拟机 | 第20-21页 |
2.4 类文件格式 | 第21-22页 |
2.5 Java虚拟机执行过程 | 第22-23页 |
2.6 小结 | 第23-24页 |
3 优化框架Soot | 第24-39页 |
3.1 Soot概述 | 第24-25页 |
3.2 Soot中间表示(IRs) | 第25-31页 |
3.2.1 Baf中间表示 | 第26页 |
3.2.2 Jimple IR | 第26-29页 |
3.2.3 ShimpIe IR | 第29-30页 |
3.2.4 Grimp IR | 第30-31页 |
3.3 Soot数据结构基础 | 第31-33页 |
3.3.1 Soot的基本构造 | 第32页 |
3.3.2 方法体构造 | 第32页 |
3.3.3 值接口 | 第32页 |
3.3.4 语句接口 | 第32页 |
3.3.5 引用(box) | 第32-33页 |
3.4 Soot注释框架 | 第33-34页 |
3.5 Soot执行 | 第34-37页 |
3.6. 扩展Soot | 第37-38页 |
3.7 小结 | 第38-39页 |
4 基于points-to和注释框架的逃逸分析 | 第39-49页 |
4.1 相关概念 | 第39-43页 |
4.1.1 线程逃逸和线程局部 | 第39-40页 |
4.1.2 可达性信息图 | 第40-41页 |
4.1.3 控制流图(Control Flow Graph)和调用图(Call Graph) | 第41-42页 |
4.1.4 逃逸状态及属性结构 | 第42-43页 |
4.2 逃逸分析初始化 | 第43-44页 |
4.3 过程内以及过程间分析 | 第44-48页 |
4.4 小结 | 第48-49页 |
5 同步优化注释的具体实现 | 第49-65页 |
5.1 分析中用到的数据结构 | 第49-52页 |
5.1.1 数据描述 | 第49页 |
5.1.2 数据引用链描述 | 第49-50页 |
5.1.3 数据信息描述 | 第50-52页 |
5.2 指针图和控制流图分析 | 第52-54页 |
5.2.1 控制流图(Control Flow Graph) | 第53页 |
5.2.2 调用图(Call Graph)分析 | 第53-54页 |
5.3 前置分析 | 第54-55页 |
5.3.1 前置过程内分析 | 第54页 |
5.3.2 过程间分析 | 第54-55页 |
5.4 生成属性(Attribute)信息 | 第55-59页 |
5.4.1 SootClass和method属性信息生成 | 第55-56页 |
5.4.2 代码属性信息添加 | 第56-59页 |
5.5 方法运行及结果分析 | 第59-64页 |
5.5.1 方法运行 | 第59-60页 |
5.5.2 实验结果分析 | 第60-63页 |
5.5.3 代价分析 | 第63-64页 |
5.6 小结 | 第64-65页 |
6 总结 | 第65-66页 |
6.1 总结 | 第65页 |
6.2 不足及展望 | 第65-66页 |
参考文献 | 第66-70页 |
攻读学位期间取得的研究成果 | 第70-71页 |
致谢 | 第71-73页 |