Building/distributing more than one VM in a single JDK distribution
Aleksei Voitylov
aleksei.voitylov at bell-sw.com
Wed Mar 12 11:52:41 UTC 2025
Hi Magnus,
we at BellSoft still distribute the bundles which include Minimal,
Client, and Server VMs alongside standard bundles with Server VM. This
allows users to create Runtimes using jpackage with a VM of their
choice. The use cases for that are
1. Application developers with simple GUI applications that prefer
startup time and disk space offered by Client VM.
2. Embedded systems developers which typically strip down all modules
besides java.base and use Minimal VM, but at the same tim often prefer
something better performant for some of the more capable devices.
3. Client VM used in containers, with the same grounds as GUI app
developers.
So I'd argue that there are use cases for having several VMs in one
bundle. Creating specialized builds for all these use cases at the
distribution level is probably not worth the effort while having a build
that includes all and having the users being able to decide what they
want is.
One other argument from a convenience standpoint of JDK developers is
that you only have to build once with all VMs to verify they are
buildable, the same goes for CI pipelines.
On the other hand, I share your concern for build system complexity.
Maybe what could be done is create a build step that will, once several
VMs are built from the same codebase sequentially, merge them into one
build? This would invovle patching java.base at this last step (which I
don't particularly like). But if this is something that will simplify
the build process, I'm all for it. That would allow distributions that
ship such multi-VM bundles to keep doing so.
Another option (less preferrable) is to drag support for building
several VMs until 25 is released, as I anticipate that with Leyden
startup time of Server VM will be less of an issue. With that, users of
cases 1 and 3 will be given the technical option to improve the startup
time they care for (but not the disk space). And we'd probably be fine
with building the Minimal VM for Embedded world as those typically are
specialized distributions.
Thanks,
-Aleksei
On 11.03.2025 15:53, Magnus Ihse Bursie wrote:
> Since time immemorial, the JDK has had the ability to build more than
> one variant of Hotspot, and let the user select which one to use at
> runtime. The canonical example was how 32-bit Windows included both
> "client" and "server", and defaulted to "client".
>
> This flexibility comes at a cost, as it creates a lot of complexity in
> different parts of the JDK -- including, but not limited to, the build
> system, jlink, and the launcher.
>
> Hotspot has support for these variants: server, client, minimal, core
> and zero. Of these, "core" is apparently an old remnant that I even
> forgot where it was used (embedded, I think?), and "client" has only
> been used for 32-bit systems, which are now on their way out. Neither
> of these are tested regularly in the Oracle CI, or on GHA.
>
> That leaves only server, minimal and zero as the remaining relevant
> variants. These are kept up to date with testing, at least so that
> they are able to build.
>
> However, we do not build *both* server and minimal, or *both* server
> and zero, neither on GHA or on the Oracle CI. Instead, we *replace*
> server with either zero or minimal.
>
> The point of zero is to have a JVM that can run on hardware that
> server does not support (or, in the special case of the iOS mobile
> port -- a platform where JITting code is not allowed). It makes no
> sense to me to distribute a JDK that includes both the server and the
> zero variants of Hotspot. If server works, then zero is suboptimal in
> performance, and not needed. If server does not work, then it need not
> be included.
>
> The point of minimal is to create a JVM with the smallest possible
> footprint, by excluding functionality. If you distribute the a JDK
> with both the server and minimal JVM included, you fail doubly: the
> footprint will be larger, and there will never be any use of minimal,
> since it is just more limited than server.
>
> Hence, I see no need anymore to keep the ability to build more than
> one variant of Hotspot at the same time. I propose we drop this
> functionality, which will allow for us to clean up and remove a lot of
> complexity in several areas of the codebase. (Just to be clear: I do
> not propose removing zero or minimal, I'm just saying that you need to
> build *only* the zero or minimal JVM if that is what you want.)
>
> Feedback, thoughts?
>
> /Magnus
>
More information about the jdk-dev
mailing list