Alternatives for Unsafe field access

Roger Riggs Roger.Riggs at Oracle.com
Thu Dec 8 19:51:07 UTC 2016


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