Not able to add classes in a directory to shared archive when using AppCDS
mikhailo.seledtsov at oracle.com
Thu Apr 5 14:00:49 UTC 2018
I believe that AppCDS does not support archival of straight classes.
Please add classes to the jar first, use -cp path-to-jar when generating
the archive. Make sure class path does not include any directories that
has straight class files (.class), or you will get the same error.
When running with archive, use the same class path as was used during
the generation of the archive.
I hope this is helpful,
On 4/5/18, 2:15 AM, ashutosh mehra wrote:
> I am trying to use App CDS for a sample application.
> My class files are in a directory which I specify as the classpath.
> I want these classes to be included in shared archive.
> Directory structure is like this:
> $ tree
> ├── classes
> │ ├── SampleClass.class
> │ └── SampleClass.java
> ├── TestCDS.class
> └── TestCDS.java
> I performed following steps:
> 1. Create the class list:
> $ java -Xshare:off -XX:+UseAppCDS -XX:DumpLoadedClassList=classes.list -cp
> .:classes TestCDS
> This generated the list of classes including my application classes TestCDS
> and SampleClass.
> 2. Create the shared archive:
> $ java -Xshare:dump -XX:+UseAppCDS -XX:SharedClassListFile=classes.list
> -XX:SharedArchiveFile=mycds.jcs -cp .:classes
> I get following error message:
> *narrow_klass_base = 0x0000000800000000, narrow_klass_shift = 3*
> *Allocated temporary class space: 1073741824 bytes at 0x00000008c0000000*
> *Allocated shared space: 3221225472 bytes at 0x0000000800000000*
> *Error: non-empty directory '.'*
> *Hint: enable -Xlog:class+path=info to diagnose the failure*
> *Error occurred during initialization of VM*
> *CDS allows only empty directories in archived classpaths*
> Java version is:
> openjdk version "10" 2018-03-20
> OpenJDK Runtime Environment 18.3 (build 10+46)
> OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)
> I have also tried with Java 11 EA build but got same output.
> Is this expected behavior? I am sure it would be useful for many if the
> classes loaded from a directory can also be stored in the shared archive.
More information about the jdk-dev