# HG changeset patch # User tschatzl # Date 1441203418 -7200 # Node ID 943f3651573481221d7945b65bd54639d2556f0a # Parent 116afd2a8cbde1cdacc856772b330bd9a9b13679# Parent 7eec02b95f9e2ce64aaad099374f4eab5c393a79 Merge diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/gc/g1/g1CollectorPolicy.cpp --- a/src/share/vm/gc/g1/g1CollectorPolicy.cpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/gc/g1/g1CollectorPolicy.cpp Wed Sep 02 16:16:58 2015 +0200 @@ -181,15 +181,6 @@ G1ErgoVerbose::set_enabled(false); } - // Verify PLAB sizes - const size_t region_size = HeapRegion::GrainWords; - if (YoungPLABSize > region_size || OldPLABSize > region_size) { - char buffer[128]; - jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most " SIZE_FORMAT, - OldPLABSize > region_size ? "Old" : "Young", region_size); - vm_exit_during_initialization(buffer); - } - _recent_prev_end_times_for_all_gcs_sec->add(os::elapsedTime()); _prev_collection_pause_end_ms = os::elapsedTime() * 1000.0; diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/gc/g1/g1ParScanThreadState.cpp --- a/src/share/vm/gc/g1/g1ParScanThreadState.cpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/gc/g1/g1ParScanThreadState.cpp Wed Sep 02 16:16:58 2015 +0200 @@ -186,6 +186,21 @@ return dest(state); } +void G1ParScanThreadState::report_promotion_event(InCSetState const dest_state, + oop const old, size_t word_sz, uint age, + HeapWord * const obj_ptr, + const AllocationContext_t context) const { + G1PLAB* alloc_buf = _plab_allocator->alloc_buffer(dest_state, context); + if (alloc_buf->contains(obj_ptr)) { + _g1h->_gc_tracer_stw->report_promotion_in_new_plab_event(old->klass(), word_sz, age, + dest_state.value() == InCSetState::Old, + alloc_buf->word_sz()); + } else { + _g1h->_gc_tracer_stw->report_promotion_outside_plab_event(old->klass(), word_sz, age, + dest_state.value() == InCSetState::Old); + } +} + oop G1ParScanThreadState::copy_to_survivor_space(InCSetState const state, oop const old, markOop const old_mark) { @@ -219,6 +234,10 @@ return handle_evacuation_failure_par(old, old_mark); } } + if (_g1h->_gc_tracer_stw->should_report_promotion_events()) { + // The events are checked individually as part of the actual commit + report_promotion_event(dest_state, old, word_sz, age, obj_ptr, context); + } } assert(obj_ptr != NULL, "when we get here, allocation should have succeeded"); diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/gc/g1/g1ParScanThreadState.hpp --- a/src/share/vm/gc/g1/g1ParScanThreadState.hpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/gc/g1/g1ParScanThreadState.hpp Wed Sep 02 16:16:58 2015 +0200 @@ -173,6 +173,10 @@ bool previous_plab_refill_failed); inline InCSetState next_state(InCSetState const state, markOop const m, uint& age); + + void report_promotion_event(InCSetState const dest_state, + oop const old, size_t word_sz, uint age, + HeapWord * const obj_ptr, const AllocationContext_t context) const; public: oop copy_to_survivor_space(InCSetState const state, oop const obj, markOop const old_mark); diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/gc/shared/gcTrace.cpp --- a/src/share/vm/gc/shared/gcTrace.cpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/gc/shared/gcTrace.cpp Wed Sep 02 16:16:58 2015 +0200 @@ -175,6 +175,11 @@ _tenuring_threshold = tenuring_threshold; } +bool YoungGCTracer::should_report_promotion_events() const { + return should_report_promotion_in_new_plab_event() || + should_report_promotion_outside_plab_event(); +} + bool YoungGCTracer::should_report_promotion_in_new_plab_event() const { return should_send_promotion_in_new_plab_event(); } diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/gc/shared/gcTrace.hpp --- a/src/share/vm/gc/shared/gcTrace.hpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/gc/shared/gcTrace.hpp Wed Sep 02 16:16:58 2015 +0200 @@ -172,6 +172,7 @@ * * plab_size is the size of the newly allocated PLAB in bytes. */ + bool should_report_promotion_events() const; bool should_report_promotion_in_new_plab_event() const; bool should_report_promotion_outside_plab_event() const; void report_promotion_in_new_plab_event(Klass* klass, size_t obj_size, diff -r 116afd2a8cbd -r 943f36515734 src/share/vm/runtime/commandLineFlagConstraintsGC.cpp --- a/src/share/vm/runtime/commandLineFlagConstraintsGC.cpp Wed Sep 02 11:56:10 2015 +0200 +++ b/src/share/vm/runtime/commandLineFlagConstraintsGC.cpp Wed Sep 02 16:16:58 2015 +0200 @@ -121,7 +121,7 @@ CommandLineError::print(verbose, "%s (" SIZE_FORMAT ") must be " "less than or equal to ergonomic PLAB maximum size (" SIZE_FORMAT ")\n", - name, value, PLAB::min_size()); + name, value, PLAB::max_size()); return Flag::VIOLATES_CONSTRAINT; } #endif // INCLUDE_ALL_GCS