--- old/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp 2014-08-19 10:12:11.816836684 +0200 +++ new/src/share/vm/gc_implementation/g1/g1HotCardCache.cpp 2014-08-19 10:12:11.740839360 +0200 @@ -44,9 +44,7 @@ _hot_cache_idx = 0; // For refining the cards in the hot cache in parallel - uint n_workers = (ParallelGCThreads > 0 ? - _g1h->workers()->total_workers() : 1); - _hot_cache_par_chunk_size = MAX2(1, _hot_cache_size / (int)n_workers); + _hot_cache_par_chunk_size = (ParallelGCThreads > 0 ? ClaimChunkSize : _hot_cache_size); _hot_cache_par_claimed_idx = 0; _card_counts.initialize(); --- old/src/share/vm/gc_implementation/g1/g1HotCardCache.hpp 2014-08-19 10:12:12.248821475 +0200 +++ new/src/share/vm/gc_implementation/g1/g1HotCardCache.hpp 2014-08-19 10:12:12.168824291 +0200 @@ -70,6 +70,9 @@ G1CardCounts _card_counts; + // The number of cached cards a thread claims when flushing the cache + static const int ClaimChunkSize = 32; + bool default_use_cache() const { return (G1ConcRSLogCacheSize > 0); }