--- old/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-08-05 14:37:10.903558572 +0200 +++ new/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp 2014-08-05 14:37:10.808555808 +0200 @@ -5470,11 +5470,20 @@ }; void G1CollectedHeap::redirty_logged_cards() { - guarantee(G1DeferredRSUpdate, "Must only be called when using deferred RS updates."); - double redirty_logged_cards_start = os::elapsedTime(); - uint n_workers = (G1CollectedHeap::use_parallel_gc_threads() ? _g1h->workers()->active_workers() : 1); + if (!G1DeferredRSUpdate) { + G1GCPhaseTimes* timer = g1_policy()->phase_times(); + + for (uint i = 0; i < n_workers; i++) { + timer->record_redirty_logged_cards_time_ms(i, 0.0); + timer->record_redirty_logged_cards_processed_cards(i, 0); + } + + timer->record_redirty_logged_cards_time_ms(0.0); + return; + } + double redirty_logged_cards_start = os::elapsedTime(); G1RedirtyLoggedCardsTask redirty_task(&dirty_card_queue_set()); dirty_card_queue_set().reset_for_par_iteration(); @@ -6135,9 +6144,8 @@ // RSets. enqueue_discovered_references(n_workers); - if (G1DeferredRSUpdate) { - redirty_logged_cards(); - } + redirty_logged_cards(); + COMPILER2_PRESENT(DerivedPointerTable::update_pointers()); }