--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-10-06 14:22:04.013729127 +0200 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-10-06 14:22:03.942727086 +0200 @@ -390,6 +390,8 @@ } void G1RegionMappingChangedListener::on_commit(uint start_idx, size_t num_regions, bool zero_filled) { + // The from card cache is not the memory that is actually committed. So we cannot + // take advantage of the zero_filled parameter. reset_from_card_cache(start_idx, num_regions); } --- old/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 2014-10-06 14:22:04.297737292 +0200 +++ new/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 2014-10-06 14:22:04.233735452 +0200 @@ -126,6 +126,7 @@ #endif void G1SATBCardTableLoggingModRefBSChangedListener::on_commit(uint start_idx, size_t num_regions, bool zero_filled) { + // Default value for a clean card on the card table is -1. So we cannot take advantage of the zero_filled parameter. MemRegion mr(G1CollectedHeap::heap()->bottom_addr_for_region(start_idx), num_regions * HeapRegion::GrainWords); _card_table->clear(mr); }