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

ashutosh mehra mehra.ashutosh at gmail.com
Thu Apr 5 17:22:48 UTC 2018


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> 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