RFR(s): 8145312: CMS: There is insufficient memory with CMSSamplingGrain=1

sangheon sangheon.kim at oracle.com
Tue Mar 8 19:47:33 UTC 2016


Hi Jon,

Thanks for reviewing this.

concurrentMarkSweepGeneration.cpp: line 606

_eden_chunk_capacity = (_young_gen->max_capacity() + CMSSamplingGrain) / 
CMSSamplingGrain;

If CMSSamplingGrain is larger than 'max_uintx - 
_young_gen->max_capacity()', it will make an overflow.

FYI, '_eden_chunk_capacity' is 'size_t' and 'CMSSamplingGrain' is 'uintx'

Thanks,
Sangheon


On 03/08/2016 11:20 AM, Jon Masamitsu wrote:
> Sangheon,
>
> http://cr.openjdk.java.net/~sangheki/8145312/webrev.00/src/share/vm/runtime/commandLineFlagConstraintsGC.cpp.frames.html 
>
>
> 456 if (value > max_uintx - max_capacity) {
> 457 CommandLineError::print(verbose,
> 458 "CMSSamplingGrain (" UINTX_FORMAT ") must be "
> 459 "less than or equal to ergonomic maximum (" SIZE_FORMAT ")\n",
> 460 value, max_uintx - max_capacity);
>
>
> How did you decide to use the test "value > max_uintx - max_capacity"?
>
> Jon
>
> On 3/8/2016 12:00 AM, sangheon wrote:
>> Hi all,
>>
>> Could I have some reviews for CMSSamplingGrain flag?
>>
>> The flag is used to calculate points at which the young gen should be 
>> partitioned for doing parallel work, so it only makes sense to 
>> partition at a granularity equal to or larger than the object size.
>>
>> I am proposing to change the minimum value of CMSSamplingGrain from 
>> '1' to 'ObjectAlignmentInBytes'.  (ObjectAlignmentInBytes has a range 
>> of [8, 256]).
>>
>> In addition, I added a constraint function to avoid an arithmetic 
>> overflow by its maximum value.
>>
>> CR: https://bugs.openjdk.java.net/browse/JDK-8145312
>> Webrev: http://cr.openjdk.java.net/~sangheki/8145312/webrev.00/
>> Testing: JPRT, RBT for all platforms including embedded
>>
>> Thanks,
>> Sangheon
>




More information about the hotspot-gc-dev mailing list