Results 1 - 10
of
10
Type-Preserving Garbage Collectors
, 2001
"... By combining existing type systems with standard typebased compilation techniques, we describe how to write strongly typed programs that include a function that acts as a tracing garbage collector for the program. Since the garbage collector is an explicit function, we do not need to provide a trust ..."
Abstract
-
Cited by 46 (4 self)
- Add to MetaCart
By combining existing type systems with standard typebased compilation techniques, we describe how to write strongly typed programs that include a function that acts as a tracing garbage collector for the program. Since the garbage collector is an explicit function, we do not need to provide a trusted garbage collector as a runtime service to manage memory. Since our language is strongly typed, the standard type soundness guarantee "Well typed programs do not go wrong" is extended to include the collector. Our type safety guarantee is non-trivial since not only does it guarantee the type safety of the garbage collector, but it guarantees that the collector preservers the type safety of the program being garbage collected. We describe the technique in detail and report performance measurements for a few microbenchmarks as well as sketch the proofs of type soundness for our system. 1 Introduction We outline an approach, based on ideas from existing type systems, to build a type-preser...
Local Reasoning, Separation and Aliasing
"... Structures built by pointer aliasing, such as DAGs and graphs, are notoriously tricky to deal with. The mechanisms of separation logic can deal with these structures, but so far this has been done by the maintenance of a global invariant. Specifications and proofs which use local reasoning, and whic ..."
Abstract
-
Cited by 20 (1 self)
- Add to MetaCart
Structures built by pointer aliasing, such as DAGs and graphs, are notoriously tricky to deal with. The mechanisms of separation logic can deal with these structures, but so far this has been done by the maintenance of a global invariant. Specifications and proofs which use local reasoning, and which may point the way to a structured programming for pointers, are discussed. An idiom for inclusion sharing, where one structure is included in another, is presented. A notion of `partial graphs' -- graphs with dangling pointers -- is used to facilitate proof.
Reducing Sweep Time for a Nearly Empty Heap
"... Mark and sweep garbage collectors are known for using time proportional to the heap size when sweeping memory, since all objects in the heap, regardless of whether they are live or not, must be visited in order to reclaim the memory occupied by dead objects. This paper introduces a sweeping method w ..."
Abstract
-
Cited by 13 (3 self)
- Add to MetaCart
Mark and sweep garbage collectors are known for using time proportional to the heap size when sweeping memory, since all objects in the heap, regardless of whether they are live or not, must be visited in order to reclaim the memory occupied by dead objects. This paper introduces a sweeping method which traverses only the live objects, so that sweeping can be done in time dependent only on the number of live objects in the heap. This allows each collection to use time independent of the size of the heap, which can result in a large reduction of overall garbage collection time in empty heaps. Unfortunately, the algorithm used may slow down overall garbage collection if the heap is not so empty. So a way to select the sweeping algorithm depending on the heap occupancy is introduced, which can avoid any significant slowdown.
Automated Verification of the Deutsch-Schorr-Waite Tree-Traversal Algorithm
- PROC. OF SAS-06 SAGIV, M.; REPS, T.; AND
, 2006
"... This paper reports on the automated verification of the total correctness (partial correctness and termination) of the Deutsch-Schorr-Waite (DSW) algorithm. DSW is an algorithm for traversing a binary tree without the use of a stack by means of destructive pointer manipulation. Prior approaches ..."
Abstract
-
Cited by 6 (1 self)
- Add to MetaCart
This paper reports on the automated verification of the total correctness (partial correctness and termination) of the Deutsch-Schorr-Waite (DSW) algorithm. DSW is an algorithm for traversing a binary tree without the use of a stack by means of destructive pointer manipulation. Prior approaches to the verification of the algorithm involved applications of theorem provers or handwritten proofs. TVLA's abstract-interpretation approach made possible the automatic symbolic exploration of all memory configurations that can arise. With the introduction of a few simple core and instrumentation relations, TVLA was able to establish the partial correctness and termination of DSW.
A Bounded-Space Tree Traversal Algorithm
, 1993
"... An algorithm for traversing binary trees in linear time using constant extra space is presented. The algorithm offers advantages to both Robson traversal and Lindstrom scanning. Under certain conditions, the algorithm can be applied to the marking of cyclic list structures. The algorithm can be gene ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
An algorithm for traversing binary trees in linear time using constant extra space is presented. The algorithm offers advantages to both Robson traversal and Lindstrom scanning. Under certain conditions, the algorithm can be applied to the marking of cyclic list structures. The algorithm can be generalized to handle N-trees and N-lists. Keywords Data structures Introduction Algorithms to traverse trees are in the tool chest of every good programmer. Tree traversals are used in many diverse applications, from searching to artificial intelligence. It is therefore important to be able to traverse trees in a time- and space-efficient manner. We present an algorithm which is efficient in both these considerations. The algorithm visits all nodes of an n- node tree in O#(n) time using O#(1) extra storage. We assume that the tree is represented as a collection of nodes, each of which contains some fixed number of pointers to their children, with no spare bits. Additionally, under certain co...
Modelling Garbage Collection Algorithms
- In Proceedings of International Computing Symposium
, 1995
"... We show how abstract requirements of garbage collection can be captured using temporal logic. The temporal logic specification can then be used as a basis for process algebra specifications which can involve varying amounts of parallelism. We present two simple CCS specifications as an example, foll ..."
Abstract
-
Cited by 2 (0 self)
- Add to MetaCart
We show how abstract requirements of garbage collection can be captured using temporal logic. The temporal logic specification can then be used as a basis for process algebra specifications which can involve varying amounts of parallelism. We present two simple CCS specifications as an example, followed by a more complex specification of the cyclic reference counting algorithm. The verification of such algorithms is then briefly discussed. Keywords: Concurrency, garbage collection, temporal logic, CCS. 1 Introduction The memorymanagement of simple static programming languages, such as Fortran, can be handled entirely by the compiler. The location of all variables can be fully determined at compile-time and no run-time support for memory management is necessary. However, such languages impose considerable restrictions on programming style, for example, recursive procedure calls are disallowed. High-level languages that allow recursion, on the other hand, demand some run-time support. T...
Memory Management in the LaTTe Java Virtual Machine
"... Java is a modern object-oriented programming language which assumes the use of garbage collection to automatically deallocate objects that can no longer be used. Also, typical Java applications allocate objects at a rather high rate. Thus the performance of the memory management system is an imp ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
Java is a modern object-oriented programming language which assumes the use of garbage collection to automatically deallocate objects that can no longer be used. Also, typical Java applications allocate objects at a rather high rate. Thus the performance of the memory management system is an important factor which determines the performance of an entire Java virtual machine.
Bounded Frame, Cycle and Large Object Handling in Generational Older-First Garbage Collection
, 2007
"... Over the years, research has been done on several techniques related to garbage collection. Many key insights for copying-based generational garbage collection tech-niques have been revealed. Yet, there is still room for improvement. In this thesis, we introduce various new techniques and algorithms ..."
Abstract
- Add to MetaCart
Over the years, research has been done on several techniques related to garbage collection. Many key insights for copying-based generational garbage collection tech-niques have been revealed. Yet, there is still room for improvement. In this thesis, we introduce various new techniques and algorithms to improve garbage collection. In particular, we introduce the bounded frame marking technique for tracking pointers. This technique allows for efficient computation of the root set. It reuses concepts from two existing techniques, card marking and remembered sets, and uses a bidirectional object layout to improve them by regulating space overhead and reducing the pointer scanning workload. We also present an algorithm to recursively mark reachable objects without using a stack (eliminating the usual space overhead). We adapt this algorithm to implement a depth-first copying collector and increase heap locality. We improve the older-first garbage collection algorithm and its generational variant by adding a mark phase that guarantees the collection of all garbage, including cyclic structures spanning many windows. Finally, we introduce a technique to deal with large objects. In order to test our ideas, we have designed and implemented a portable and extensible garbage collection framework within the SableVM open source Java virtual machine. In it, we have implemented semi-space, older-first, and generational copying garbage collection algorithms. Our experiments show that the bounded frame technique yields competitive performances on many benchmarks. They also show that, for most benchmarks, our depth-first traversal algorithm improves locality and thus increases performance. Our overall performance measurements show that, using our techniques, a garbage collector can deliver competitive performance and surpass existing collectors on various benchmarks.

