Greetings, dear reader! In this post, we’ll delve into one of the key features introduced with Java 10 – Application Class-Data Sharing (AppCDS). This feature aims to increase the startup speed of Java applications and reduce their footprint. For those accustomed to the performance nuances of the Java ecosystem, AppCDS was a welcome and significant improvement.
Understanding Application Class-Data Sharing:
Application Class-Data Sharing, or AppCDS, builds upon the Class-Data Sharing (CDS) feature that has been part of the Java HotSpot VM since Java 5. Initially, CDS was designed to reduce the startup time of Java applications by sharing common class metadata across different Java processes. However, this functionality was limited to the JDK’s system classes.
Java 10 expanded this feature with the introduction of AppCDS, allowing application classes to also be placed in the shared archive. This had the dual effect of improving startup time and reducing the memory footprint of Java applications.
The Benefits:
By sharing common class metadata between different Java processes and placing application classes into the shared archive, the overhead of class loading is significantly reduced. This directly improves the startup time of applications, which is crucial for large-scale applications and services that require frequent restarts or have many short-lived tasks.
Moreover, AppCDS reduces the memory footprint of the JVM. This is especially beneficial in containerized and cloud environments where resources are shared, and efficiency is critical.
Using Application Class-Data Sharing:
To leverage AppCDS, two steps are needed:
- Create a list of classes that need to be included in the shared archive. You can generate this list by running your application with the following JVM argument:
-XX:DumpLoadedClassList=<filename>. - Create the shared archive using the list of classes. This is done by using the
-Xshare:dumpJVM argument.
Example:
Here’s how you can create the class list and shared archive:
# Step 1: Create the class list java -XX:DumpLoadedClassList=myapp.lst -cp myapp.jar # Step 2: Create the shared archive java -Xshare:dump -XX:SharedClassListFile=myapp.lst -XX:SharedArchiveFile=myapp.jsa -cp myapp.jar
And to use the shared archive when running your application:
java -Xshare:on -XX:SharedArchiveFile=myapp.jsa -cp myapp.jar
In Conclusion:
Application Class-Data Sharing is a powerful feature in Java 10 that offers tangible benefits in application startup time and memory footprint. By utilizing shared archives for common class metadata, we can ensure faster, more efficient Java applications. As the Java ecosystem continues to evolve and expand, features like AppCDS are instrumental in meeting the growing demands of modern software development.
📚 Further Reading & Related Topics
If you’re exploring Java performance optimization with Application Class Data Sharing (AppCDS), these related articles will provide deeper insights:
• Java 17’s Enhanced Pseudo-Random Number Generators (PRNG): A Dive into JEP 356 – Learn how newer Java versions continue to optimize performance, complementing AppCDS in improving efficiency.
• Latency Optimization Techniques: Unlocking Performance with Lock-Free Programming, Memory Barriers, and Efficient Data Structures – Explore broader performance optimization techniques that enhance Java application speed and responsiveness.









Leave a reply to Java 25: Generational Shenandoah vs. Smarter Garbage Collection – Scalable Human Blog Cancel reply