一种对象粒度和上下文敏感的Java程序并发错误检测框架(Jacob)

来源 :复旦大学 | 被引量 : 0次 | 上传用户:pfeiyuan2009
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着计算机多核技术的发展,Java多线程技术的优势体现得越来越明显。多线程技术不仅能够提高程序的运行效率,而且能提高程序的实时响应性,从而提升了用户体验,目前推出的软件产品大多都使用多线程的方式实现。然而,多线程技术在为程序带来这些优势的同时,由于其执行时的复杂性和不确定性,也给程序编写带来了新的难度。在程序编写时,程序员需要额外地对各个线程中的工作进行同步管理,保持数据的一致性,否则就可能引发程序并发错误,会对软件的质量造成重大影响,并且这类错误较难被检测和修复。不变式检测方法作为目前最为有效的并发错误检测手段,以提取正确程序行为的方式自动识别程序并发错误,较之传统分析方法在精度和效率上都有一定的优势。但现有的不变式检测工具主要为C/C++语言设计,未考虑到Java的程序特性,故对Java程序的并发错误检测无法达到预期的目的。本文通过对Java语言特性的分析后指出,可从以下两方面对Java程序的不变式检测进行改进。1)以对象粒度层面的操作记录和分析程序行为,为Java的不变式检测带来了新的机会。使用对象的操作信息代替原有的字段的操作信息,可以降低程序的交叉存取次数,减少需要记录的信息。同时,因为对象的读写依赖能够反映同一对象中多个关联变量间的依赖关系,所以对象粒度能够用于检测传统工具难以检测的多变量并发错误。2)以上下文敏感的方式进行Java程序的不变式检测,解决Java程序中包装函数所带来的影响。由于Java的封装特性,程序中存在着大量包装函数。而现有的不变式工具以静态语句区分程序点,这种方式无法区分在包装函数中具有不同调用关系的程序语句,进而遗漏一部分Java程序并发错误。基于以上两点发现,本文设计并实现了一个基于对象粒度且上下文敏感的不变式检测工具Jacob:一方面,Jacob使用对象粒度进行不变式提取与检测,能够检测多变量引发的并发错误;另一方面,Jacob是上下文敏感的,能更好的区分程序点,提高对与包装函数相关的并发错误的检测能力。同时,本文对Jacob进行了优化,使其在提高检测能力的前提下,不影响训练敏感度和性能开销,并只引入很少的假阳性。最后,通过对7个现实Java应用的测试表明,Jacob具有更强的Java程序并发错误检测能力,包括能检测原有不变式工具无法检测的与多变量和包装函数相关的并发错误类型。
其他文献
XML (eXtensible Markup Language)即可扩展标记语言,是W3C定义的一套语义标记规范。随着网络应用的快速发展,Web上的数据成指数级增长,XML逐渐成为Internet上数据交换和描述
无线传感器网络综合了微电了技术、无线通信技术、嵌入式计算技术、现代网络以及分布式信息处理技术等先进的技术,其研究已经成为无线通信领域的重要课题。无线传感器网络能
云计算的发展越来越快,它可以提供用户更大范围的数据处理和共享能力,通过存储虚拟化整合不同的存储资源,用户可以通过单一的用户界面访问云中的数据资源,而不会显露底层基础
随着互联网的普及,涌现出了大量的互联网应用,例如社交网络,在线视频,图片分享,电子商务等等,Web2.0的时代也随着来临。这些应用普遍采用分布式的架构来存储用户产生的海量数据,如何
近年来,越来越多的计算机科学方法被广泛应用到诸如生物学等领域。一方面,计算机科学的方法可以通过在计算机上进行模拟等方式使得对问题的研究可以摆脱原本复杂的实验环境和
公钥密码(Public Key Cryptography, PKC)在保证开放的网络(如互联网)中通信的真实性和保密性上起着至关重要的作用。目前,RSA密码体系仍然是最重要而且应用最广泛的公钥密码
随着互联网的高速发展,数据规模以指数级的速度增加,如何来存储和处理这些数据是一个挑战性的问题。Hadoop允许用户不熟悉分布式的情况下,充分利用海量存储的集群和高速计算,做分
学位
近年来,越来越多的分布式系统被各行各业使用,如军事、航空、金融系统等行业。随着为分布式系统设计的分布式软件的复杂度的增加,分布式系统中节点数量的增多,导致分布式系统
在计算机网络中,每一个网络节点都执行着信息生成、路由选择、信息转发、信息接收等多项任务。但是,其中一些节点还负责执行其它的附加任务,例如,收集和分析网络中信息瘫痪的