Implement no copy memory
Ardika Rommy Sanjaya
ardikars at gmail.com
Tue May 21 12:09:17 UTC 2019
Hi,
I want to do packet parsing manualy (not using Layout).
>> Wouldn't it make sense for packet parsing to construct a ByteBuffer
>> first, and do the parsing using that?
Yes, I saw that DirectByteBuffer using jdk.internal.misc.Unsafe. But why jdk.internal.misc.Unsafe is not exported in module-info.java? is it because security reason?
Hopefully one day it will exported, because sun.misc.Unsafe is deprecated.
Thanks in advanced
> On 21 May 2019, at 16.40, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
>
>
> On 21/05/2019 09:49, Florian Weimer wrote:
>> * Maurizio Cimadamore:
>>
>>> On 21/05/2019 05:26, Ardika Rommy Sanjaya wrote:
>>>> If using panama should I cast the Pointer<Byte> before get the
>>>> content data?
>>> In Panama you would do this:
>>>
>>> Pointer<Byte> buf = ...
>>>
>>> Pointer<Short> ps = buf.cast(NativeTypes.VOID).cast(NativeTypes.UINT16);
>>> short s = ps.get();
>>>
>>> or...
>>>
>>> Pointer<Integer> pi = buf.cast(NativeTypes.VOID).cast(NativeTypes.UINT32);
>>> int i = pi.get();
>>>
>>> Note that you have to cast through VOID first, otherwise the Panama
>>> runtime will complain about incompatible cast.
>> Wouldn't it make sense for packet parsing to construct a ByteBuffer
>> first, and do the parsing using that?
>
> It really depends on how low-level you want to go. If it's packet parsing what you want to do, it might be possible to describe the layout of the packet you want to parse using a 'Layout' and then you could overlay a custom strcut layout onto the pointer, and then access memory via ordinary getter calls.
>
> If you want to go the byte-buffer way, there's a way to do that too, using the Pointer::asDirectByteBuffer method.
>
> http://hg.openjdk.java.net/panama/dev/file/c65ecdbf4155/src/java.base/share/classes/java/foreign/memory/Pointer.java#l217 <http://hg.openjdk.java.net/panama/dev/file/c65ecdbf4155/src/java.base/share/classes/java/foreign/memory/Pointer.java#l217>
>
> The new memory access-centric API we're working on will also be solid option, moving forward, to read (or write) from native memory - through the VarHandle API [1]. With that API you can build a VarHandle to dereference an address at a given layout element - so if you know the layout of the region you are accessing, you can get a bunch of VarHandle to do the read/write and the JIT will be able to get quite good peak performances (we're currently some 15% behind raw usage of Unsafe, with room to improve).
>
> [1] - http://cr.openjdk.java.net/~mcimadamore/panama/memaccess.html <http://cr.openjdk.java.net/~mcimadamore/panama/memaccess.html>
>
>>
>> Thanks,
>> Florian
More information about the panama-dev
mailing list