--- a/hotspot/src/share/vm/gc/g1/g1Analytics.cpp Thu Aug 25 21:18:44 2016 +0000
+++ b/hotspot/src/share/vm/gc/g1/g1Analytics.cpp Thu Aug 25 22:36:30 2016 +0000
@@ -316,14 +316,10 @@
return get_new_size_prediction(_pending_cards_seq);
}
-double G1Analytics::oldest_known_gc_end_time_sec() const {
+double G1Analytics::last_known_gc_end_time_sec() const {
return _recent_prev_end_times_for_all_gcs_sec->oldest();
}
-double G1Analytics::last_known_gc_end_time_sec() const {
- return _recent_prev_end_times_for_all_gcs_sec->last();
-}
-
void G1Analytics::update_recent_gc_times(double end_time_sec,
double pause_time_ms) {
_recent_gc_times_ms->add(pause_time_ms);
--- a/hotspot/src/share/vm/gc/g1/g1Analytics.hpp Thu Aug 25 21:18:44 2016 +0000
+++ b/hotspot/src/share/vm/gc/g1/g1Analytics.hpp Thu Aug 25 22:36:30 2016 +0000
@@ -155,7 +155,6 @@
void update_recent_gc_times(double end_time_sec, double elapsed_ms);
void compute_pause_time_ratio(double interval_ms, double pause_time_ms);
- double oldest_known_gc_end_time_sec() const;
double last_known_gc_end_time_sec() const;
};
--- a/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Thu Aug 25 21:18:44 2016 +0000
+++ b/hotspot/src/share/vm/gc/g1/g1CollectedHeap.cpp Thu Aug 25 22:36:30 2016 +0000
@@ -28,7 +28,6 @@
#include "classfile/symbolTable.hpp"
#include "code/codeCache.hpp"
#include "code/icBuffer.hpp"
-#include "gc/g1/g1Analytics.hpp"
#include "gc/g1/bufferingOopClosure.hpp"
#include "gc/g1/concurrentG1Refine.hpp"
#include "gc/g1/concurrentG1RefineThread.hpp"
@@ -2474,19 +2473,8 @@
}
jlong G1CollectedHeap::millis_since_last_gc() {
- jlong now = os::elapsed_counter() / NANOSECS_PER_MILLISEC;
- const G1Analytics* analytics = _g1_policy->analytics();
- double last = analytics->last_known_gc_end_time_sec();
- jlong ret_val = now - (last * 1000);
- if (ret_val < 0) {
- // See the notes in GenCollectedHeap::millis_since_last_gc()
- // for more information about the implementation.
- log_warning(gc)("Detected clock going backwards. "
- "Milliseconds since last GC would be " JLONG_FORMAT
- ". returning zero instead.", ret_val);
- return 0;
- }
- return ret_val;
+ // assert(false, "NYI");
+ return 0;
}
void G1CollectedHeap::prepare_for_verify() {
--- a/hotspot/src/share/vm/gc/g1/g1DefaultPolicy.cpp Thu Aug 25 21:18:44 2016 +0000
+++ b/hotspot/src/share/vm/gc/g1/g1DefaultPolicy.cpp Thu Aug 25 22:36:30 2016 +0000
@@ -604,7 +604,7 @@
_analytics->report_alloc_rate_ms(alloc_rate_ms);
double interval_ms =
- (end_time_sec - _analytics->oldest_known_gc_end_time_sec()) * 1000.0;
+ (end_time_sec - _analytics->last_known_gc_end_time_sec()) * 1000.0;
_analytics->update_recent_gc_times(end_time_sec, pause_time_ms);
_analytics->compute_pause_time_ratio(interval_ms, pause_time_ms);
}
--- a/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp Thu Aug 25 21:18:44 2016 +0000
+++ b/hotspot/src/share/vm/gc/shared/genCollectedHeap.cpp Thu Aug 25 22:36:30 2016 +0000
@@ -1256,21 +1256,21 @@
};
jlong GenCollectedHeap::millis_since_last_gc() {
- // 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'.
+ // We need a monotonically non-decreasing time in ms but
+ // os::javaTimeMillis() does not guarantee monotonicity.
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) {
- log_warning(gc)("Detected clock going backwards. "
- "Milliseconds since last GC would be " JLONG_FORMAT
- ". returning zero instead.", retVal);
+ NOT_PRODUCT(log_warning(gc)("time warp: " JLONG_FORMAT, retVal);)
return 0;
}
return retVal;