[concurrency-interest] JVM crash when using Unsafe to read/write bytes in Java 8 (no crash with same code in Java 7)

Gaëlle Guimezanes ggu at quartetfs.com
Thu Sep 18 09:54:51 EDT 2014


Running the test class with -Xint or -Xcomp makes the test work with no
crash, so the problem apparently is with OSR compiles...

However I don't know how to use only the C2 compiler, can you explain how
to do it?

Thanks
Gaelle



On Thu, Sep 18, 2014 at 2:53 PM, Vitaly Davidovich <vitalyd at gmail.com>
wrote:

> Looks like it's C1 OSR compiled code when it crashes.  Have you tried
> running this only in interpreter and only using C2 compiler? Can also try
> disabling OSR compiles.  Just to rule out any miscompilation ...
>
> Sent from my phone
> On Sep 18, 2014 8:09 AM, "Gaëlle Guimezanes" <ggu at quartetfs.com> wrote:
>
>> Hi Stanimir,
>>
>> Thanks for the suggestion, but I've tried allocating extra 16 bytes and
>> even extra 1024 bytes, and it still fails.
>>
>> Gaelle
>>
>> On Thu, Sep 18, 2014 at 1:34 PM, Stanimir Simeonoff <stanimir at riflexo.com
>> > wrote:
>>
>>> Hi,
>>>
>>> I suppose the problem occurs due to the last few (less than 8) bytes are
>>> addressed. Probably getByte(address) won't read just a byte but a 32/64
>>> word and mask+shift it.
>>> Try to allocate extra 16 bytes instead of 8.
>>>
>>> Stanimir
>>>
>>> On Thu, Sep 18, 2014 at 1:38 PM, Gaëlle Guimezanes <ggu at quartetfs.com>
>>> wrote:
>>>
>>>> Hello,
>>>>
>>>> I am sorry this is not really a concurrency problem since it can be
>>>> reproduced using only one thread, but I didn't really know where to discuss
>>>> this. Since many of you use Unsafe I thought you might be able to help me
>>>> understand what's happening or direct me to the correct mailing list.
>>>>
>>>> I have a strange behaviour using Unsafe in Java 1.8.0_20.
>>>> When I use getByte/putByte to manipulate bits, my JVM crashes (access
>>>> violation).
>>>> But when I use getLong/putLong for the same purpose it works correctly
>>>> (even though I have allocated exactly the same amount of memory).
>>>> Also, when using Java 1.7.0_67 to compile and run the same source code,
>>>> both the getByte/putByte and the getLong/putLong approaches work correctly.
>>>>
>>>> I have attached a simple test class (DirectMemoryCrash.java) for
>>>> reproducing the problem: you can run it with no argument for
>>>> the getByte/putByte version, or with "useLongs" arguments for
>>>> the getLong/putLong version.
>>>>
>>>> I also have attached crash reports :
>>>> hs_err_pid5480.log for the crash on windows
>>>> hs_err_pid7210.log for the crash on linux
>>>>
>>>> Thank you for your attention,
>>>> Best regards,
>>>> Gaëlle Guimezanes.
>>>>
>>>>
>>>> _______________________________________________
>>>> Concurrency-interest mailing list
>>>> Concurrency-interest at cs.oswego.edu
>>>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> Concurrency-interest mailing list
>> Concurrency-interest at cs.oswego.edu
>> http://cs.oswego.edu/mailman/listinfo/concurrency-interest
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cs.oswego.edu/pipermail/concurrency-interest/attachments/20140918/79d5aec4/attachment.html>


More information about the Concurrency-interest mailing list