Java程序运行时保护与监控技术研究

来源 :南京大学 | 被引量 : 0次 | 上传用户:juejue_wang11
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着软件系统的日益复杂,代码量越来越大。目前,Java多线程的同步保护需要程序员手动完成,这样不仅加重了程序员的负担,而且难以实现读写互斥。此外,对方法调用顺序的运行时刻验证与监控也需要特殊的工具才能完成。对于程序进行并发控制和运行时跟踪/监控的需求日益迫切。目前有很多工具可以对程序进行动态验证,针对某些性质实现了运行时跟踪与监控。但是,大多数工具的使用方法比较复杂,且没有提供多线程并发程序的保护支持。   为此,我们参考目前流行的一些技术与框架采用的方法,采用AOP的思想,并结合现有的程序分析技术,提出利用Java的annotation和反射机制来实现运行时刻监控和保护。这个方法具有简单易学的优点。基本思想如下:   1.程序员以Java的annotation的方式声明设计意图,并在类的设计阶段将此设计意图加入到类的定义中;除此之外,程序员还需要提供一个工厂方法,类的使用者通过此工厂方法创建的对象将会受到运行时的监控;   2.类的使用者在使用类时,应该通过程序员提供的工厂方法来创建对象实例。通过Java的反射机制可以获取annotation表示的设计意图,因此对象实例在运行时便可以受到跟踪与监控,从而使程序可以对各种操作行为进行保护及限制,以此来实现程序员的设计意图。   我们根据上述思想解决了多线程程序的并发保护和对象调用顺序的运行时刻监控问题。   在多线程并发保护问题时,程序员用@write和@read来分别修饰类中的写方法(会改变对象的状态)和读方法(不会改变对象的状态)。用户在被监控的对象上调用方法时,监控模块通过反射机制获取到这些annotation,然后根据是读方法还是写方法采取不同的保护行为。这个方法不仅可以帮助程序员自动实现多线程的读写互斥,还可以限制同时调用读方法的线程数量。   对于方法调用顺序的监控,我们的解决方法如下:程序员用annotation的方式,以正则表达式的形式修饰类的定义,以此来规定该类的方法被调用的约束。在监控某个对象时,我们通过反射机制获取到相应的annotation,并根据该正则表达式自动构造一个DFA,通过模拟DFA的状态转换来判断用户的调用行为是否合法,以此来实现对用户的调用行为的运行时刻监控。
其他文献
在视频监控系统中,相对于内容较为固定的背景,人们更多关注运动前景。在夜晚等场景下,由于环境光亮度较低,摄像头会自动提升感光系数,另外前景距离摄像头较远,摄像头获取的人
无线网络应用广泛,已经引起相关研究人员的高度注意。在应用无线网络的实践中,为了提升网络性能,自然而然涌现出大量的优化问题。和其他领域的情形类似,无线网络中的优化问题也常
大数据环境下产生的数据大多是海量的,而并非所有这些数据都属于正常数据,其中可能包含大量噪声或者离群点数据。这些离群点数据通常具有异乎寻常的重要性,可以通过数据挖掘中的
随着计算机和机器人学的发展,现代机器人已经不仅仅在工业制造方面,而且期待能在农业、林业、军事、医疗、文娱、家用、科学研究等许多方面得到广泛的应用。然而对于家庭服务
随着语义web技术的不断进步,人们开始更多的关注其在web服务方面的应用。人们期望能系统而准确的对服务应用领域的概念进行抽象和定义,从而把语义web的优势与web服务的优势相融
Web服务经常需要被组装成一个复合Web服务,以完成单个服务不能完成的任务。复合Web服务必须确保按照正确的方式调用组件服务完成既定目标。这就需要多种控制结构,包括顺序、条
形式化方法经过几十年的研究发展,为并发系统的建模与验证做出了巨大的贡献。事件结构是一种主流高效的形式化方法,由基于抽象动作的事件以及事件之间的因果、矛盾、并发三种逻
智能Agent技术的诞生和发展是分布式人工智能技术和网络技术发展的必然结果。基于网络的分布式人工智能是在传统人工智能的基础上发展起来的,本质是采用人工智能等技术,研究一
开放环境下,越来越多的分布式系统被应用于各个领域,如资源共享,电子商务等。这些应用系统与传统的集中式系统相比,有资源丰富,容错性好,节省服务器维护开销等优点,但同时存在不同于
随着企业信息化进程的加速和经济全球化给企业带来的竞争压力不断加剧,越来越多的企业想要构建自己的数据仓库系统,整合企业大量的、分散的、杂乱无章的数据,期望从中发现对