Merge
This commit is contained in:
commit
6e3a0f41c1
@ -2474,8 +2474,16 @@ size_t G1CollectedHeap::max_capacity() const {
|
||||
}
|
||||
|
||||
jlong G1CollectedHeap::millis_since_last_gc() {
|
||||
// assert(false, "NYI");
|
||||
return 0;
|
||||
// See the notes in GenCollectedHeap::millis_since_last_gc()
|
||||
// for more information about the implementation.
|
||||
jlong ret_val = (os::javaTimeNanos() / NANOSECS_PER_MILLISEC) -
|
||||
_g1_policy->collection_pause_end_millis();
|
||||
if (ret_val < 0) {
|
||||
log_warning(gc)("millis_since_last_gc() would return : " JLONG_FORMAT
|
||||
". returning zero instead.", ret_val);
|
||||
return 0;
|
||||
}
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
void G1CollectedHeap::prepare_for_verify() {
|
||||
|
@ -66,7 +66,8 @@ G1DefaultPolicy::G1DefaultPolicy() :
|
||||
_phase_times(new G1GCPhaseTimes(ParallelGCThreads)),
|
||||
_tenuring_threshold(MaxTenuringThreshold),
|
||||
_max_survivor_regions(0),
|
||||
_survivors_age_table(true) { }
|
||||
_survivors_age_table(true),
|
||||
_collection_pause_end_millis(os::javaTimeNanos() / NANOSECS_PER_MILLISEC) { }
|
||||
|
||||
G1DefaultPolicy::~G1DefaultPolicy() {
|
||||
delete _ihop_control;
|
||||
@ -575,6 +576,8 @@ void G1DefaultPolicy::record_collection_pause_end(double pause_time_ms, size_t c
|
||||
|
||||
record_pause(young_gc_pause_kind(), end_time_sec - pause_time_ms / 1000.0, end_time_sec);
|
||||
|
||||
_collection_pause_end_millis = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
|
||||
|
||||
last_pause_included_initial_mark = collector_state()->during_initial_mark_pause();
|
||||
if (last_pause_included_initial_mark) {
|
||||
record_concurrent_mark_init_end(0.0);
|
||||
|
@ -64,6 +64,8 @@ class G1DefaultPolicy: public G1Policy {
|
||||
|
||||
double _full_collection_start_sec;
|
||||
|
||||
jlong _collection_pause_end_millis;
|
||||
|
||||
uint _young_list_target_length;
|
||||
uint _young_list_fixed_length;
|
||||
|
||||
@ -237,6 +239,8 @@ public:
|
||||
|
||||
double reclaimable_bytes_perc(size_t reclaimable_bytes) const;
|
||||
|
||||
jlong collection_pause_end_millis() { return _collection_pause_end_millis; }
|
||||
|
||||
private:
|
||||
// Sets up marking if proper conditions are met.
|
||||
void maybe_start_marking();
|
||||
|
@ -119,6 +119,8 @@ public:
|
||||
virtual void record_full_collection_start() = 0;
|
||||
virtual void record_full_collection_end() = 0;
|
||||
|
||||
virtual jlong collection_pause_end_millis() = 0;
|
||||
|
||||
// Must currently be called while the world is stopped.
|
||||
virtual void record_concurrent_mark_init_end(double mark_init_elapsed_time_ms) = 0;
|
||||
|
||||
|
@ -1256,21 +1256,20 @@ class GenTimeOfLastGCClosure: public GenCollectedHeap::GenClosure {
|
||||
};
|
||||
|
||||
jlong GenCollectedHeap::millis_since_last_gc() {
|
||||
// We need a monotonically non-decreasing time in ms but
|
||||
// os::javaTimeMillis() does not guarantee monotonicity.
|
||||
// javaTimeNanos() is guaranteed to be monotonically non-decreasing
|
||||
// provided the underlying platform provides such a time source
|
||||
// (and it is bug free). So we still have to guard against getting
|
||||
// back a time later than 'now'.
|
||||
jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
|
||||
GenTimeOfLastGCClosure tolgc_cl(now);
|
||||
// iterate over generations getting the oldest
|
||||
// time that a generation was collected
|
||||
generation_iterate(&tolgc_cl, false);
|
||||
|
||||
// javaTimeNanos() is guaranteed to be monotonically non-decreasing
|
||||
// provided the underlying platform provides such a time source
|
||||
// (and it is bug free). So we still have to guard against getting
|
||||
// back a time later than 'now'.
|
||||
jlong retVal = now - tolgc_cl.time();
|
||||
if (retVal < 0) {
|
||||
NOT_PRODUCT(log_warning(gc)("time warp: " JLONG_FORMAT, retVal);)
|
||||
log_warning(gc)("millis_since_last_gc() would return : " JLONG_FORMAT
|
||||
". returning zero instead.", retVal);
|
||||
return 0;
|
||||
}
|
||||
return retVal;
|
||||
|
Loading…
Reference in New Issue
Block a user