ABSTRACT
Previous attempts at garbage collection in uncooperative environments have generally used conservative or mostly-conservative approaches. We describe a technique for doing fully type-accurate garbage collection in an uncooperative environment, using a "shadow stack" to link structs of pointer-containing variables, together with the data or code needed to trace them. We have implemented this in the Mercury compiler, which generates C code, and present preliminary performance data on the overheads of this technique. We also show how this technique can be extended to handle multithreaded applications.
- Joel F. Bartlett. Mostly-Copying garbage collection picks up generations and C++. Technical Note TN--12, Digital, Western Research Laboratory, 1989.Google Scholar
- Hans Boehm. Simple garbage-collector-safety. In Proceedings of the ACM SIGPLAN '96 Conference on Programming Language Design and Implementation, 1996. Google ScholarDigital Library
- Hans Boehm and David Chase. A proposal for garbage-collector-safe C compilation. Journal of C Language Translation, 4:126--141, December 1992.Google Scholar
- Hans Boehm and Mark Weiser. Garbage collection in an uncooperative environment. Software --- Practice and Experience, 18:807--820, 1988. Google ScholarDigital Library
- William D. Clinger. Proper tail recursion and space efficiency. In Proceedings of the ACM SIGPLAN '98 Conference on Programming Language Design and Implementation, pages 174--185, 1998. Google ScholarDigital Library
- Robert Dewar. Mail to the GCC mailing list ([email protected]). URL: http://gcc.gnu.org\zml\zgcc\z2001-07\zmsg01990.html, July 2001.Google Scholar
- Tyson Dowd, Zoltan Somogyi, Fergus Henderson, Thomas Conway, and David Jeffery. Run time type information in Mercury. In Proceedings of the 1999 International Conference on the Principles and Practice of Declarative Programming, pages 224--243, Paris, France, September 1999. Google ScholarDigital Library
- Daniel R. Edelson and Ira Pohl. A copying collector for C++. In USENIX C++ Conference Proceedings, pages 85--102, 1991Google Scholar
- Daniel Ross Edelson. Dynamic storage reclamation in C++. Technical Report UCSC-CRL-90-19, UCSC, June 1990. Google ScholarDigital Library
- David Chase (et al?). GC FAQ (garbage collection frequently asked questions). URL: http://www.iecc.com\zgclist\zGC-faq.html.Google Scholar
- Benjamin Goldberg. Tag-free garbage collection for strongly typed programming languages. In Proceedings of the ACM SIGPLAN '91 Conference on Programming Language Design and Implementation, pages 165--176, Toronto, Ontario, Canada, June 26--28, 1991. Google ScholarDigital Library
- David R. Hanson and Mukund Raghavachari. A machine-independent debugger. In Software --- Practice and Experience, volume 26, pages 1277--1299, November 1996. Google Scholar
- Fergus Henderson and Zoltan Somogyi. Compiling Mercury to high-level C code. In Nigel Horspool, editor, Proceedings of the 2002 International Conference on Compiler Construction, Grenoble, France, April 2002. Springer-Verlag. Google ScholarDigital Library
- Fergus Henderson, Zoltan Somogyi, and Thomas Conway. Compiling logic programs to C using GNU C as a portable assembler. In Proceedings of the ILPS '95 Postconference Workshop on Sequential Implementation Technologies for Logic Programming Languages, Portland, Oregon, December 1995.Google Scholar
- Simon L. Peyton Jones, Cordy Hall, Kevin Hammond, Will Partian, and Phil Wadler. The Glasgow Haskell compiler: a technical overview. In Proceedings of the UK Joint Framework for Information Technology (JFIT) Technical Conference, Keele, 1993.Google Scholar
- Simon Peyton Jones, Norman Ramsey, and Fermin Reig. C--: a portable assembly language that supports garbage collection. In International Conference on Principles and Practice of Declarative Programming, September 1999. Invited paper. Google ScholarDigital Library
- Wolfgang Schreiner. RT++ --- higher order threads for C++, tutorial and reference manual. Technical Report 96-9, RISC-Linz, 1996. URL: http://www.risc.uni-linz.ac.at\zsoftware\zrt++\zindex\_131.html.Google Scholar
- Zoltan Somogyi, Fergus Henderson, and Thomas Conway. The execution algorithm of Mercury, an efficient purely declarative logic programming language. Journal of Logic Programming, 1997.Google Scholar
- David Stoutamire and Matt Kennel. Sather revisited: A high-performance free alternative to C++. Computers in Physics, 9:519--524, Sep/Oct 1995.Google ScholarCross Ref
- David Tarditi, Anurag Acharya, and Peter Lee. No assembly required: Compiling Standard ML to C. Technical Report CMU-CS-90-187, School of Computer Science, Carnegie Mellon University, Pittsburgh, PA 15213, November 1990.Google Scholar
- Paul R. Wilson. Uniprocessor garbage collection techniques. In Yves Bekkers and Jacques Cohen, editors, Proceedings of International Workshop on Memory Management, volume 637 of Lecture Notes in Computer Science, pages 16--18, St Malo, France, September 1992. Springer-Verlag. Google ScholarDigital Library
- G. May Yip. Incremental, generational mostly-copying garbage collection in uncooperative environments. Technical Report 91/8, Digital, Western Research Laboratory, June 1991. Masters Thesis -- MIT, Cambridge, MA, 1991.Google Scholar
Index Terms
- Accurate garbage collection in an uncooperative environment
Recommendations
Accurate garbage collection in an uncooperative environment
MSP 2002 and ISMM 2002Previous attempts at garbage collection in uncooperative environments have generally used conservative or mostly-conservative approaches. We describe a technique for doing fully type-accurate garbage collection in an uncooperative environment, using a "...
Age-based garbage collection
Modern generational garbage collectors look for garbage among the young objects, because they have high mortality; however, these objects include the very youngest objects, which clearly are still live. We introduce new garbage collection algorithms, ...
Age-based garbage collection
OOPSLA '99: Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applicationsModern generational garbage collectors look for garbage among the young objects, because they have high mortality; however, these objects include the very youngest objects, which clearly are still live. We introduce new garbage collection algorithms, ...
Comments