JDK-6894248 : CDS list should include everything needed for plugin that runs in the browser process
  • Type: Enhancement
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: 6
  • Priority: P2
  • Status: Closed
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2009-10-22
  • Updated: 2013-11-01
  • Resolved: 2009-11-20
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
6u18 b05Fixed
Related Reports
Relates :  
I have noticed that firefox process opens rt.jar and reads its directory and few blocks from there (using procmon).
It looks like about 20-30 classes from rt.jar are loaded. These must be included into classes.jsa, 
so browser VM will not open rt.jar at all.

EVALUATION Adding deploy jars in front of bootclasspath does not really work as it will disable shared archive. Modified meta index build script to add all second level packages for sun package. This will slightly increase cost of class lookup time but not too much - 4ms per 10000 classes on my system. We can (and should) improve meta index efficiency and scalability in future releases though.

EVALUATION 50 classes are missing (same set for firefox and IE). See list below. However, adding this classes to classes.jsa does not avoid reading rt.jar directory. Directory is read when plugin classes from sun/* package are loaded. There are 2 different way to resolve this: 1) add all packages in the sun package from rt.jar to meta-index (meaning 25 more entries) 2) put deployment jars in front of bootclasspath for browser VM Approach 1 seems to be better as it will help to avoid some lookups in other cases too but i am not sure how much complexity it will add to meta-index check in runtime. I have quickly prototyped approach 1 and it works, we are not reading rt.jar anymore. I do not see any significant gain for warm start tests. This is somewhat expected as everything in the disk cache. For real world scenarios we will read less in the process that blocks browser execution and this is important as it affects browser responsiveness. We will also consume less memory in browser process. So, this will be positive change. ====== java/lang/StringValue java/lang/AssertionStatusDirectives java/lang/ProcessEnvironment java/lang/ProcessEnvironment$NameComparator java/lang/ProcessEnvironment$EntryComparator java/lang/ProcessEnvironment$CheckedEntrySet java/lang/ProcessEnvironment$CheckedEntrySet$1 java/lang/ProcessEnvironment$CheckedEntry java/util/TreeMap$Entry java/nio/DirectIntBufferU sun/nio/ch/FileLockImpl java/nio/channels/FileLock sun/nio/ch/FileChannelImpl$SharedFileLockTable sun/nio/ch/FileChannelImpl$FileLockTable sun/nio/ch/FileKey sun/nio/ch/FileChannelImpl$FileLockReference sun/nio/ch/FileChannelImpl$1 sun/nio/ch/FileChannelImpl$FileLockTable$Releaser sun/nio/cs/ISO_8859_1 sun/nio/cs/ISO_8859_1$Encoder sun/nio/cs/ISO_8859_1$Decoder sun/net/util/URLUtil java/net/PasswordAuthentication java/lang/ProcessBuilder java/lang/ProcessImpl java/lang/Process java/lang/ProcessImpl$1 java/nio/FloatBuffer java/nio/DoubleBuffer sun/rmi/transport/proxy/RMIMasterSocketFactory java/rmi/server/RMISocketFactory java/rmi/server/RMIClientSocketFactory java/rmi/server/RMIServerSocketFactory java/rmi/server/LogStream sun/rmi/runtime/Log sun/rmi/runtime/Log$LoggerLogFactory sun/rmi/runtime/Log$LogFactory java/lang/ApplicationShutdownHooks$1 sun/rmi/runtime/Log$LoggerLog sun/rmi/runtime/Log$LoggerLog$1 sun/rmi/runtime/Log$InternalStreamHandler java/util/logging/StreamHandler java/util/logging/SimpleFormatter java/util/logging/Formatter java/util/logging/ErrorManager sun/security/action/GetLongAction sun/rmi/transport/proxy/RMIDirectSocketFactory sun/rmi/transport/proxy/RMIHttpToPortSocketFactory sun/rmi/transport/proxy/RMIHttpToCGISocketFactory

EVALUATION Find out which classes are missing and add them to classes.jsa.