Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Work on #1000, snippet on container first #1089

Merged
merged 1 commit into from
Feb 28, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions docs/src/main/asciidoc/topics/container-first.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
= {project-name} - Container First

From the outset {project-name} has been designed around a container first philosophy. What
this means in real terms is that {project-name} is optimised for low memory usage and fast
startup times in the following ways:

First Class Support for Graal/SubstrateVM::
Substrate support has been an important part of the design for {project-name} from the beginning.
When an application is compiled down to a native image it starts much faster and can run with a
much smaller heap than a standard JVM. {project-name} are all tested in Substrate, and can run
without the `-H:+ReportUnsupportedElementsAtRuntime` flag.

Build Time Metadata Processing::
As much processing as possible is done at build time, so your application will only contain the
classes that are actually needed at runtime. In a traditional model all the classes required
to perform the initial application deployment hang around for the life of the application, even though
they are only used once. With {project-name} they are not even loaded into the production JVM. This
results in less memory usage, and also faster startup time as all metadata processing has already been done.

Reduction in Reflection Usage::
As much as possible {project-name} tries to avoid reflection, reducing startup time and memory usage.

Native Image Pre Boot::
When running in a native image {project-name} pre-boots as much of the framework as possible during
the native image build process. This means that the resulting native image has already run most
of the startup code and serialized the result into the executable, resulting in even faster startup.