Arrays now implement "Arrayish"
david.simms at oracle.com
Wed Apr 27 12:52:41 UTC 2016
I've just pushed a set of changes to enable all arrays to implement the
public interface Arrayish<any T> extends Cloneable,
T arrayGet(int index);
void arraySet(int index, T element);
Thanks to John Rose for the original patch, which I have adapted somewhat.
How does it work ?
* "Klass->extra_super()" contains an optional "InstanceKlass*"
pointer, which all array klasses have set to their appropriate
o int extra_super() = "Arrayish<int>"
o Object extra_super() = "Arrayish"
* Classes used as "extra_super" must currently be interfaces, and have
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
* See jtreg test: "hotspot/runtime/valhalla/arrays/ArrayTypes.java"
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
o There is no support yet for double slot types (double and long,
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 the
classloader implementation, but not the classpath).
* x86 32 & 64 bit architectures only at this point
o arrays on other architectures will simply not implement "Arrayish"
* 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
More information about the valhalla-dev