Alternatives for Unsafe field access
Nathan Mittler
nathanmittler at google.com
Thu Dec 8 20:49:04 UTC 2016
Hi Roger,
If I read that correctly, lookups still have to go through access checks
which would seem to imply that they can't be used for private field access.
Or am I misunderstanding?
On Thu, Dec 8, 2016 at 11:51 AM, Roger Riggs <Roger.Riggs at oracle.com> wrote:
> Hi Nathan,
>
> Have you looked at VarHandles? [1]
> It is possible to use MethodsHandles.Lookup to get a VarHandle to an
> unreflected field.
>
> Roger
>
> [1] http://download.java.net/java/jdk9/docs/api/java/lang/invoke
> /MethodHandles.Lookup.html
>
>
>
> On 12/8/2016 1:03 PM, Nathan Mittler wrote:
>
>> Hi everyone,
>>
>> Apologies in advance if this isn't the correct forum for this question. My
>> team is working on an experimental runtime for Google's protocol buffers
>> which is currently relying on sun.misc.Unsafe to perform various tasks
>> efficiently. I'm aware that the plan is to eventually remove Unsafe
>> altogether, and I want to make sure that we still have a way to move
>> forward with future versions of Java.
>>
>> The code is up on a github branch (
>> https://github.com/google/protobuf/tree/java_experimental).
>>
>> For an example of the sorts of things our runtime needs to do, you can
>> look
>> at the serialization code (
>> https://github.com/google/protobuf/blob/java_experimental/
>> java/core/src/main/java/com/google/protobuf/AbstractProto3Schema.java#L49
>> ).
>>
>> The idea is that the runtime dynamically determines information about
>> message fields (e.g. field types, offsets) and stores it into a single
>> buffer. Our main need is fast read/write access to the private fields of
>> our generated message classes. Java reflection would be too slow and would
>> require data representation as a list of objects, rather than a continuous
>> buffer (much less compact and cache-friendly). Security restrictions would
>> be a concern as well. At first glance at Java 9, I don't see any
>> facilities
>> that would help here.
>>
>> This would seem to be a fairly common use case a low-level serialization
>> framework, such as protobuf. Are there any thoughts on how such a use case
>> could be supported post-Unsafe?
>>
>> Thanks,
>> Nathan
>>
>
>
More information about the core-libs-dev
mailing list