How to use Application Class-Data Sharing feature of java 10?

Shubham Kadlag :

I read about CDS in Oracle doc https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html

What I understood is the system class files needed for loading the jvm are parsed, verified and then stored in a archive at jre/lib/[arch]/client/classes.jsa. Moreover they also provide their memory mapping for jvm,so jvm directly maps the memory according to the mapping information given in the archive. So this reduces the overhead of class loading everytime a jvm instance starts. Please correct me if was wrong.

Now coming to java 10, how can I achieve this for my application code ? Secondly, would the complete application code be eligible for CDS or are there some restrictions?

Nicolai :

There are three essential steps to creating and using an archive with application class-data (for more details, read my post about application class-data sharing):

  1. Creating a list of classes to include in the archive:

    java -XX:+UseAppCDS
        -XX:DumpLoadedClassList=classes.lst
        -jar app.jar
    
  2. Creating an archive:

    java -XX:+UseAppCDS -Xshare:dump 
        -XX:SharedClassListFile=classes.lst
        -XX:SharedArchiveFile=app-cds.jsa
        --class-path app.jar
    
  3. Using the archive:

    java -XX:+UseAppCDS -Xshare:on 
        -XX:SharedArchiveFile=app-cds.jsa
        -jar app.jar
    

Keep the following in mind:

  • you can’t use wildcards or exploded JARs for the class path when creating the archive
  • the class path used to launch the application must have the one used to create the archive as a prefix
  • if you have any problems, use -Xlog:class+load (more on -Xlog) to get more information

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=35862&siteId=1