The Great Startup Problem, redux

Claes Redestad claes.redestad at oracle.com
Wed Nov 7 19:00:57 UTC 2018


Hi,

thanks for the pointer... :-)

However, while it's true that SVM (in its current form) imposes severe 
limits to dynamicity, it'd be a bug if jaotc, jlink or any other of the 
startup efforts (such as AppCDS) in the OpenJDK project changed 
semantics or imposed limits to indy-style dynamicity in any way:

- jaotc compiles code ahead of time, but do anything crazy like 
replacing indy callsites with something else. The bootstrap methods and 
machinery to spin bytecode may be AOT-compiled, of course, but the end 
result should be indistinguishable from running without AOT, semantically.
- jlink should be neutral in most aspects w.r.t dynamicity, and all of 
the plumbing for indy lives in the java.base module (which can't be 
removed by jlink).
- jlink *does* include a plugin to generate some of the runtime 
invariant building blocks used by indy statically at link-time based on 
profiling information. This is a speculative optimization that doesn't 
remove any capabilities: if the LFs, BMH species etc that have been 
pre-generated exists, they'll be used and the JVM might spend a bit less 
time setting things up. If they don't exist code will be spun up 
dynamically. Again, users shouldn't notice any difference other than 
slightly faster ramp-up time.

With regards to opportunities I think there are plenty of improvements 
that could be explored, both in the implementation and in the APIs. 
Coincidentally, I've recently been looking at a bunch of ISC stress 
tests as a tool to explore optimization opportunities in the MH API, and 
proposed one rather general optimization in this space mere hours 
ago[1]. Might be able to find some more in that general area..

Condy is another recent improvement that can likely be used for a lot of 
things, adding dynamicity and laziness in places where indy might not be 
the best fit. One example of that here: 
https://bugs.openjdk.java.net/browse/JDK-8186216

/Claes

[1] 
http://mail.openjdk.java.net/pipermail/core-libs-dev/2018-November/056480.html 


On 2018-11-07 18:01, Ghadi Shayban wrote:
> The Great Startup Problem [1] was a wonderful read highlighting the 
> problems surrounding the early life of a JVM application. In-flight 
> efforts that allow (to a limited extent) better startup 
> characteristics include jaotc, substrateVM, jlink. These efforts all 
> trade away dynamicity of some sort, and dynamicity is one of the 
> magical powers of the JVM.  What sort of opportunities exist for 
> improving startup that don't trade away the capability to run indy or 
> impose whole-program analysis? As a user of Clojure, I value how 
> dynamic the JVM is along several dimensions.
>
> [1]http://mail.openjdk.java.net/pipermail/mlvm-dev/2014-August/005890.html 
> <http://mail.openjdk.java.net/pipermail/mlvm-dev/2014-August/005890.html>
>
>
> _______________________________________________
> mlvm-dev mailing list
> mlvm-dev at openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev



More information about the mlvm-dev mailing list