The IQ application will be briefly unavailable on Sunday, March 31st, starting at 10:00am ET. Access will be restored as quickly as possible.
Browse Prior Art Database

Method, Apparatus and Program Product for Detecting, Identifying and Explaining Unnecessary Resource Usage

IP.com Disclosure Number: IPCOM000029563D
Original Publication Date: 2004-Jul-07
Included in the Prior Art Database: 2004-Jul-07
Document File: 2 page(s) / 50K

Publishing Venue



We present a technique for isolating the program components and objects responsible for memory growth in a long-running process in a garbage collected environment. The technique is based on careful gathering of usage information at runtime along with thresholding to eliminate the need to attach a debugger.

This text was extracted from a PDF file.
This is the abbreviated version, containing approximately 52% of the total text.

Page 1 of 2

Method, Apparatus and Program Product for Detecting, Identifying and Explaining Unnecessary Resource Usage

Memory leak detection and identification in long-running (eg server) processes is a long-standing problem. In non-garbage-collected environments, such detection and identification occurs almost exclusively offline, under the control of a programmer armed with a debugger. An alternative approach, instrumenting a program suspected of containing one or more memory leaks to gather key information, is sometimes used in specialized (memory-specific) debugging tools, both with and without compiler assistance. The sheer volume of data involved in a production system presents formidable obstacles to detecting and remediating unnecessary memory use, both because the debug/recreation cycle is long and insufficient information is often collected.

Memory management systems based exclusively on garbage collection divide an object's lifecycle into the period in which an object is born, the period in which an object is reachable from a collection of roots, and the period in which an object is no longer reachable from that collection of roots. This division is based on a weak approximation to the notion of "live." An object is live when the object will be used again in the future of the computation. An object that is reachable from the collection of roots may be live, and an object that is not reachable from that collection is certainly not live , but in between are the objects that remain reachable but will not be used again. These objects contribute to the memory footprint of the program, but may not contribute to the values computed by the program. Objects that in fact do not contribute to the valued computed by the program are considered "unnecessarily retained." Such objects can only be correctly identified by examining the retained objects after the computation completes; any on-line detection mechanism that operates while the computation is still active is necessarily an approximation and is subject to false positives. It is therefore necessary to have a mechanism that balances the adverse effects of the false positives against the positive effects of the true positive...