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

Vitaly Davidovich vitalyd at gmail.com
Thu Sep 18 10:17:42 EDT 2014


Try turning off tiered compilation (-XX:-TieredCompilation) and pass
-server to the launcher.  I *think* that should do it.

However, I think you ran this with C1 just without OSR compilation (I
believe -Xcomp would do that), so this seems to point at an OSR compile.
 You can try disabling OSR compilation (irrespective of C1 or C2):
-XX:-UseOnStackReplacement

On Thu, Sep 18, 2014 at 9:54 AM, Gaëlle Guimezanes <ggu at quartetfs.com>
wrote:

> 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/034d0a4e/attachment.html>


More information about the Concurrency-interest mailing list