On constant folding of final field loads

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Mon Jun 29 12:00:57 UTC 2015


Paul,

> For MHs it's not possible to lookup a MH (via MH.L.findSetter/unreflectSetter) to a final field.
>
> http://hg.openjdk.java.net/jdk9/dev/jdk/file/93ced310c728/src/java.base/share/classes/java/lang/invoke/MethodHandles.java#l1516
>
> Although i cannot find any such explicit mention in JavaDoc, so i guess it can be considered under the umbrella of "access checks".
Though you can't lookup a setter for al final field directly, you can 
use Lookup.unreflectSetter:
   Field f = T.class.getDeclaredField("t");
   f.setAccessible(true);
   MethodHandle setter = MethodHandles.lookup().unreflectSetter(f);

But it doesn't matter much, since MH field getters/setters are baseon on 
Unsafe. So, if final field value tracking works for Unsafe, it works for 
j.l.i as well.

Best regards,
Vladimir Ivanov


More information about the hotspot-compiler-dev mailing list