8145192: 'count' variable can overflow in PSMarkSweep::invoke on 64 bit JVM

Changed MarkSweepAlwaysCompactCount from uintx to uint

Reviewed-by: tschatzl, tbenson
This commit is contained in:
Sangheon Kim 2016-01-27 10:30:27 -08:00
parent 46d60f379c
commit 094345fc88
3 changed files with 6 additions and 6 deletions

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -99,7 +99,7 @@ void PSMarkSweep::invoke(bool maximum_heap_compaction) {
heap->collector_policy()->should_clear_all_soft_refs(); heap->collector_policy()->should_clear_all_soft_refs();
uint count = maximum_heap_compaction ? 1 : MarkSweepAlwaysCompactCount; uint count = maximum_heap_compaction ? 1 : MarkSweepAlwaysCompactCount;
UIntXFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count); UIntFlagSetting flag_setting(MarkSweepAlwaysCompactCount, count);
PSMarkSweep::invoke_no_policy(clear_all_soft_refs || maximum_heap_compaction); PSMarkSweep::invoke_no_policy(clear_all_soft_refs || maximum_heap_compaction);
} }

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -774,7 +774,7 @@ HeapWord* GenCollectorPolicy::satisfy_failed_allocation(size_t size,
// free memory should be here, especially if they are expensive. If this // free memory should be here, especially if they are expensive. If this
// attempt fails, an OOM exception will be thrown. // attempt fails, an OOM exception will be thrown.
{ {
UIntXFlagSetting flag_change(MarkSweepAlwaysCompactCount, 1); // Make sure the heap is fully compacted UIntFlagSetting flag_change(MarkSweepAlwaysCompactCount, 1); // Make sure the heap is fully compacted
gch->do_collection(true, // full gch->do_collection(true, // full
true, // clear_all_soft_refs true, // clear_all_soft_refs

View file

@ -3395,10 +3395,10 @@ public:
"also has a smaller default value; see arguments.cpp.") \ "also has a smaller default value; see arguments.cpp.") \
range(0, 100) \ range(0, 100) \
\ \
product(uintx, MarkSweepAlwaysCompactCount, 4, \ product(uint, MarkSweepAlwaysCompactCount, 4, \
"How often should we fully compact the heap (ignoring the dead " \ "How often should we fully compact the heap (ignoring the dead " \
"space parameters)") \ "space parameters)") \
range(1, max_uintx) \ range(1, max_juint) \
\ \
develop(uintx, GCExpandToAllocateDelayMillis, 0, \ develop(uintx, GCExpandToAllocateDelayMillis, 0, \
"Delay between expansion and allocation (in milliseconds)") \ "Delay between expansion and allocation (in milliseconds)") \