Java内存模型的动静态结合验证方法

来源 :中国科学院大学 | 被引量 : 0次 | 上传用户:luoxingrobin
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着多核时代的到来,共享内存的多线程编程开始普及。多个线程在并发访问共享内存时会存在内存一致性问题。Java语言通过直接在语言层定义内存模型来解决该问题。Java内存模型是保证Java多线程程序安全性和高效性的关键。  迄今为止,Java语言一直沿用5.0版本发布的内存模型。为了同时满足模型的易用性、类型的安全性和编译的高效性三方面的要求,Java内存模型采用了一种非常复杂和晦涩的公理语义。该模型自从发布后,对该模型使用各种形式语义的描述和表示,以及内在缺陷的发现和改进,一直是理论研究的热点问题。对于如何修订Java模型目前尚无定论。另一方面,内存模型相关的并发模块是Java虚拟机实现中最复杂的部分。保证并发模块的实现符合Java内存模型在工业界有着明确的需求。当前对Java内存模型的验证工具都属于静态验证,无法验证虚拟机实现的正确性。因此有必要研究Java内存模型的动态验证方法和工具。  本文从下面两个方面开展了工作:  首先我们通过提取两种最常见编译器优化措施:重排序和指令合并的本质特性,对现有的Java内存模型进行修订,提出了一种新颖的吸收语义模型。我们的定义结合了公理语义和操作语义的优点。其不仅能够支持马里兰大学提供的20个标准测试样例1所展示的全部编译优化,而且能够确保Java内存模型的安全性。据我们所知,在目前所有的替代模型中,只有我们的模型满足Java内存模型的全部要求,并且对现有模型的修改最少。  由于Java内存模型的特殊性,单纯的动态验证方法无法正确验证Java内存模型。我们以动态验证为基础,结合静态分析实现了Java内存模型动态验证工具JMODV2.0。该工具通过wala静态分析工具获取Java多线程程序的控制流图和数据流图。同时,使用JVMTI获取程序对共享变量的读写执行序列。该工具通过确认多线程程序在Java虚拟机的执行结果是否符合Java内存模型的要求,以此验证Java虚拟机的实现是否满足Java内存模型。我们使用JMODV2.0对马里兰大学提供的20个标准测试样例进行了检测,实验结果证明了我们工具的有效性。除了我们的工具之外,目前还未发现其它能正确验证Java内存模型的动态验证工具。
其他文献
蓬勃发展的Internet给人们带来丰富信息资源的同时也带来了新的问题。由于Web页面的无结构性、Web链接的自由无序和Web规模的急剧膨胀以及Web内容的海量性、多样性与动态性,人
北京大学研发的基于模式的软件过程构造工具集能够利用可复用的过程模式高效的定制适应特定项目需求的过程模型,此模型采用BPEL语言描述,可以在流程引擎的驱动下执行,为软件过程
随着信息技术日益广泛而深入地应用,现在的信息工程越来越庞大复杂,也越来越难以控制,在信息工程建设过程中,合同报表巨多,数据量庞大,并且数据间存在着密切的联系,为了实现监理的“
问答社区已成为一个受大众欢迎的网聚众人智慧的网络交流方式,现有的网络问答社区有百度知道、Yahoo! Answer、爱问知识人、搜搜问答等等。问答社区已经成为现代网络生活中不
缺陷报告是最重要的软件制品之一,它们记录着各个缺陷的详细信息,在软件的开发和维护过程中发挥着极其重要的作用。目前,软件开源社区基本都拥有自己的缺陷报告平台,用来提出、讨
物联网是世界信息产业发展的第三次浪潮,是各国政府和联盟组织关注的重点和亟待发展的科技前沿。无线传感器网络是构造物联网的子网络之一,为物联网提供了信息感知和无线通信等
ERP是当前国际上先进的企业管理模式。它可以对企业所拥有的财、物、人、信息、时间和空间等管理因素进行综合平衡和优化,面向全球化市场,协调企业的各个管理部门,围绕市场开展
为了提高互联网的服务质量,需要对一些占据大量带宽和流量的即时通讯应用进行流量识别,以便于网络管理。更为重要的是,即时通讯应用用户众多,信息量大,传播迅速。为了净化互联网环
1997年Phillips在q-整数的基础上引入了Bernstein多项式的一种推广,即q-Bernstein多项式算子。该算子引起了很多人从不同的角度研究。当q取1时,q-Bernstein多项式就是经典的Ber
Docker是容器虚拟化的主流技术和典型代表,它将应用及其依赖和运行环境打包为标准的、自包含的镜像(Docker Image)发布,通过创建容器实例(Docker Container)实现应用的快速交付