Stefano Mazzocchi wrote:
have we considered using

 http://goog-perftools.sourceforge.net/

This could possibly be useful for the VM's internal memory allocation, but I doubt if there would be a noticeable win.


If I look at

 http://wiki.wikked.net/wiki/Squid_memory_fragmentation_problem

it shows you some serious potential for improvement in memory management
(but I don't know enough about our GC to know how useful that is)

Thoughts?


In a garbage collected system the issues are very different. I haven't studied xiaofeng's code, but in a standard implementation of a generational GC with a mark-compact nursery:

- allocation is done with a bump-pointer. The actual allocation can be done in something like 7 instructions (although I'm not sure whether in DRLVM the fetch of the pointer from the TLS can be optimized away yet). Appel's paper is the standard reference for this.

- Each thread grabs a chunk of memory and allocates from it without synchronization, then uses a lock to synchronize access to the global pool when it needs another chunk. The synchronization cost of allocation is virtually negligible given an appropriate chunk size.

- The various malloc implementations are free-list allocators. They need to maintain lists of free and allocated memory. They need to worry about merging adjacent free blocks, finding a best-fit block in a list of variable size free blocks, fragmentation and all that. In a copying GC, we don't have that problem because we can move objects around.

The main ways to get performance out of a garbage collected memory subsystem are:
- co-locating objects that exhibit temporal locality
- Engineering the mechanisms with minimal overhead (eg the helper inlining work now being done) - Choosing algorithms that minimise copying overhead. Pre-tenuring objects we know will be long-lived. Generational collection.

In short, there has been work on improving performance of both garbage collected and explicit memory management work, which overlap in the design of free-list allocators (used by mark-sweep and reference counted collectors), but beyond that the two are very different worlds.

cheers

--
Robin Garner
Dept. of Computer Science
Australian National University
http://cs.anu.edu.au/people/Robin.Garner/

Reply via email to