Skip to content

Commit

Permalink
Document CDS support
Browse files Browse the repository at this point in the history
Closes gh-40061
  • Loading branch information
mhalbritter committed Mar 25, 2024
1 parent a4b4a88 commit 4e62aae
Showing 1 changed file with 13 additions and 16 deletions.
Expand Up @@ -6,30 +6,27 @@
[[deployment.efficient.unpacking]]
== Unpacking the Executable JAR

If you are running your application from a container, you can use an executable jar, but it is also often an advantage to explode it and run it in a different way.
Certain PaaS implementations may also choose to unpack archives before they run.
If you are running your application, you can use an executable jar, but it is also often an advantage to extract it and run it in a different way.
Certain PaaS implementations may also choose to extract archives before they run.
For example, Cloud Foundry operates this way.
One way to run an unpacked archive is by starting the appropriate launcher, as follows:

[source,shell]
----
$ jar -xf myapp.jar
$ java org.springframework.boot.loader.launch.JarLauncher
----
With the help of the jarmode, you can extract the jar to different layouts.
The most efficient layout is a CDS (class data sharing) friendly layout.
This layout is used by default.

This is actually slightly faster on startup (depending on the size of the jar) than running from an unexploded archive.
After startup, you should not expect any differences.

Once you have unpacked the jar file, you can also get an extra boost to startup time by running the app with its "natural" main method instead of the `JarLauncher`. For example:
In this layout, the libraries are extracted to a `lib/` folder, and the application JAR
contains the application classes and a manifest which references the libraries in the `lib/` folder.

[source,shell]
----
$ jar -xf myapp.jar
$ java -cp "BOOT-INF/classes:BOOT-INF/lib/*" com.example.MyApplication
$ java -Djarmode=tools -jar my-app.jar extract
$ java -jar my-app/my-app.jar
----

NOTE: Using the `JarLauncher` over the application's main method has the added benefit of a predictable classpath order.
The jar contains a `classpath.idx` file which is used by the `JarLauncher` when constructing the classpath.
This is actually faster on startup (depending on the size of the jar) than running from an unexploded archive.
After startup, you should not expect any differences.

TIP: Run `java -Djarmode=tools -jar my-app.jar help extract` to see all possible options.



Expand Down

0 comments on commit 4e62aae

Please sign in to comment.