|
|
|
|
|
by mcguire
3325 days ago
|
|
"This paper presents a tracing and simulation-based experimental
methodology that executes unaltered Java programs as if they used
explicit memory management. We use this framework to compare
the time-space performance of a range of garbage collectors to ex-
plicit memory management with the Lea memory allocator. Com-
paring runtime, space consumption, and virtual memory footprints
over a range of benchmarks, we show that the runtime performance
of the best-performing garbage collector is competitive with ex-
plicit memory management when given enough memory. In par-
ticular, when garbage collection has five times as much memory
as required, its runtime performance matches or slightly exceeds
that of explicit memory management. However, garbage collec-
tion’s performance degrades substantially when it must use smaller
heaps. With three times as much memory, it runs 17% slower on
average, and with twice as much memory, it runs 70% slower. Gar-
bage collection also is more susceptible to paging when physical
memory is scarce. In such conditions, all of the garbage collectors
we examine here suffer order-of-magnitude performance penalties
relative to explicit memory management." http://people.cs.umass.edu/~emery/pubs/gcvsmalloc.pdf [2005] Consider what happens when you allocate or free memory manually: the manager had to do some amount of work to track the status of the memory. Now consider a 2-space, moving collector. Allocation is a pointer bump and range check. Collection means tracing and copying the live objects. That's it. It's not as simple as it seems. |
|