EVALUATION
http://hg.openjdk.java.net/jdk7/hotspot/hotspot/rev/3698e8f47799
|
|
|
EVALUATION
http://hg.openjdk.java.net/jdk7/hotspot-gc/hotspot/rev/3698e8f47799
|
|
|
SUGGESTED FIX
While investigating this failure I also noticed the following:
update_recent_gc_times(end_sec, full_gc_time_sec);
This is incorrect as update_recent_gc_time() is expecting the second parameter to be in ms:
void G1CollectorPolicy::update_recent_gc_times(double end_time_sec,
double elapsed_ms) {
The fix is straightforward (as full_gc_time_ms is already calculated):
- update_recent_gc_times(end_sec, full_gc_time_sec);
+ update_recent_gc_times(end_sec, full_gc_time_ms);
|
|
|
SUGGESTED FIX
Revert this change:
+ if (!evacuation_failed()) {
g1_policy()->record_pause_time((end_time_sec - start_time_sec)*1000.0);
+ }
to make sure we correctly set _last_pause_ms, but only update the pause statistics at the end of the pause if the pause didn't have evacuation failure (which was the original intention of the change).
|
|
|
EVALUATION
Even though it looks similar to 6785211 I think the cause is different. The failure in this CR was introduced by 6797754 and in particular this change:
+ if (!evacuation_failed()) {
g1_policy()->record_pause_time((end_time_sec - start_time_sec)*1000.0);
+ }
So, if there was an evacuation failure, record_pause_time() was not called to notify the policy how long the pause time was. As a result the policy will pick up junk if it reads _last_pause_ms (which is the case here), or pick up an incorrect value (if _last_pause_ms) had been set by a previous pause.
|
|
|