RFR: 8065172: More core reflection final and volatile annotations
Martin Buchholz
martinrb at google.com
Mon Dec 8 22:00:25 UTC 2014
Alright, I'm convinced and will revert to using ordinary volatile
writes instead of CAS.
Y'all have a deeper understanding of the reflection machinery.
Martin
On Mon, Dec 8, 2014 at 1:52 PM, Peter Levart <peter.levart at gmail.com> wrote:
>
> On 12/08/2014 10:24 PM, Peter Levart wrote:
>
> "Interned" Types can not be guaranteed, since they are rooted on members of
> j.l.Class (Method, Field, Constructor), which can be GC-ed because of
> either:
>
> - class redefinition
> - memory pressure (see j.l.Class.reflectionData field, which points to
> SoftReference<ReflectionData>)
>
> ...and next time you request them, new instances will be created and new
> instances of Types with them.
>
> Regards, Peter
>
>
> Even in the absence of above, the Method, Field, Constructor objects
> obtained from j.l.Class methods are always copied from the "root" objects
> (because they are mutable - setAccessible()) and with copying, you always
> get a "fresh" object that has an uninitialized 'genericInfo' field.
>
> Even in the absence of all above, by CAS-ing, you don't actually get
> "interning", since two Type objects from different sources (for example
> generic return types of two different methods) can be equal, but they will
> not be same objects. So I can't see a purpose here. We would have to
> implement Type interning in a global pool to achieve that (like it is
> guaranteed for j.l.Class objects).
>
>
> Regards, Peter
>
More information about the core-libs-dev
mailing list