Results 1 - 10
of
22
Oil and Water? High Performance Garbage Collection in Java with MMTk
- In ICSE 2004, 26th International Conference on Software Engineering
, 2004
"... Increasingly popular languages such as Java and C # require efficient garbage collection. This paper presents the design, implementation, and evaluation of MMTk, a Memory Management Toolkit for and in Java. MMTk is an efficient, composable, extensible, and portable framework for building garbage col ..."
Abstract
-
Cited by 81 (18 self)
- Add to MetaCart
Increasingly popular languages such as Java and C # require efficient garbage collection. This paper presents the design, implementation, and evaluation of MMTk, a Memory Management Toolkit for and in Java. MMTk is an efficient, composable, extensible, and portable framework for building garbage collectors. MMTk uses design patterns and compiler cooperation to combine modularity and efficiency. The resulting system is more robust, easier to maintain, and has fewer defects than monolithic collectors. Experimental comparisons with monolithic Java and C implementations reveal MMTk has significant performance advantages as well. Performance critical system software typically uses monolithic C at the expense of flexibility. Our results refute common wisdom that only this approach attains efficiency, and suggest that performance critical software can embrace modular design and high-level languages. 1
Concurrent Object-Oriented Programming in Act 1
, 1987
"... this paper will try to accomplish several goals (in parallel): We will argue that the actor model is an appropriate way to think about parallel computation. Since many actors may be actively sending or receiving messages at the same time, actors are inherently well suited to modelling parallel syste ..."
Abstract
-
Cited by 42 (1 self)
- Add to MetaCart
this paper will try to accomplish several goals (in parallel): We will argue that the actor model is an appropriate way to think about parallel computation. Since many actors may be actively sending or receiving messages at the same time, actors are inherently well suited to modelling parallel systems. We will present some specific actors which we feel should be included in the programmer's tool kit for writing parallel programs. We will show examples illustrating the use of these primitives. Futures are actors which represent the values computed by parallel processes. They can be created dynamically and disappear when they are no longer needed. Other actors may use the value of a future without concern for the feet that it was computed in parallel. Synchronization is provided by serializers, which protect actors with internal state from timing errors caused by interacting processes. We will show how these primitives have been implemented in Act 1. Act I has been implemented on a serial machine, but it simulates the kind of parallelism that would occur on a real multiprocessor machine. Discussion of the implementation will give a more concrete picture of the mechanisms involved and will also show what would be needed for an implementation on a real network of parallel processors. 12. Traditional techniques for parallelism have been inadequate
Ulterior Reference Counting: Fast Garbage Collection without a Long Wait
- IN OOPSLA 2003 ACM CONFERENCE ON OBJECT-ORIENTED PROGRAMMING, SYSTEMS, LANGUAGES AND APPLICATIONS
, 2003
"... General purpose garbage collectors have yet to combine short pause times with high throughput. For example, generational collectors can achieve high throughput. They have modest average pause times, but occasionally collect the whole heap and consequently incur long pauses. At the other extreme, con ..."
Abstract
-
Cited by 31 (7 self)
- Add to MetaCart
General purpose garbage collectors have yet to combine short pause times with high throughput. For example, generational collectors can achieve high throughput. They have modest average pause times, but occasionally collect the whole heap and consequently incur long pauses. At the other extreme, concurrent collectors, including reference counting, attain short pause times but with significant performance penalties. This paper introduces a new hybrid collector that combines copying generational collection for the young objects and reference counting the old objects to achieve both goals. It restricts copying and reference counting to the object demographics for which they perform well. Key to our algorithm is a generalization of deferred reference counting we call Ulterior Reference Counting. Ulterior reference counting safely ignores mutations to select heap objects. We compare a generational reference counting hybrid with pure reference counting, pure marksweep, and hybrid generational mark-sweep collectors. This new collector combines excellent throughput, matching a high performance generational mark-sweep hybrid, with low maximum pause times.
A Generational On-the-fly Garbage Collector for Java
- IBM Haifa Reesrach Lab. Web access: http://www.cs.technion.ac.il/erez/gen.ps
, 2000
"... An on-the-fly garbage collector does not stop the program threads to perform the collection. Instead, the collector executes in a separate thread (or process) in parallel to the program. On-the-fly collectors are useful for multithreaded applications running on multiprocessor servers, where it is im ..."
Abstract
-
Cited by 8 (1 self)
- Add to MetaCart
An on-the-fly garbage collector does not stop the program threads to perform the collection. Instead, the collector executes in a separate thread (or process) in parallel to the program. On-the-fly collectors are useful for multithreaded applications running on multiprocessor servers, where it is important to fully utilize all processors and provide even response time, especially for systems for which stopping the threads is a costly operation. In this work, we report on the incorporation of generations into an on-the-fly garbage collector. The incorporation is non-trivial since an on-the-y collector avoids explicit synchronization with the program threads. To the best of our knowledge this incorporation has not been tried before. We have implemented the collector for a prototype Java Virtual Machine on AIX, and measured its performance on a 4-way multiprocessor. As for other generational collectors, an on-the-fly generational collector has the potential for reducing the overall running time and working set of an application by concentrating collection efforts on the young objects. However, in contrast to other generational collectors, on-the-fly collectors do not move the objects; thus, there is no segregation between the old and the young objects. Furthermore, on-the-fly collectors do not stop the threads, so there is no extra benefit for the short pauses obtained by generational collection. Nevertheless, comparing our on-the-fly collector with and without generations, it turns out that the generational collector performs better for most applications. The best reduction in overall running time for the benchmarks we measured was 25%. However, there were some benchmarks for which it had no e ect and one for which the overall running time increased by 4%.
Integrating Generations with Advanced Reference Counting Garbage Collectors
- In International Conference on Compiler Construction
, 2003
"... We study an incorporation of generations into a modern reference counting collector. We start with the two on-the-y collectors suggested by Levanoni and Petrank: a reference counting collector and a tracing (mark and sweep) collector. We then propose three designs for combining them so that the ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
We study an incorporation of generations into a modern reference counting collector. We start with the two on-the-y collectors suggested by Levanoni and Petrank: a reference counting collector and a tracing (mark and sweep) collector. We then propose three designs for combining them so that the reference counting collector collects the young generation or the old generation or both. Our designs maintain the good properties of the Levanoni-Petrank collector. In particular, it is adequate for multithreaded environment and a multiprocessor platform, and it has an ecient write barrier with no synchronization operations. To the best of our knowledge, the use of generations with reference counting has not been tried before.
Generating object lifetime traces with Merlin
- ACM TRANSACTIONS ON PROGRAMMING LANGUAGES AND SYSTEMS (TOPLAS
, 2006
"... Programmers are writing a rapidly growing number of programs in object-oriented languages, such as Java and C#, that require garbage collection. Garbage collection traces and simulation speed up research by enabling deeper understandings of object lifetime behavior and quick exploration and design o ..."
Abstract
-
Cited by 6 (2 self)
- Add to MetaCart
Programmers are writing a rapidly growing number of programs in object-oriented languages, such as Java and C#, that require garbage collection. Garbage collection traces and simulation speed up research by enabling deeper understandings of object lifetime behavior and quick exploration and design of new garbage collection algorithms. When generating perfect traces, the brute-force method of computing object lifetimes requires a whole-heap garbage collection at every potential collection point in the program. Because this process is prohibitively expensive, researchers often use granulated traces by collecting only periodically, for example, every 32 KB of allocation. We extend the state of the art for simulating garbage collection algorithms in two ways. First, we develop a systematic methodology for simulation studies of copying garbage collection and present results showing the effects of trace granularity on these simulations. We show that trace granularity often distorts simulated garbage collection results compared with perfect traces. Second, we present and measure the performance of a new algorithm called Merlin for computing object lifetimes.
Profile-based pretenuring
- ACM TRANSACTIONS ON PROGRAMMING LANGUAGES AND SYSTEMS
, 2007
"... Pretenuring can reduce copying costs in garbage collectors by allocating long-lived objects into regions that the garbage collector will rarely, if ever, collect. We extend previous work on pretenuring as follows: (1) We produce pretenuring advice that is neutral with respect to the garbage collecto ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
Pretenuring can reduce copying costs in garbage collectors by allocating long-lived objects into regions that the garbage collector will rarely, if ever, collect. We extend previous work on pretenuring as follows: (1) We produce pretenuring advice that is neutral with respect to the garbage collector algorithm and configuration. We thus can and do combine advice from different applications. We find for our benchmarks that predictions using object lifetimes at each allocation site in Java programs are accurate, which simplifies the pretenuring implementation. (2) We gather and apply advice to both applications and Jikes RVM, a compiler and runtime system for Java written in Java. Our results demonstrate that building combined advice into Jikes RVM from different application executions improves performance, regardless of the application Jikes RVM is compiling and executing. This build-time advice thus gives user applications some benefits of pretenuring, without any application profiling. No previous work uses profile feedback to pretenure in the runtime system. (3) We find that application-only advice also consistently improves performance, but that the combination of build-time and application-specific advice is almost always noticeably better. (4) Our same advice improves the performance of generational, Older First, and Beltway collectors, illustrating that it is collector neutral. (5) We include an immortal allocation space in addition
Implementing Functional Languages with Fast Equality, Sets and Maps: an Exercise in Hash Consing
- Bull S.A. Research Center, rue Jean-Jaur`es, 78340 Les Clayes sous Bois
, 1994
"... We investigate hash consing, a memory allocation strategy for functional languages. Though the idea is not new, its systematic use as a foundation for the run-time system of a language is new. We call this systematic approach maximal sharing. This strategy is shown to be implementable in practice wi ..."
Abstract
-
Cited by 5 (3 self)
- Add to MetaCart
We investigate hash consing, a memory allocation strategy for functional languages. Though the idea is not new, its systematic use as a foundation for the run-time system of a language is new. We call this systematic approach maximal sharing. This strategy is shown to be implementable in practice with small speed and space penalties, while offering great opportunities to save space and execution time in big projects. Besides, it paves the way towards more efficient implementations of very desirable data structures like sets and maps (set-theoretic functions of finite domain) [23], opening the door to a whole slew of set- and map-based functional languages like POPS-Lisp [18] and HimML [20], a variant of Standard ML written by the author. The average-case complexities of operations on sets and maps are investigated, and shown to be quite good indeed. Computation sharing and incremental computation are briefly considered in this framework. Garbage collection techniques are reviewed to d...
Efficient Garbage Collection for Large Object-Oriented Databases
, 1996
"... This thesis presents the design of an efficient garbage collection scheme for large, persistent object-oriented databases in a client-server environment. The scheme uses a partitioned approach. A database is divided into disjoint partitions and each partition is collected independently. The scheme m ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
This thesis presents the design of an efficient garbage collection scheme for large, persistent object-oriented databases in a client-server environment. The scheme uses a partitioned approach. A database is divided into disjoint partitions and each partition is collected independently. The scheme maintains transaction semantics and survives server crashes. It can be run concurrently with client applications. It also compacts objects in the partition being collected. The garbage collector has been...
Combining Card Marking with Remembered Sets: How to Save Scanning Time
, 1998
"... We consider the combination of card marking with remembered sets for generational garbage collection as suggested by Hosking and Hudson [3]. When more than two generations are used, a naive implementation may cause excessive and wasteful scanning of the cards and thus increase the collection time. W ..."
Abstract
-
Cited by 4 (0 self)
- Add to MetaCart
We consider the combination of card marking with remembered sets for generational garbage collection as suggested by Hosking and Hudson [3]. When more than two generations are used, a naive implementation may cause excessive and wasteful scanning of the cards and thus increase the collection time. We offer a simple data structure and a corresponding algorithm to keep track of which cards need be scanned for which generation. We then extend these ideas for the Train Algorithm of [4]. Here, the solution is more involved, and allows tracking of which card should be scanned for which carcollection in the train. Keywords: Garbage collection, Generational garbage collection, The train algorithm. E-mail: azagury@haifa.vnet.ibm.com. y E-mail: kolodner@haifa.vnet.ibm.com. z E-mail: erezp@haifa.vnet.ibm.com. x E-mail: yehudai@haifa.vnet.ibm.com. Postal address (of all authors): Department of System Technology, IBM Haifa Research Lab, MATAM, Haifa 31905, Israel. 1 Introduction Genera...

