Not able to add classes in a directory to shared archive when using AppCDS

Mikhailo Seledtsov mikhailo.seledtsov at oracle.com
Thu Apr 5 17:39:16 UTC 2018


Hi Ashutosh,

   Jiangli replied with an answer to your question on 
hotspot-runtime-dev at openjdk.java.net.

Regards,
Misha

On 4/5/18, 10:22 AM, ashutosh mehra wrote:
> Any reason why AppCDS does not support archival of straight classes?
>
> Regards,
> Ashutosh
>
>
> On Thu, Apr 5, 2018 at 7:30 PM, Mikhailo Seledtsov 
> <mikhailo.seledtsov at oracle.com <mailto:mikhailo.seledtsov at oracle.com>> 
> wrote:
>
>     Hi Ashutosh,
>
>       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,
>     Best regards,
>     Misha
>
>
>     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.
>
>         Regards,
>         Ashutosh
>
>


More information about the jdk-dev mailing list