论文部分内容阅读
编写正确的程序并不容易,而编写正确的并发程序就更难了。与顺序执行的程序相比,并发程序中显然更加容易出现错误。同时,伴随着处理器数量的增加,有效地采用并发会变得越来越重要。为支持并发编程,Java语言提供了强大的多线程技术,能够帮助编程人员生成比较高效健壮安全可靠的并发程序。为了保证每个线程都能够正常执行原子操作,Java语言还引入了线程同步机制,主要是通过对共享数据加锁,来实现多个线程对共享资源的互斥访问。虽然粗粒度的保守锁机制能够比较容易地写出正确的代码,但是同步操作本身开销很大,加之过于悲观保守,在实际应用中会出现大量不必要的同步操作,这样对整个程序的运行效率会产生极大的负面影响。为保证并发程序的正确性,同时降低程序运行时的同步负载,本文重点提出一种新的基于逃逸分析的同步优化算法,并在开源的Java字节码优化框架——Soot工具上,实现了该算法。围绕同步优化,本文主要探讨并完成以下工作:(1)提出一种基于points-to分析的上下文相关、流不敏感、过程间的逃逸分析法该方法是以points-to分析为基础,利用线程逃逸判定规则和逃逸状态合并规则,过程内和过程间传播静态字段和线程对象及其字段的逃逸信息,并在此基础上,鉴别出整个Java应用程序和Java类库中线程局部的对象,进而将其上的同步操作做安全删除。对于算法的具体描述,主要集中在论文的第三章。(2)在“封闭世界”中实现逃逸分析本文利用Soot框架,实现了上述基于points-to分析的逃逸分析方法。具体实现过程如下:首先,利用Soot工具内置的points-to分析框架——SPARK,进行必要的points-to分析;然后,在此基础上,通过扩展Soot工具的流分析框架,实现本文的逃逸分析方法。SPECjvm98测试基准表明,本文逃逸分析方法的静态同步删除率可达15.7%-99.2%(平均为55.9%)。对于算法实现的具体描述,主要集中在论文的第四章。