RFR(S): 8058897 - Unsafe.reallocateMemory() ignores -XX:MallocMaxTestWords setting.

Christian Tornqvist christian.tornqvist at oracle.com
Wed Jan 7 16:26:08 UTC 2015


Hi Dan,

>src/share/vm/runtime/os.cpp
>The old testMalloc() function would increment cur_malloc_words only
>if the underlying ::malloc() call succeeded. This was intentional.
>The switch to has_reached_max_malloc_test_peak() followed by the
>::malloc() call means that an intentionally large failing ::malloc()
>call will result in falsely reaching the test peak.
The changes necessary to make this work for both our malloc and realloc
implementations would bloat the code quite a bit.

I looked through all uses of MallocMaxTestWords, and there are only 5 tests
using this flag, including the one I'm including in this webrev. 
None of them does a large allocation assuming it would fail and not
increment the cur_malloc_words.

>test/runtime/Unsafe/Reallocate.java
>Should this test have an @bug entry?
I'll add this

>line 59: unsafe.reallocateMemory(address, 20 * 1000 * 1000 * 8);
>Shouldn't this be "1024 * 1024" instead of "1000 * 1000"?
Good catch, fixing this.

>Also, -XX:MallocMaxTestWords=20m means 20m words and not
>20m bytes so the "* 8" part might not always cause an OOM.
Words are either 4 or 8 bytes, which means that the size passed onto
reallocateMemory() will be equal to 20m words on 64bit and 40m on 32bit. 

Updated webrev can be found at:
http://cr.openjdk.java.net/~ctornqvi/webrev/8058897/webrev.01/


Thanks,
Christian

-----Original Message-----
From: Daniel D. Daugherty [mailto:daniel.daugherty at oracle.com] 
Sent: Wednesday, January 7, 2015 9:47 AM
To: Christian Tornqvist
Cc: 'hotspot-runtime-dev'
Subject: Re: RFR(S): 8058897 - Unsafe.reallocateMemory() ignores
-XX:MallocMaxTestWords setting.

On 1/6/15 5:12 PM, Christian Tornqvist wrote:
> Hi everyone,
>
>   
>
> This change makes realloc use MallocMaxTestWords, a debug option used 
> to simulate malloc OOM.
>
>   
>
> Webrev:
>
> http://cr.openjdk.java.net/~ctornqvi/webrev/8058897/webrev.00/

src/share/vm/runtime/os.cpp
     The old testMalloc() function would increment cur_malloc_words only
     if the underlying ::malloc() call succeeded. This was intentional.
     The switch to has_reached_max_malloc_test_peak() followed by the
     ::malloc() call means that an intentionally large failing ::malloc()
     call will result in falsely reaching the test peak.


test/runtime/Unsafe/Reallocate.java
     Should this test have an @bug entry?

     line 59: unsafe.reallocateMemory(address, 20 * 1000 * 1000 * 8);
         Shouldn't this be "1024 * 1024" instead of "1000 * 1000"?

         Also, -XX:MallocMaxTestWords=20m means 20m words and not
         20m bytes so the "* 8" part might not always cause an OOM.

Dan


>
>   
>
> Bug:
>
> https://bugs.openjdk.java.net/browse/JDK-8058897
>
>   
>
> Thanks,
>
> Christian
>




More information about the hotspot-runtime-dev mailing list