On 27/09/2010 02:58, Vasily Chekalkin wrote:
Hello.
On Mon, Sep 27, 2010 at 4:04 AM, Nick Wellnhofer<[email protected]> wrote:
It also turned out that the double linked lists in the new GC code are quite
a hit on performance and memory consumption. I replaced them with a simple
array as GC mark stack but afaics the double linked lists will also be used
for Generational GC. So maybe this approach doesn't work out.
Yes, main purpose of using lists was to simplify GenGC implementation.
If we want to use your approach we have implement compacting to avoid
sweeping all memory after marking young generations.
Can't we use an array that holds all the PMC pointers of the young
generation?
The dynamic threshold is a space-time tradeoff. Generally, lower values
cause more GC runs, more execution time and less memory consumption. But on
memory limited machines, a lower threshold can also improve general
perfomance if it avoids swapping.
I think dynamic threshold should be similar to JVM's schema: maximize
throughput with minimizing pause time.
http://www.oracle.com/technetwork/java/ergo5-140223.html
Minimizing pause time is difficult, of course. Something like the
"throughput goal" should be easy to implement though. But given how slow
our GC still is, it will cause a lot of memory usage if you want to
restrict the time spent in GC to low values.
I think a memory based threshold is a good default that should just work
out of the box with any kind of workload.
Nick
_______________________________________________
http://lists.parrot.org/mailman/listinfo/parrot-dev