Valhalla EG Notes June 20, 2018
john.r.rose at oracle.com
Fri Jul 13 20:24:52 UTC 2018
On Jul 13, 2018, at 1:00 PM, Karen Kinnear <karen.kinnear at oracle.com> wrote:
> Tobi - I owe you a response to your proposal - we are prototyping the proposal I sent out and learning a lot
> which may help inform where we end up.
I think we all agree that pre-loading VT classfiles is necessary to drive at least some of the
critical optimizations that justify VTs. The main optimization that require pre-loading is
certainly flattened fields. Another one is (almost certainly) scalarized parameters and
returns (for out-of-line calls).
("Pre-loading" simply means loading the VT classfile before the other JVMS rules would
force loading. Those rules pertain to instantiation, static member resolution, etc.)
The ValueTypes attribute is the (current) starting point for deciding which classes
are *candidates* for pre-loading. We could load *all* of them as early as possible,
but that is thought to require too much class loading activity at start-up time. I'm
not fully convinced this would be so bad, but let's try to do better. Doing better
means (a) loading fewer of the VT types, and/or (b) loading them later. The
latest possible point is, as noted above, when at VT class is actually used
in some way that triggers loading and <clinit>. The best possible win would
be deferring *all* VT loading to that required point, but we know that's impossible.
So LW1 will eagerly load VT classfiles in some ad hoc fashion driven by optimization
needs. Karen is writing up the rules for this, even as they seem to change under
her feet. (Thanks Karen!)
If the LW1 prototype loads VT classes too eagerly, we will try to dial it back,
perhaps along the lines Tobi proposes. The LW1 prototype is intended
in part to give us experience with performance models, so we may load
VT classes eagerly if we think it helps with specific optimizations. We'll
collect the performance win, and then go back and see if the loading
can be made less eager, to collect a startup win also. The startup wins
might well wait until post-LW1, depending on how much tricky experimentation
and redesign is required.
P.S. The above discussion mentions field flattening and out-of-line parameter
scalarization as the key optimizations that require pre-loading. These
may, in the end, be the only such optimizations, not just the key ones.
But we should be ready for a third shoe to drop. :-)
More information about the valhalla-spec-observers