Dai et al. / J Zhejiang Univ-Sci C (Comput & Electron) 1 Journal of Zhejiang University-SCIENCE C (Computers & Electronics) ISSN 1869-1951 (Print); ISSN 1869-196X (Online) www.zju.edu.cn/jzus; www.springerlink.com E-mail:
[email protected] Automatic Recovery from Resource Exhaustion Exceptions by Collecting Leaked Resources∗ Zi-ying DAIy1, Xiao-guang MAOyz1,2, Li-qian CHEN1, Yan LEI1,3 1College of Computer, National University of Defense Technology, Changsha 410073, China 2Laboratory of Science and Technology on Integrated Logistics Support, National University of Defense Technology, Changsha 410073, China 3Department of Computer Science, University of California, Davis, USA yE-mail:
[email protected];
[email protected] Received Nov. X, 2013; Revision accepted XX, 2013; Crosschecked XX, 2013 Abstract: Despite the availability of garbage collectors, programmers must manually manage non-memory finite system resources such as file descriptors. Resource leaks can gradually consume all available resources and cause programs to raise resource exhaustion exceptions. However, programmers commonly provide no effective recovery for resource exhaustion exceptions, which often can cause programs to halt without completing their tasks. In this paper, we propose to automatically recover programs from resource exhaustion exceptions caused by resource leaks. We transform programs so that they can catch resource exhaustion exceptions, collect leaked resources, and then retry failed code. A resource collector is designed to identify leaked resources and safely release them. We implement our approach for Java programs. Experimental results show that our approach can successfully handle resource exhaustion exceptions caused by reported resource leaks and allow programs to continue to complete their tasks with an average execution time increase of 2.52% and negligible byte-code size increases.