● 摘要
Java虚拟机(JVM)通过垃圾回收器对Java堆中所有对象进行自动分配和回收管理,可以有效避免在其他语言,例如C或者C++语言中出现的指针错误和大部分内存泄露问题。然而,在Java程序的运行过程中,许多不再被程序所使用,但是又无法被垃圾回收器回收的内存堆对象仍然会导致Java程序产生不同于传统意义上的内存泄露。这些可以从根集到达然而又不会再被使用的对象被称为“冷对象”,而在Java程序的执行过程中,监测并找到这些冷对象是解决Java内存泄露的首要工作。论文首先简单介绍了当前国内外Java程序内存泄露问题的研究现状,以及针对内存泄漏而对冷对象进行监控的解决方法。在此基础上,论文介绍了一种冷对象监控系统的实现原理并验证其可行性,之后着重介绍了本文独创的增量式扫描Java内存堆对象机制,以及用于动态记录程序中对象分配地址的JIT编译器生成代码栈回卷方法的设计与实现。其中,增量式扫描机制利用对象在垃圾回收过程中存在的不同状态,动态的扫描内存堆对象,增量记录其状态变化,最终可以获得远超过对内存堆进行全面扫描的运行效率。论文还介绍了如何利用Java虚拟机中JIT编译器的工作原理,在虚拟机运行时采用栈回卷的方式记录所有对象在Java程序中的分配地址。论文同时介绍了如何基于增量式扫描机制实现对Java对象生命周期的计算和冷对象的判断。最后,通过选取的Java基准测试程序集SpecJVM98和SpecJBB2000,验证了冷对象监控系统各方面的性能,讨论了与此前实现的系统比较获得性能提升的主要原因,分析了对象生命周期的规律以及探测Java程序中的冷对象。
相关内容
相关标签