Classfile representation of specializable classes
    David Chase 
    david.r.chase at oracle.com
       
    Fri Jul 11 18:50:31 UTC 2014
    
    
  
On 2014-07-11, at 1:21 PM, Dan Smith <daniel.smith at oracle.com> wrote:
> Maybe what you're after with classdynamic is (primarily) a ClassLoader feature rather than a VM feature?  That is, maybe 'defineClass' should be parameterized by a pluggable class-generation system, and that's where the expansion should take place, intercepting the bytes and spitting out the special class.  It's not totally clear to me how this would work, but I think it may be the right place for it.  (I have consistently felt like what we really want with classdynamic is ClassLoaders 2.0.)
We played this game in the Fortress implementation, borrowing design from NextGen
( http://www.cs.rice.edu/~javaplt/nextgen/ )
85% of it is straightforward.  One tricky bit was the need to know whether the thing being
substituted for a T was a class or an interface (invokeinterface vs invokevirtual),
especially when that thing was itself the result of an instantiation.
(Reified) generic methods were tricky.  We could use invokedynamic to put lipstick on that
pig, but under the lipstick is still a pig.  I do not recall the precise mechanism that we used,
but I think it involved tables indexed by (secure?) hashcodes of instantiation signatures, returning
"closure" (Fortress-speak) objects.  There's some trickiness involved in getting the type
signatures right at both ends, as well as some trickiness in evaluating those secure hashcodes
at template-instantiation time (the stamper-outer has a special case for such calculations).
David
    
    
More information about the valhalla-dev
mailing list