RFR [8u60]: 8081590: The CDS classlist needs to be updated for 8u60

Jiangli Zhou jiangli.zhou at oracle.com
Fri Jun 12 16:54:50 UTC 2015


Hi Claes,

On Jun 12, 2015, at 3:43 AM, Claes Redestad <claes.redestad at oracle.com> wrote:

> Hi,
> 
> I've been trying to find out why the previous refresh sorted classes in package order. This seems to
> run counter to the intent of the classlist as a source for the jarreordering optimization and the only
> documentation I've been able to find in the JDK sources for classlist generation suggests concatenating
> in the order of class loading is the original intent[1]. Since we see better behavior in general with the
> refreshed classlists, I'd prefer not sorting in package order, but I still think a more thorough refresh of
> the documentation and tools for JDK9 is in order (I've already filed RFEs to cover some of this).

I agree with that.

> 
> Anyhow, below I've attached a diff of current vs refreshed classlist for linux after sorting the suggested
> class list in package order.
> 
> In summary, most of the added classes seem to be related to j.l.invoke and other Lambda-related
> classes, including asm. This seems reasonable to me due to the uptake of lambdas, streams etc in the
> JDK since 8-b117. Also numerous changes in client-libs, anonymous classes that have shifted around
> (adding in or removing anonymous classes in source will shift things up or down).

One thing we need to make sure is to not include dynamically generated Lambda classes in the list. My quick scan of the following diff didn’t find any. So the change looks ok to me.

Thanks,
Jiangli

> 
> Ioi: output from -Xshare:dump indicate the classes.jsa generated is about 590Kb larger on both
> Windows and Linux.
> 
> 0a1,6
> > com/sun/beans/util/Cache
> > com/sun/beans/util/Cache$CacheEntry
> > com/sun/beans/util/Cache$Kind
> > com/sun/beans/util/Cache$Kind$1
> > com/sun/beans/util/Cache$Kind$2
> > com/sun/beans/util/Cache$Kind$3
> 66d71
> < java/awt/FontFormatException
> 77d81
> < java/awt/GraphicsEnvironment$1
> 105a110
> > java/awt/Polygon
> 145a151
> > java/awt/datatransfer/SystemFlavorMap$SoftCache
> 203,204d208
> < java/awt/geom/Line2D
> < java/awt/geom/Line2D$Float
> 361a366
> > java/lang/Byte$ByteCache
> 366d370
> < java/lang/CharacterData00
> 373a378
> > java/lang/Class$MethodArray
> 382a388
> > java/lang/ClassValue
> 383a390,392
> > java/lang/ClassValue$Entry
> > java/lang/ClassValue$Identity
> > java/lang/ClassValue$Version
> 413a423
> > java/lang/NoSuchFieldError
> 440a451
> > java/lang/Short$ShortCache
> 445d455
> < java/lang/StrictMath
> 472,474d481
> < java/lang/UNIXProcess$2
> < java/lang/UNIXProcess$3
> < java/lang/UNIXProcess$4
> 475a483
> > java/lang/UNIXProcess$Platform
> 478,479d485
> < java/lang/UNIXProcess$ProcessReaperThreadFactory
> < java/lang/UNIXProcess$ProcessReaperThreadFactory$1
> 484a491,498
> > java/lang/invoke/AbstractValidatingLambdaMetafactory
> > java/lang/invoke/BoundMethodHandle
> > java/lang/invoke/BoundMethodHandle$Factory
> > java/lang/invoke/BoundMethodHandle$SpeciesData
> > java/lang/invoke/BoundMethodHandle$Species_L
> > java/lang/invoke/BoundMethodHandle$Species_L3
> > java/lang/invoke/BoundMethodHandle$Species_L4
> > java/lang/invoke/BoundMethodHandle$Species_LL
> 486a501
> > java/lang/invoke/DelegatingMethodHandle
> 487a503,512
> > java/lang/invoke/DirectMethodHandle$Accessor
> > java/lang/invoke/DirectMethodHandle$Lazy
> > java/lang/invoke/DirectMethodHandle$Special
> > java/lang/invoke/InfoFromMemberName
> > java/lang/invoke/InnerClassLambdaMetafactory
> > java/lang/invoke/InnerClassLambdaMetafactory$1
> > java/lang/invoke/InnerClassLambdaMetafactory$ForwardingMethodGenerator
> > java/lang/invoke/InvokerBytecodeGenerator
> > java/lang/invoke/InvokerBytecodeGenerator$2
> > java/lang/invoke/InvokerBytecodeGenerator$CpPatch
> 489a515,516
> > java/lang/invoke/LambdaForm$BasicType
> > java/lang/invoke/LambdaForm$Name
> 490a518,522
> > java/lang/invoke/LambdaFormBuffer
> > java/lang/invoke/LambdaFormEditor
> > java/lang/invoke/LambdaFormEditor$Transform
> > java/lang/invoke/LambdaFormEditor$Transform$Kind
> > java/lang/invoke/LambdaMetafactory
> 494a527,535
> > java/lang/invoke/MethodHandleImpl$1
> > java/lang/invoke/MethodHandleImpl$2
> > java/lang/invoke/MethodHandleImpl$3
> > java/lang/invoke/MethodHandleImpl$4
> > java/lang/invoke/MethodHandleImpl$AsVarargsCollector
> > java/lang/invoke/MethodHandleImpl$Intrinsic
> > java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle
> > java/lang/invoke/MethodHandleImpl$Lazy
> > java/lang/invoke/MethodHandleInfo
> 497a539,540
> > java/lang/invoke/MethodHandles
> > java/lang/invoke/MethodHandles$Lookup
> 502a546,547
> > java/lang/invoke/SimpleMethodHandle
> > java/lang/invoke/TypeConvertingMethodAdapter
> 503a549
> > java/lang/invoke/WrongMethodTypeException
> 576a623
> > java/net/NetPermission
> 591a639
> > java/net/SocketOption
> 592a641
> > java/net/SocketPermission
> 658a708
> > java/security/AccessController$1
> 685,686c735,736
> < java/security/ProtectionDomain$1
> < java/security/ProtectionDomain$3
> ---
> > java/security/ProtectionDomain$2
> > java/security/ProtectionDomain$JavaSecurityAccessImpl
> 697a748
> > java/security/SecurityPermission
> 791a843
> > java/util/EnumSet
> 845a898
> > java/util/PropertyPermission
> 849a903,904
> > java/util/RandomAccessSubList
> > java/util/RegularEnumSet
> 866a922,926
> > java/util/Spliterator
> > java/util/Spliterator$OfDouble
> > java/util/Spliterator$OfInt
> > java/util/Spliterator$OfLong
> > java/util/Spliterator$OfPrimitive
> 868a929,930
> > java/util/SubList
> > java/util/SubList$1
> 877d938
> < java/util/Vector$ListItr
> 938a1000,1008
> > java/util/function/BinaryOperator
> > java/util/function/DoubleBinaryOperator
> > java/util/function/Function
> > java/util/function/IntBinaryOperator
> > java/util/function/IntFunction
> > java/util/function/IntToDoubleFunction
> > java/util/function/IntToLongFunction
> > java/util/function/IntUnaryOperator
> > java/util/function/LongBinaryOperator
> 966a1037
> > java/util/logging/Logger$LoggerBundle
> 974a1046,1050
> > java/util/stream/BaseStream
> > java/util/stream/DoubleStream
> > java/util/stream/IntStream
> > java/util/stream/LongStream
> > java/util/stream/Stream
> 996a1073
> > javax/accessibility/AccessibleContext$1
> 1068d1144
> < javax/swing/JComponent$2
> 1143c1219
> < javax/swing/RepaintManager$2
> ---
> > javax/swing/RepaintManager$1
> 1144a1221
> > javax/swing/RepaintManager$4
> 1155a1233
> > javax/swing/SortingFocusTraversalPolicy$1
> 1324a1403,1405
> > javax/swing/plaf/basic/BasicRadioButtonUI$KeyHandler
> > javax/swing/plaf/basic/BasicRadioButtonUI$SelectNextBtn
> > javax/swing/plaf/basic/BasicRadioButtonUI$SelectPreviousBtn
> 1431,1432d1511
> < javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
> < javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
> 1487d1565
> < javax/swing/text/AbstractDocument$InsertStringResult
> 1548a1627
> > javax/swing/text/JTextComponent$4
> 1614a1694,1706
> > jdk/internal/org/objectweb/asm/AnnotationVisitor
> > jdk/internal/org/objectweb/asm/AnnotationWriter
> > jdk/internal/org/objectweb/asm/ByteVector
> > jdk/internal/org/objectweb/asm/ClassVisitor
> > jdk/internal/org/objectweb/asm/ClassWriter
> > jdk/internal/org/objectweb/asm/FieldVisitor
> > jdk/internal/org/objectweb/asm/FieldWriter
> > jdk/internal/org/objectweb/asm/Frame
> > jdk/internal/org/objectweb/asm/Item
> > jdk/internal/org/objectweb/asm/Label
> > jdk/internal/org/objectweb/asm/MethodVisitor
> > jdk/internal/org/objectweb/asm/MethodWriter
> > jdk/internal/org/objectweb/asm/Type
> 1655a1748
> > sun/awt/AWTAccessor$AccessibleContextAccessor
> 1667a1761
> > sun/awt/AWTAccessor$SystemColorAccessor
> 1699d1792
> < sun/awt/LightweightFrame
> 1724a1818,1828
> > sun/awt/X11ComponentPeer
> > sun/awt/X11FontManager
> > sun/awt/X11GraphicsConfig
> > sun/awt/X11GraphicsConfig$X11GCDisposerRecord
> > sun/awt/X11GraphicsDevice
> > sun/awt/X11GraphicsEnvironment
> > sun/awt/X11GraphicsEnvironment$1
> > sun/awt/X11InputMethod
> > sun/awt/X11InputMethodDescriptor
> > sun/awt/XSettings
> > sun/awt/XSettings$Update
> 1770d1873
> < sun/awt/X11/XErrorEvent
> 1775,1776d1877
> < sun/awt/X11/XErrorHandler$XErrorHandlerWithFlag
> < sun/awt/X11/XErrorHandler$XShmAttachHandler
> 1813d1913
> < sun/awt/X11/XToolkit$2$1
> 1816c1916
> < sun/awt/X11/XToolkit$5
> ---
> > sun/awt/X11/XTranslateCoordinates
> 1833,1843d1932
> < sun/awt/X11ComponentPeer
> < sun/awt/X11FontManager
> < sun/awt/X11GraphicsConfig
> < sun/awt/X11GraphicsConfig$X11GCDisposerRecord
> < sun/awt/X11GraphicsDevice
> < sun/awt/X11GraphicsEnvironment
> < sun/awt/X11GraphicsEnvironment$1
> < sun/awt/X11InputMethod
> < sun/awt/X11InputMethodDescriptor
> < sun/awt/XSettings
> < sun/awt/XSettings$Update
> 1849d1937
> < sun/awt/geom/PathConsumer2D
> 1879a1968,1969
> > sun/awt/image/MultiResolutionImage
> > sun/awt/image/MultiResolutionToolkitImage
> 1904a1995
> > sun/awt/image/SurfaceManager$FlushableCacheData
> 1914,1918d2004
> < sun/dc/path/PathConsumer
> < sun/dc/pr/PathDasher
> < sun/dc/pr/PathDasher$1
> < sun/dc/pr/PathStroker
> < sun/dc/pr/PathStroker$1
> 1969c2055
> < sun/font/SunFontManager$11
> ---
> > sun/font/SunFontManager$10
> 1984a2071,2077
> > sun/invoke/empty/Empty
> > sun/invoke/util/BytecodeDescriptor
> > sun/invoke/util/ValueConversions
> > sun/invoke/util/VerifyAccess
> > sun/invoke/util/VerifyType
> > sun/invoke/util/Wrapper
> > sun/invoke/util/Wrapper$Format
> 1990d2082
> < sun/java2d/Disposer$2
> 1999a2092
> > sun/java2d/StateTrackableDelegate$1
> 2000a2094,2096
> > sun/java2d/StateTracker
> > sun/java2d/StateTracker$1
> > sun/java2d/StateTracker$2
> 2007a2104,2105
> > sun/java2d/SurfaceDataProxy
> > sun/java2d/SurfaceDataProxy$1
> 2075d2172
> < sun/java2d/pipe/ShapeSpanIterator
> 2078d2174
> < sun/java2d/pipe/SpanIterator
> 2085a2182,2184
> > sun/java2d/x11/X11PMBlitBgLoops
> > sun/java2d/x11/X11PMBlitLoops
> > sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop
> 2088a2188
> > sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData
> 2089a2190,2192
> > sun/java2d/x11/X11SurfaceDataProxy
> > sun/java2d/x11/X11SurfaceDataProxy$Bitmask
> > sun/java2d/x11/X11SurfaceDataProxy$Opaque
> 2143a2247
> > sun/misc/ThreadGroupUtils
> 2286d2389
> < sun/security/action/GetIntegerAction
> 2319a2423
> > sun/security/util/ByteArrayTagOrder
> 2328a2433
> > sun/security/util/SecurityConstants
> 2334d2438
> < sun/swing/JLightweightFrame
> 2336,2337d2439
> < sun/swing/MenuItemLayoutHelper$ColumnAlignment
> < sun/swing/MenuItemLayoutHelper$LayoutResult
> 2342a2445
> > sun/swing/SwingAccessor$RepaintManagerAccessor
> 2376a2480,2484
> > sun/usagetracker/UsageTrackerClient
> > sun/usagetracker/UsageTrackerClient$1
> > sun/usagetracker/UsageTrackerClient$3
> > sun/usagetracker/UsageTrackerClient$4
> > sun/usagetracker/UsageTrackerClient$UsageTrackerRunnable
> 2454d2561
> < # e4fe875988768cf5
> 
> /Claes
> 
> [1]
> http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/c1947d42537b/make/non-build-utils/sharing/README.txt
> http://hg.openjdk.java.net/jdk9/jdk9/jdk/file/c1947d42537b/make/non-build-utils/src/build/tools/makeclasslist/MakeClasslist.java
> 
> On 2015-06-12 03:58, David Holmes wrote:
>> Hi Claes,
>> 
>> On 12/06/2015 12:08 AM, Claes Redestad wrote:
>>> Hi,
>>> 
>>> classlists have been slowly deteriorating since the last refresh
>>> (https://bugs.openjdk.java.net/browse/JDK-8023041),
>>> contributing to a small but significant degradation in startup and
>>> footprint characteristics.
>>> 
>>> While there are also classlist files for Solaris, Mac and AIX, we cannot
>>> run the same set of applications we run on
>>> 32-bit platforms on non-32-bit platforms (due to an application with a
>>> bundled 32-bit dependency).
>>> 
>>> Rather than generating new classlists using a different set of
>>> applications without ability to verify that it helps, I'd
>>> rather limit this 8u60 refresh to Linux and Windows where we can verify
>>> the benefit and do a more thorough
>>> investigation into modernizing the representative set of applications
>>> for JDK9 and onwards.
>>> 
>>> Webrev: http://cr.openjdk.java.net/~redestad/8081590/webrev.00/
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8081590
>> 
>> As you have sorted the lists differently it's not evident what has been added or removed. Please clarify what the changes actually are.
>> 
>>> I'll need a sponsor to push this to 8u60.
>> 
>> I can sponsor it once completed. Make sure all the CDS tests still pass. (There may be something that looks for a specific class.)
>> 
>> Thanks,
>> David
>> 
>>> 
>>> /Claes
> 



More information about the hotspot-runtime-dev mailing list