Loading... (original) (raw)
Summary
Currently the default class data sharing (CDS) setting for Server VM is -Xshare:off
. Change the default to -Xshare:auto
to make it easier to use CDS.
Problem
We expect CDS to be widely used with the Server VM. However, the current default CDS setting for Server VM is -Xshare:off
. This makes it cumbersome to use CDS.
Solution
Change the default to -Xshare:auto
, so as long as a CDS archive exists in the JDK, CDS will be automatically used without specifying extra flags.
In JDK 8 and before, RewriteBytecodes was disabled when CDS was enabled. This caused performance degradation in the Server Compiler (aka C2). However this has been fixed in JDK-8074345 since JDK 9, so there's no longer need to disable CDS by default with the Server VM.
Specification
For the Server VM, if the -Xshare
option is not explicitly specified in the command-line:
- If the
-XX:SharedArchiveFile=<file>
option is specified, and<file>
exists, the JVM will attempt to map<file>
as the CDS archive, as if-Xshare:auto
had been specified. - If the
-XX:SharedArchiveFile
option is not specified, the VM will attempt to map the default CDS archive ($JAVA_HOME/lib/server/classes.jsa
), as if-Xshare:auto
had been specified.
Note: no user visible changes are needed in the -help
output because the current output for the server VM already says (incorrectly)
-Xshare:auto use shared class data if possible (default)
-Xshare:off do not attempt to use shared class data
-Xshare:on require using shared class data, otherwise fail.
so in a way we are just changing the implementation to match the documentation.