RFR (S): [increase HeapBaseMinAddress for G1] 8012265: VM often crashes on solaris with a lot of memory

Bengt Rutisson bengt.rutisson at oracle.com
Thu Jun 13 13:03:54 PDT 2013


Thanks Mikael, Coleen and Vladimir for the reviews!

Bengt

On 6/13/13 4:02 PM, Vladimir Kozlov wrote:
> Looks good.
>
> Vladimir
>
> On 6/12/13 11:58 PM, Bengt Rutisson wrote:
>>
>> Hi everyone,
>>
>> Could I have a couple of reviews for this change?
>>
>> http://cr.openjdk.java.net/~brutisso/8012265/webrev.00/
>>
>> Sending this to the broad hotspot list since it affects compressed 
>> oops, which is a VM wide concern.
>>
>> Background:
>>
>> The G1 GC uses malloc extensively to allocate auxiliary data 
>> structures. On Solaris malloc requires a consecutive chunk
>> of memory for the C-heap. It picks this chunk in the low addresses so 
>> when hotspot maps the Java heap in the low
>> addresses to get compressed oops we limit the available memory for 
>> the C-heap on Solaris.
>>
>> For compressed oops the Java heap is mapped at HeapBaseMinAddress, 
>> which by default is 2GB on all platforms except
>> Solaris x86 where it is 256MB. If we have a large Solaris x86 we get 
>> many GC worker threads and many G1 heap regions.
>> All of them requiring substantial C-heap allocations.
>>
>> The combination of a limited C-heap and a lot of mallocs for G1 may 
>> cause us to run out of memory on large Solaris x86
>> machines, even with our default settings.
>>
>> The long term solution is to change G1 to be more efficient about its 
>> memory consumption and preferably use mapped
>> memory instead of malloced memory. This is a lot of work, but will 
>> definitely have to be done.
>>
>> A short term solution to reduce the risk of running out of memory is 
>> to increase the default value of HeapBaseMinAddress
>> for G1. That is what my proposed patch does.
>>
>> This will reduce the maximum possible heap sizes for compressed oops 
>> without a heap base. Shifted compressed oops will
>> be reduced from almost 32g to 31g and unshifted compressed oops from 
>> almost 4g to 3g. Still more than on any other
>> platform where HeapBaseMinAddress=2g by default. It will only affect 
>> G1 and it can be overridden by explicitly setting
>> HeapBaseMinAddress on the command line.
>>
>> I've filed this enhancement in JBS to track the work to change back 
>> the default value:
>>
>> JDK-8016505: G1: Revert back to use HeapBaseMinAddress=256m on 
>> Solaris x86
>>
>> Thanks,
>> Bengt



More information about the hotspot-dev mailing list