Arrays now implement "Arrayish"

Rémi Forax forax at
Thu Apr 28 13:14:31 UTC 2016

Answering to myself,
yes, the prototype support default methods this is currently how arraySize, arrayGet and arraySet are implemented. 

This means by the way that a class can implements Arrayish without providing any implementations so a ClassCastException will be raised.

Perhaps you should have two interfaces,
Arrayish with only abstract methods and ArrayIshImpl (for a lack of better name) which extends Arrayish contains the default methods and is the one which is injected as interface for each array class.


Le 28 avril 2016 15:02:52 CEST, "Rémi Forax" <forax at> a écrit :
>Hi David,
>did you check that Arrayish can contain default methods ?
>Le 27 avril 2016 14:52:41 CEST, David Simms <david.simms at> a
>écrit :
>>I've just pushed a set of changes to enable all arrays to implement
>>"java.lang.Arrayish" interface:
>>    public interface Arrayish<any T> extends Cloneable,
>> {
>>         int arraySize();
>>         T arrayGet(int index);
>>         void arraySet(int index, T element);
>>    }
>>Thanks to John Rose for the original patch, which I have adapted
>>How does it work ?
>>  * "Klass->extra_super()" contains an optional "InstanceKlass*"
>>    pointer, which all array klasses have set to their appropriate
>>    Arrayish, i.e.:
>>      o int[] extra_super() = "Arrayish<int>"
>>      o Object[] extra_super() = "Arrayish"
>> * Classes used as "extra_super" must currently be interfaces, and
>>    their own "self itable" generated at load time.
>>  * The extra_super mechanism allows the "Arrayish" interface to be
>>    injected during JVM start-up, but after the basic array types need
>>    to be initialized
>>  * "extra_super()" is used when, checkcast/instanceof and looking up
>>    interface methods
>>  * See jtreg test: "hotspot/runtime/valhalla/arrays/"
>>This is a prototype, there are caveats (and dragons):
>>  * The current "Model 3" implementation uses a specializer written in
>>    Java, for bootstrapping the Arrayish specializations, these are
>>    currently built at JDK compile time (placed
>>    "$JAVA_HOME/valhalla-prespecialized")
>>      o There is no support yet for double slot types (double and
>>        and hence their arrays)
>>      o These classes are specific to the JVM runtime, and must not be
>>        seen by "javac" ( "VALHALLA_PRESPECIALIZED_DIR" is known to
>>        classloader implementation, but not the classpath).
>>  * x86 32 & 64 bit architectures only at this point
>>   o arrays on other architectures will simply not implement
>>  * Nothing about this implementation is set in stone, prototype code
>>    and quality (piggy-backing on these changes, then ymmv)
>>  * The type hierarchy for arrays will no doubt continue to be in flux
>>/David Simms

More information about the valhalla-dev mailing list