Initialize Once, Start Fast: Application Initialization at Build Time
Arbitrary program extension at run time in language-based VMs, e.g., Java's dynamic class loading, comes at a startup cost: high memory footprint and slow warmup.
Cloud computing amplifies the startup overhead.
Microservices and serverless cloud functions lead to small, self-contained applications that are started often.
Slow startup and high memory footprint directly affect the cloud hosting costs, and slow startup can also break service-level agreements.
Many applications are limited to a prescribed set of pre-tested classes, i.e., use a closed-world assumption at deployment time.
For such Java applications, GraalVM Native Image offers fast startup and stable performance.
GraalVM Native Image uses a novel iterative application of points-to analysis and heap snapshotting, followed by ahead-of-time compilation with an optimizing compiler.
Initialization code can run at build time, i.e., executables can be tailored to a particular application configuration.
Execution at run time starts with a pre-populated heap, leveraging copy-on-write memory sharing.
We show that this approach improves the startup performance by up to two orders of magnitude compared to the Java HotSpot VM, while preserving peak performance.