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