Le 30/07/2010 21:59, Mandy Chung a écrit :
Osvaldo Doederlein wrote:
I wonder if these numbers have some variation per platform?

Yes, there are some platform-dependent classes and so some loaded
classes are different on different platform.

For me (on
Windows; 32-bit JDKs), the results of this test (java -verbose:class |
grep Loaded | wc -l) are:

1.5.0_22: 239
1.6.0_21: 274
1.7.0-ea-b103: 403

I ran the helloworld. The number of loaded classes running different jdk
versions are fairly close.  What test case did you use?

$ grep Loaded hw.verbose.jdk5u22 | wc -l
303

$ grep Loaded hw.verbose.jdk6u21 | wc -l
323

$ grep Loaded hw.verbose.jdk7 | wc -l
329

There is a big diff (at least on linux) if you just try to print the help of the VM,
i.e pass no argument.

jdk1.6.0_21: 274 classes
jdk1.7.0b103: 364 classes

I join the diff.

Some classes of java.text.*, java.util.ResourceBundle* and
some classes related to locale and currency are loaded eagerly.

Rémi



The diff from 1.5 to 1.6 is not bad, but JDK7 seems right now to be a
heavy regression... FWIW for such a simple test. For one thing, these
core-boot classes all come off the CDS file so their classloading
effort is relatively very small, and the delta will certainly be much
smaller for even the smallest real-world app.
Right. -verbose:class prints out all loaded classes regardless of coming from CDS archive or not. The number of loaded classes is one metric to the startup while class loading time + clinit time are other important metrics. So these loaded classes has small impact
to the startup time especially with CDS is enabled.

Mandy

A+
Osvaldo

2010/7/30 Mandy Chung <[email protected]>:
Yongqiang Yang wrote:
hi,

I just type command "java" under openjdk1.6, then the jvm will load
308 classes, including             java/launcher/LauncherHelp,
           java/util/ResourceBundle,
           java/util/Currency,
           java/util/Locale,
           java/net/URL

       When I use jdk1.5, the jvm just load about 180 classes, not
including the classes above.

       Could someone figure out something wrong?
New features and bug fixes in a new release could lead to more classes get
loaded at startup.  We have done some work to lazily load classes if
appropriate (see CR 6798873: Reduce the number of classes loaded and class
dependencies).

Mandy




--- /tmp/jdk6.txt       2010-07-31 22:12:20.000000000 +0200
+++ /tmp/jdk7.txt       2010-07-31 22:12:33.000000000 +0200
@@ -3,12 +3,16 @@
 java.io.BufferedReader
 java.io.BufferedWriter
 java.io.Closeable
+java.io.DataInput
+java.io.DataInputStream
 java.io.ExpiringCache
 java.io.ExpiringCache$1
 java.io.ExpiringCache$Entry
 java.io.File
 java.io.FileDescriptor
+java.io.FileDescriptor$1
 java.io.FileInputStream
+java.io.FileNotFoundException
 java.io.FileOutputStream
 java.io.FileReader
 java.io.FileSystem
@@ -18,7 +22,6 @@
 java.io.InputStream
 java.io.InputStreamReader
 java.io.IOException
-java.io.ObjectStreamClass
 java.io.ObjectStreamField
 java.io.OutputStream
 java.io.OutputStreamWriter
@@ -31,33 +34,36 @@
 java.lang.Appendable
 java.lang.ArithmeticException
 java.lang.ArrayStoreException
-java.lang.AssertionStatusDirectives
+java.lang.AutoCloseable
 java.lang.Boolean
 java.lang.Byte
 java.lang.Character
+java.lang.CharacterData
 java.lang.CharacterDataLatin1
 java.lang.CharSequence
 java.lang.Class
 java.lang.Class$1
 java.lang.Class$3
 java.lang.ClassCastException
-java.lang.ClassFormatError
 java.lang.ClassLoader
+java.lang.ClassLoader$2
 java.lang.ClassLoader$3
 java.lang.ClassLoader$NativeLibrary
+java.lang.ClassLoader$ParallelLoaders
 java.lang.ClassNotFoundException
 java.lang.Cloneable
 java.lang.Comparable
 java.lang.Compiler
 java.lang.Compiler$1
 java.lang.Double
+java.lang.Enum
 java.lang.Error
 java.lang.Exception
 java.lang.Float
-java.lang.IllegalArgumentException
 java.lang.IllegalMonitorStateException
 java.lang.IncompatibleClassChangeError
 java.lang.Integer
+java.lang.Integer$IntegerCache
 java.lang.Iterable
 java.lang.LinkageError
 java.lang.Long
@@ -68,7 +74,6 @@
 java.lang.Number
 java.lang.Object
 java.lang.OutOfMemoryError
-java.lang.Package
 java.lang.Readable
 java.lang.ref.Finalizer
 java.lang.ref.Finalizer$FinalizerThread
@@ -79,6 +84,7 @@
 java.lang.reflect.Constructor
 java.lang.reflect.Field
 java.lang.reflect.GenericDeclaration
+java.lang.ReflectiveOperationException
 java.lang.reflect.Member
 java.lang.reflect.Method
 java.lang.reflect.Modifier
@@ -110,7 +116,6 @@
 java.lang.StringCoding
 java.lang.StringCoding$StringDecoder
 java.lang.StringCoding$StringEncoder
-java.lang.StringValue
 java.lang.System
 java.lang.System$2
 java.lang.SystemClassLoaderAction
@@ -125,14 +130,19 @@
 java.lang.Thread$UncaughtExceptionHandler
 java.lang.Throwable
 java.lang.VirtualMachineError
-java.lang.Void
+java.math.RoundingMode
 java.net.Parts
 java.net.URL
 java.net.URLClassLoader
+java.net.URLClassLoader$1
+java.net.URLClassLoader$2
+java.net.URLClassLoader$3
+java.net.URLClassLoader$3$1
 java.net.URLClassLoader$7
 java.net.URLStreamHandler
 java.net.URLStreamHandlerFactory
 java.nio.Bits
+java.nio.Bits$1
 java.nio.Buffer
 java.nio.ByteBuffer
 java.nio.ByteOrder
@@ -155,25 +165,49 @@
 java.security.CodeSource
 java.security.Guard
 java.security.Permission
-java.security.PermissionCollection
+java.security.Principal
 java.security.PrivilegedAction
+java.security.PrivilegedActionException
 java.security.PrivilegedExceptionAction
 java.security.ProtectionDomain
+java.security.ProtectionDomain$2
+java.security.ProtectionDomain$Key
 java.security.SecureClassLoader
+java.text.AttributedCharacterIterator$Attribute
+java.text.DecimalFormat
+java.text.DecimalFormatSymbols
+java.text.DigitList
+java.text.FieldPosition
+java.text.FieldPosition$Delegate
+java.text.Format
+java.text.Format$Field
+java.text.Format$FieldDelegate
+java.text.MessageFormat
+java.text.MessageFormat$Field
+java.text.NumberFormat
+java.text.NumberFormat$Field
+java.text.spi.DecimalFormatSymbolsProvider
+java.text.spi.NumberFormatProvider
 java.util.AbstractCollection
 java.util.AbstractList
 java.util.AbstractMap
 java.util.AbstractSet
 java.util.ArrayList
+java.util.ArrayList$Itr
 java.util.Arrays
+java.util.Arrays$ArrayList
 java.util.BitSet
 java.util.Collection
 java.util.Collections
 java.util.Collections$EmptyList
 java.util.Collections$EmptyMap
 java.util.Collections$EmptySet
-java.util.Collections$ReverseComparator
-java.util.Collections$SynchronizedMap
+java.util.Collections$SetFromMap
+java.util.Collections$SynchronizedCollection
+java.util.Collections$SynchronizedSet
+java.util.Collections$UnmodifiableCollection
+java.util.Collections$UnmodifiableList
+java.util.Collections$UnmodifiableRandomAccessList
 java.util.Comparator
 java.util.concurrent.atomic.AtomicInteger
 java.util.concurrent.atomic.AtomicReferenceFieldUpdater
@@ -189,36 +223,69 @@
 java.util.concurrent.locks.ReentrantLock
 java.util.concurrent.locks.ReentrantLock$NonfairSync
 java.util.concurrent.locks.ReentrantLock$Sync
+java.util.Currency
+java.util.Currency$1
+java.util.Date
 java.util.Dictionary
 java.util.Enumeration
 java.util.HashMap
 java.util.HashMap$Entry
+java.util.HashMap$EntryIterator
+java.util.HashMap$EntrySet
+java.util.HashMap$HashIterator
 java.util.HashSet
 java.util.Hashtable
-java.util.Hashtable$EmptyEnumerator
-java.util.Hashtable$EmptyIterator
 java.util.Hashtable$Entry
 java.util.Iterator
 java.util.LinkedHashMap
 java.util.LinkedHashMap$Entry
+java.util.LinkedHashMap$EntryIterator
+java.util.LinkedHashMap$LinkedHashIterator
+java.util.LinkedHashSet
 java.util.List
+java.util.ListResourceBundle
 java.util.Locale
 java.util.Map
 java.util.Map$Entry
 java.util.Properties
 java.util.RandomAccess
+java.util.ResourceBundle
+java.util.ResourceBundle$1
+java.util.ResourceBundle$BundleReference
+java.util.ResourceBundle$CacheKey
+java.util.ResourceBundle$CacheKeyReference
+java.util.ResourceBundle$Control
+java.util.ResourceBundle$Control$1
+java.util.ResourceBundle$LoaderReference
+java.util.ResourceBundle$RBClassLoader
+java.util.ResourceBundle$RBClassLoader$1
+java.util.ResourceBundle$SingleFormatControl
+java.util.ServiceLoader
+java.util.ServiceLoader$1
+java.util.ServiceLoader$LazyIterator
 java.util.Set
+java.util.spi.CurrencyNameProvider
+java.util.spi.LocaleServiceProvider
 java.util.Stack
 java.util.StringTokenizer
 java.util.Vector
-sun.jkernel.DownloadManager
-sun.jkernel.DownloadManager$1
-sun.jkernel.DownloadManager$2
-sun.misc.AtomicLong
-sun.misc.AtomicLongCSImpl
+java.util.WeakHashMap
+java.util.WeakHashMap$Entry
+java.util.WeakHashMap$KeySet
+sun.launcher.LauncherHelper
+sun.launcher.resources.launcher
+sun.launcher.resources.launcher_fr
+sun.misc.BootClassLoaderHook
+sun.misc.CompoundEnumeration
+sun.misc.FileURLMapper
+sun.misc.JavaIOFileDescriptorAccess
 sun.misc.JavaLangAccess
 sun.misc.JavaNetAccess
+sun.misc.JavaNioAccess
+sun.misc.JavaSecurityProtectionDomainAccess
 sun.misc.Launcher
+sun.misc.Launcher$1
+sun.misc.Launcher$2
 sun.misc.Launcher$AppClassLoader
 sun.misc.Launcher$AppClassLoader$1
 sun.misc.Launcher$ExtClassLoader
@@ -230,14 +297,23 @@
 sun.misc.SharedSecrets
 sun.misc.Signal
 sun.misc.SignalHandler
-sun.misc.SoftCache
 sun.misc.Unsafe
 sun.misc.URLClassPath
+sun.misc.URLClassPath$1
+sun.misc.URLClassPath$2
+sun.misc.URLClassPath$3
+sun.misc.URLClassPath$FileLoader
+sun.misc.URLClassPath$JarLoader
+sun.misc.URLClassPath$JarLoader$1
+sun.misc.URLClassPath$Loader
 sun.misc.Version
 sun.misc.VM
+sun.net.util.URLUtil
 sun.net.www.ParseUtil
 sun.net.www.protocol.file.Handler
 sun.net.www.protocol.jar.Handler
+sun.nio.cs.ArrayDecoder
+sun.nio.cs.ArrayEncoder
 sun.nio.cs.FastCharsetProvider
 sun.nio.cs.HistoricallyNamedCharset
 sun.nio.cs.StandardCharsets
@@ -271,4 +347,18 @@
 sun.reflect.UnsafeStaticFieldAccessorImpl
 sun.security.action.GetPropertyAction
 sun.security.util.Debug
+sun.text.resources.FormatData
+sun.text.resources.FormatData_fr
+sun.text.resources.FormatData_fr_FR
+sun.util.LocaleDataMetaInfo
+sun.util.LocaleServiceProviderPool
+sun.util.LocaleServiceProviderPool$1
 sun.util.PreHashedMap
+sun.util.resources.CurrencyNames
+sun.util.resources.CurrencyNames_fr
+sun.util.resources.CurrencyNames_fr_FR
+sun.util.resources.LocaleData
+sun.util.resources.LocaleData$1
+sun.util.resources.LocaleData$LocaleDataResourceBundleControl
+sun.util.resources.LocaleNamesBundle
+sun.util.resources.OpenListResourceBundle

Reply via email to