Merge
This commit is contained in:
commit
6e3a0f41c1
@ -2474,8 +2474,16 @@ size_t G1CollectedHeap::max_capacity() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jlong G1CollectedHeap::millis_since_last_gc() {
|
jlong G1CollectedHeap::millis_since_last_gc() {
|
||||||
// assert(false, "NYI");
|
// See the notes in GenCollectedHeap::millis_since_last_gc()
|
||||||
return 0;
|
// 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() {
|
void G1CollectedHeap::prepare_for_verify() {
|
||||||
|
@ -66,7 +66,8 @@ G1DefaultPolicy::G1DefaultPolicy() :
|
|||||||
_phase_times(new G1GCPhaseTimes(ParallelGCThreads)),
|
_phase_times(new G1GCPhaseTimes(ParallelGCThreads)),
|
||||||
_tenuring_threshold(MaxTenuringThreshold),
|
_tenuring_threshold(MaxTenuringThreshold),
|
||||||
_max_survivor_regions(0),
|
_max_survivor_regions(0),
|
||||||
_survivors_age_table(true) { }
|
_survivors_age_table(true),
|
||||||
|
_collection_pause_end_millis(os::javaTimeNanos() / NANOSECS_PER_MILLISEC) { }
|
||||||
|
|
||||||
G1DefaultPolicy::~G1DefaultPolicy() {
|
G1DefaultPolicy::~G1DefaultPolicy() {
|
||||||
delete _ihop_control;
|
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);
|
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();
|
last_pause_included_initial_mark = collector_state()->during_initial_mark_pause();
|
||||||
if (last_pause_included_initial_mark) {
|
if (last_pause_included_initial_mark) {
|
||||||
record_concurrent_mark_init_end(0.0);
|
record_concurrent_mark_init_end(0.0);
|
||||||
|
@ -64,6 +64,8 @@ class G1DefaultPolicy: public G1Policy {
|
|||||||
|
|
||||||
double _full_collection_start_sec;
|
double _full_collection_start_sec;
|
||||||
|
|
||||||
|
jlong _collection_pause_end_millis;
|
||||||
|
|
||||||
uint _young_list_target_length;
|
uint _young_list_target_length;
|
||||||
uint _young_list_fixed_length;
|
uint _young_list_fixed_length;
|
||||||
|
|
||||||
@ -237,6 +239,8 @@ public:
|
|||||||
|
|
||||||
double reclaimable_bytes_perc(size_t reclaimable_bytes) const;
|
double reclaimable_bytes_perc(size_t reclaimable_bytes) const;
|
||||||
|
|
||||||
|
jlong collection_pause_end_millis() { return _collection_pause_end_millis; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Sets up marking if proper conditions are met.
|
// Sets up marking if proper conditions are met.
|
||||||
void maybe_start_marking();
|
void maybe_start_marking();
|
||||||
|
@ -119,6 +119,8 @@ public:
|
|||||||
virtual void record_full_collection_start() = 0;
|
virtual void record_full_collection_start() = 0;
|
||||||
virtual void record_full_collection_end() = 0;
|
virtual void record_full_collection_end() = 0;
|
||||||
|
|
||||||
|
virtual jlong collection_pause_end_millis() = 0;
|
||||||
|
|
||||||
// Must currently be called while the world is stopped.
|
// Must currently be called while the world is stopped.
|
||||||
virtual void record_concurrent_mark_init_end(double mark_init_elapsed_time_ms) = 0;
|
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() {
|
jlong GenCollectedHeap::millis_since_last_gc() {
|
||||||
// We need a monotonically non-decreasing time in ms but
|
// javaTimeNanos() is guaranteed to be monotonically non-decreasing
|
||||||
// os::javaTimeMillis() does not guarantee monotonicity.
|
// 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;
|
jlong now = os::javaTimeNanos() / NANOSECS_PER_MILLISEC;
|
||||||
GenTimeOfLastGCClosure tolgc_cl(now);
|
GenTimeOfLastGCClosure tolgc_cl(now);
|
||||||
// iterate over generations getting the oldest
|
// iterate over generations getting the oldest
|
||||||
// time that a generation was collected
|
// time that a generation was collected
|
||||||
generation_iterate(&tolgc_cl, false);
|
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();
|
jlong retVal = now - tolgc_cl.time();
|
||||||
if (retVal < 0) {
|
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 0;
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
|
Loading…
Reference in New Issue
Block a user