论文部分内容阅读
随着信息技术的进步,Java语言越来越广泛的应用于编程当中,一方面改善了设计质量,提高了编程的效率;另一方面使得软件越来越复杂,发现程序的漏洞特别是并发、多线程程序的漏洞异常的困难。动态监测具有发现漏洞的准确率高,监测具有实时性等优点被广泛的应用和研究。基于JVM执行事件的动态监测能够深入到虚拟机内部,对于监测并发程序的运行时信息相当有效,是一个值得研究的课题。JVM是Java程序的执行环境,深入到JVM当中就可以获取很多运行时的信息,包括方法区、堆、java栈等方面的信息。基于JVM执行事件的动态监测系统实现了JVM的数据结构,修改JVM的执行引擎,在执行的过程之中引入许多执行事件,如字节码执行、线程调度事件等等。监测程序通过订阅这些事件就可以分析程序的运行状态,发现程序运行之中的漏洞。并行程序的错误产生与线程之间的字节码交互指令序列密切相关,为了提高检测错误的准确率,系统采用了模型检测的技术,实现了线程调度的功能,能够遍历所有的程序状态空间。系统能够检测死锁、数据竞争的错误,能够监测方法执行序列、调用频度的系统信息,可以分析类中方法、基本块、分支块的覆盖率信息。系统采用了模块化的设计,主要分为四个模块:虚拟机模块,监测模块,通信模块,界面显示模块。实验表明,在中小规模的程序动态监测上,系统发现错误的准确率很高,监测的结果也很精确。