Mercurial > hg > openjdk > jdk9 > hotspot
changeset 11765:5acd2b561936
Merge
author | dcubed |
---|---|
date | Tue, 02 Aug 2016 20:55:27 -0700 |
parents | cd85f4152d1c (current diff) 5bbaa999f7cf (diff) |
children | 33e04b94534f |
files | |
diffstat | 6 files changed, 32 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/sparc/vm/register_definitions_sparc.cpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/cpu/sparc/vm/register_definitions_sparc.cpp Tue Aug 02 20:55:27 2016 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,9 @@ // make sure the defines don't screw up the declarations later on in this file #define DONT_USE_REGISTER_DEFINES -#include "precompiled.hpp" +// Note: precompiled headers can not be used in this file because of the above +// definition + #include "asm/assembler.hpp" #include "asm/register.hpp" #include "interp_masm_sparc.hpp"
--- a/src/share/vm/gc/g1/g1Analytics.cpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/share/vm/gc/g1/g1Analytics.cpp Tue Aug 02 20:55:27 2016 -0700 @@ -316,8 +316,12 @@ return get_new_size_prediction(_pending_cards_seq); } +double G1Analytics::oldest_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->oldest(); + return _recent_prev_end_times_for_all_gcs_sec->last(); } void G1Analytics::update_recent_gc_times(double end_time_sec,
--- a/src/share/vm/gc/g1/g1Analytics.hpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/share/vm/gc/g1/g1Analytics.hpp Tue Aug 02 20:55:27 2016 -0700 @@ -155,6 +155,7 @@ 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/src/share/vm/gc/g1/g1CollectedHeap.cpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/share/vm/gc/g1/g1CollectedHeap.cpp Tue Aug 02 20:55:27 2016 -0700 @@ -28,6 +28,7 @@ #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" @@ -2473,8 +2474,19 @@ } jlong G1CollectedHeap::millis_since_last_gc() { - // assert(false, "NYI"); - return 0; + 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; } void G1CollectedHeap::prepare_for_verify() {
--- a/src/share/vm/gc/g1/g1DefaultPolicy.cpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/share/vm/gc/g1/g1DefaultPolicy.cpp Tue Aug 02 20:55:27 2016 -0700 @@ -604,7 +604,7 @@ _analytics->report_alloc_rate_ms(alloc_rate_ms); double interval_ms = - (end_time_sec - _analytics->last_known_gc_end_time_sec()) * 1000.0; + (end_time_sec - _analytics->oldest_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/src/share/vm/gc/shared/genCollectedHeap.cpp Tue Aug 02 13:48:07 2016 -0700 +++ b/src/share/vm/gc/shared/genCollectedHeap.cpp Tue Aug 02 20:55:27 2016 -0700 @@ -1256,21 +1256,21 @@ }; 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)("Detected clock going backwards. " + "Milliseconds since last GC would be " JLONG_FORMAT + ". returning zero instead.", retVal); return 0; } return retVal;