Skip to content

Instantly share code, notes, and snippets.

@jbosboom
Last active June 14, 2019 04:49
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbosboom/86b7c24825b0d40121fa to your computer and use it in GitHub Desktop.
Save jbosboom/86b7c24825b0d40121fa to your computer and use it in GitHub Desktop.
ASM constant pool sorter
/***
* Copyright (c) 2015 Jeffrey Bosboom
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.objectweb.asm;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
/**
* Sorts the constant pool most-used-first to minimize the number of ldc_w
* instructions (and thus the class file size). Edit sortItems to implement a
* different sort order.
* <p/>
* Example usage:
* <p><blockquote><pre>
* byte[] inputBytes = ...;
* ClassReader cr = new ClassReader(inputBytes);
* ConstantPoolSortingClassWriter cw = new ConstantPoolSortingClassWriter(0);
* ConstantHistogrammer ch = new ConstantHistogrammer(cw);
* ClassVisitor s = new SomeOtherClassVisitor(ch);
* cr.accept(s, 0);
* byte[] outputBytes = cw.toByteArray();
* </pre></blockquote></p>
* @author Jeffrey Bosboom
* @see <a href="http://stackoverflow.com/q/29079192/3614835">How can I control the order of constant pool entries using ASM?</a> on Stack Overflow
*/
public class ConstantPoolSortingClassWriter extends ClassWriter {
private final int flags;
Map<Item, Integer> constantHistogram; //initialized by ConstantHistogrammer
public ConstantPoolSortingClassWriter(int flags) {
super(flags);
this.flags = flags;
}
@Override
public byte[] toByteArray() {
byte[] bytes = super.toByteArray();
List<Item> cst = new ArrayList<>();
for (Item i : items)
for (Item j = i; j != null; j = j.next) {
//exclude ASM's internal bookkeeping
if (j.type == TYPE_NORMAL || j.type == TYPE_UNINIT ||
j.type == TYPE_MERGED || j.type == BSM)
continue;
if (j.type == CLASS)
j.intVal = 0; //for ASM's InnerClesses tracking
cst.add(j);
}
sortItems(cst);
ClassWriter target = new ClassWriter(flags);
//ClassWriter.put is private, so we have to do the insert manually
//we don't bother resizing the hashtable
for (int i = 0; i < cst.size(); ++i) {
Item item = cst.get(i);
item.index = target.index++;
if (item.type == LONG || item.type == DOUBLE)
target.index++;
int hash = item.hashCode % target.items.length;
item.next = target.items[hash];
target.items[hash] = item;
}
//because we didn't call newFooItem, we need to manually write pool bytes
//we can call newFoo to find existing items, though
for (Item i : cst) {
if (i.type == UTF8)
target.pool.putByte(UTF8).putUTF8(i.strVal1);
if (i.type == CLASS || i.type == MTYPE || i.type == STR)
target.pool.putByte(i.type).putShort(target.newUTF8(i.strVal1));
if (i.type == IMETH || i.type == METH || i.type == FIELD)
target.pool.putByte(i.type).putShort(target.newClass(i.strVal1)).putShort(target.newNameType(i.strVal2, i.strVal3));
if (i.type == INT || i.type == FLOAT)
target.pool.putByte(i.type).putInt(i.intVal);
if (i.type == LONG || i.type == DOUBLE)
target.pool.putByte(i.type).putLong(i.longVal);
if (i.type == NAME_TYPE)
target.pool.putByte(i.type).putShort(target.newUTF8(i.strVal1)).putShort(target.newUTF8(i.strVal2));
if (i.type >= HANDLE_BASE && i.type < TYPE_NORMAL) {
int tag = i.type - HANDLE_BASE;
if (tag <= Opcodes.H_PUTSTATIC)
target.pool.putByte(HANDLE).putByte(tag).putShort(target.newField(i.strVal1, i.strVal2, i.strVal3));
else
target.pool.putByte(HANDLE).putByte(tag).putShort(target.newMethod(i.strVal1, i.strVal2, i.strVal3, tag == Opcodes.H_INVOKEINTERFACE));
}
if (i.type == INDY)
target.pool.putByte(INDY).putShort((int)i.longVal).putShort(target.newNameType(i.strVal1, i.strVal2));
}
//parse and rewrite with the new ClassWriter, constants presorted
ClassReader r = new ClassReader(bytes);
r.accept(target, 0);
return target.toByteArray();
}
private void sortItems(List<Item> items) {
items.forEach(i -> constantHistogram.putIfAbsent(i, 0));
//constants appearing more often come first, so we use as few ldc_w as possible
Collections.sort(items, Comparator.comparing(constantHistogram::get).reversed());
}
}
/***
* Copyright (c) 2015 Jeffrey Bosboom
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holders nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.objectweb.asm;
import java.util.HashMap;
import java.util.Map;
/**
* Counts uses of 1-entry (ldc-loadable) constants.
* @author Jeffrey Bosboom
*/
public final class ConstantHistogrammer extends ClassVisitor {
private final ConstantPoolSortingClassWriter cw;
private final Map<Item, Integer> constantHistogram = new HashMap<>();
public ConstantHistogrammer(ConstantPoolSortingClassWriter cw) {
super(Opcodes.ASM5, cw);
this.cw = cw;
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
return new CollectLDC(super.visitMethod(access, name, desc, signature, exceptions));
}
@Override
public void visitEnd() {
cw.constantHistogram = constantHistogram;
super.visitEnd();
}
private final class CollectLDC extends MethodVisitor {
private CollectLDC(MethodVisitor mv) {
super(Opcodes.ASM5, mv);
}
@Override
public void visitLdcInsn(Object cst) {
//we only care about things ldc can load
if (cst instanceof Integer || cst instanceof Float || cst instanceof String ||
cst instanceof Type || cst instanceof Handle)
constantHistogram.merge(cw.newConstItem(cst), 1, Integer::sum);
super.visitLdcInsn(cst);
}
}
}
1033 sun/security/krb5/KrbPriv
472 com/sun/org/apache/xpath/internal/axes/NodeSequence
390 java/io/FileNotFoundException
352 com/sun/xml/internal/ws/api/pipe/helper/PipeAdapter$1TubeAdapter
229 javax/net/ssl/StandardConstants
200 java/nio/charset/StandardCharsets
198 com/sun/xml/internal/ws/policy/privateutil/PolicyUtils
197 com/sun/org/apache/xml/internal/serializer/Method
191 com/sun/xml/internal/bind/v2/WellKnownNamespace
188 java/util/Comparators
186 com/sun/org/glassfish/external/amx/AMX
174 javax/xml/transform/OutputKeys
170 java/util/Objects
170 javax/xml/XMLConstants
165 com/sun/xml/internal/ws/encoding/policy/EncodingConstants
161 com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory
161 java/time/temporal/IsoFields
161 java/time/temporal/JulianFields
159 sun/nio/ch/sctp/MessageInfoImpl
154 com/sun/xml/internal/ws/policy/PolicyConstants
152 com/sun/xml/internal/ws/api/policy/ModelGenerator
151 com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory
150 com/sun/org/apache/xpath/internal/objects/XStringForChars
150 com/sun/xml/internal/org/jvnet/mimepull/PropUtil
149 com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeUtility
148 com/sun/org/glassfish/external/probe/provider/StatsProviderManager
147 com/sun/xml/internal/fastinfoset/DecoderStateTables
146 com/sun/xml/internal/messaging/saaj/packaging/mime/util/ASCIIUtility
144 javax/xml/datatype/DatatypeConstants
142 com/sun/org/apache/xml/internal/serializer/SerializerFactory
141 sun/net/ftp/FtpDirEntry
140 com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil
139 com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory
139 com/sun/xml/internal/ws/config/metro/util/ParserUtil
138 com/sun/org/glassfish/gmbal/ManagedObjectManagerFactory
138 com/sun/xml/internal/bind/v2/runtime/property/Utils
137 com/sun/xml/internal/bind/v2/runtime/reflect/Utils
137 sun/instrument/InstrumentationImpl
135 com/sun/xml/internal/ws/streaming/XMLStreamReaderUtil
135 com/sun/xml/internal/ws/streaming/XMLStreamWriterUtil
134 java/lang/invoke/InvokeDynamic
134 javax/xml/xpath/XPathConstants
134 sun/invoke/empty/Empty
132 com/sun/org/apache/xerces/internal/impl/Constants
132 com/sun/xml/internal/bind/v2/model/impl/Utils
131 com/sun/xml/internal/bind/v2/model/util/ArrayInfoUtil
131 com/sun/xml/internal/ws/commons/xmlutil/Converter
130 com/sun/activation/registries/LogSupport
130 com/sun/xml/internal/org/jvnet/mimepull/ASCIIUtility
129 com/sun/xml/internal/bind/v2/runtime/Utils
129 com/sun/xml/internal/org/jvnet/mimepull/MimeUtility
129 java/util/stream/Streams
127 com/sun/xml/internal/bind/v2/bytecode/ClassTailor
126 com/sun/org/apache/xalan/internal/lib/Extensions
126 com/sun/xml/internal/ws/policy/PolicyMapUtil
124 com/sun/xml/internal/txw2/output/ResultFactory
124 java/lang/Class
123 com/sun/xml/internal/ws/spi/db/Utils
122 com/sun/xml/internal/bind/api/Utils
122 com/sun/xml/internal/ws/api/message/Messages
122 com/sun/xml/internal/ws/model/Utils
121 com/sun/xml/internal/bind/v2/schemagen/Util
121 com/sun/xml/internal/ws/api/message/Headers
120 com/sun/org/glassfish/external/amx/AMXUtil
120 javax/swing/SwingUtilities
119 com/sun/xml/internal/ws/util/ASCIIUtility
118 org/xml/sax/helpers/XMLReaderFactory
115 org/xml/sax/helpers/ParserFactory
114 javax/activation/SecuritySupport
114 javax/xml/bind/DatatypeConverter
108 com/sun/xml/internal/bind/Util
107 com/sun/xml/internal/txw2/TXW
105 java/util/stream/Nodes
97 com/sun/jmx/defaults/ServiceName
97 com/sun/jmx/snmp/ServiceName
97 com/sun/management/jmx/ServiceName
97 com/sun/org/apache/xml/internal/security/utils/Constants
97 com/sun/org/apache/xml/internal/security/utils/EncryptionConstants
97 java/util/LocaleISOData
97 javax/xml/bind/JAXB
97 sun/util/locale/provider/CollationRules
93 com/sun/corba/se/spi/logging/CORBALogDomains
93 java/awt/dnd/DnDConstants
93 java/sql/Types
93 java/util/ArrayPrefixHelpers
93 java/util/FormattableFlags
93 java/util/zip/ZipConstants64
93 sun/net/idn/UCharacterEnums
93 sun/nio/fs/WindowsConstants
90 com/sun/corba/se/impl/dynamicany/DynValueCommonImpl
81 com/sun/corba/se/impl/dynamicany/DynStructImpl
81 com/sun/corba/se/impl/dynamicany/DynValueImpl
74 com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList
73 com/sun/corba/se/impl/dynamicany/DynAnyFactoryImpl
72 com/sun/beans/finder/ClassFinder
72 com/sun/org/apache/xml/internal/security/utils/IdResolver
72 com/sun/security/sasl/util/PolicyUtils
72 java/time/temporal/TemporalAdjusters
72 sun/misc/ThreadGroupUtils
72 sun/net/idn/UCharacterDirection
72 sun/reflect/misc/ConstructorUtil
72 sun/reflect/misc/FieldUtil
72 sun/security/krb5/internal/crypto/KeyUsage
72 sun/security/rsa/SunRsaSignEntries
72 sun/util/locale/provider/CalendarDataUtility
68 com/oracle/util/Checksums
68 java/lang/ClassLoaderHelper
68 java/lang/reflect/Array
68 java/text/Normalizer
68 java/util/DualPivotQuicksort
68 sun/nio/ch/IOStatus
68 sun/text/Normalizer
66 com/sun/corba/se/impl/ior/EncapsulationUtility
66 com/sun/jmx/defaults/JmxProperties
66 com/sun/xml/internal/ws/api/pipe/Stubs
66 java/time/temporal/TemporalQueries
66 sun/awt/AWTAccessor
66 sun/io/Win32ErrorMode
66 sun/swing/SwingAccessor
65 com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList
65 com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList
63 com/sun/awt/AWTUtilities
63 com/sun/awt/SecurityWarning
63 com/sun/media/sound/MidiUtils
63 com/sun/org/apache/xml/internal/security/c14n/helper/C14nHelper
63 sun/corba/OutputStreamFactory
63 sun/util/locale/LocaleUtils
62 com/sun/corba/se/impl/orbutil/concurrent/SyncUtil
62 com/sun/corba/se/impl/orbutil/ORBConstants
62 com/sun/corba/se/spi/presentation/rmi/StubAdapter
62 com/sun/java/util/jar/pack/Constants
62 java/lang/Void
62 java/util/stream/Tripwire
62 java/util/Tripwire
62 sun/misc/DoubleConsts
62 sun/misc/FloatConsts
59 com/sun/corba/se/impl/orb/DataCollectorFactory
59 com/sun/corba/se/impl/orb/ParserActionFactory
59 com/sun/corba/se/impl/orbutil/ObjectUtility
59 com/sun/corba/se/spi/orb/ORBVersionFactory
59 com/sun/corba/se/spi/orbutil/closure/ClosureFactory
59 com/sun/corba/se/spi/orbutil/proxy/DelegateInvocationHandlerImpl
59 com/sun/image/codec/jpeg/JPEGCodec
59 java/rmi/registry/LocateRegistry
59 java/util/stream/DistinctOps
59 java/util/stream/ForEachOps
59 java/util/stream/MatchOps
59 java/util/stream/ReduceOps
59 java/util/stream/SortedOps
59 java/util/stream/StreamSupport
59 javax/annotation/processing/Completions
59 sun/management/ManagementFactory
59 sun/nio/ch/Reflect
59 sun/nio/ch/SocketOptionRegistry
59 sun/nio/fs/Reflect
58 com/sun/corba/se/impl/dynamicany/DynAnyBasicImpl
58 com/sun/corba/se/impl/dynamicany/DynAnyCollectionImpl
58 com/sun/corba/se/impl/dynamicany/DynAnyComplexImpl
58 com/sun/corba/se/impl/dynamicany/DynAnyConstructedImpl
58 com/sun/corba/se/impl/dynamicany/DynArrayImpl
58 com/sun/corba/se/impl/dynamicany/DynEnumImpl
58 com/sun/corba/se/impl/dynamicany/DynFixedImpl
58 com/sun/corba/se/impl/dynamicany/DynSequenceImpl
58 com/sun/corba/se/impl/dynamicany/DynUnionImpl
58 com/sun/corba/se/impl/dynamicany/DynValueBoxImpl
57 com/sun/beans/finder/PrimitiveTypeMap
57 com/sun/beans/finder/PrimitiveWrapperMap
57 com/sun/jndi/ldap/sasl/LdapSasl
57 com/sun/management/jmx/JMProperties
57 com/sun/media/sound/JSSecurityManager
57 com/sun/media/sound/Platform
57 sun/java2d/opengl/OGLUtilities
57 sun/management/jdp/JdpController
57 sun/security/jgss/krb5/Krb5Util
57 sun/security/krb5/internal/crypto/Aes128
57 sun/security/krb5/internal/crypto/Aes256
57 sun/security/krb5/internal/crypto/ArcFourHmac
57 sun/security/smartcardio/PCSC
57 sun/util/locale/provider/JRELocaleConstants
56 javax/print/StreamPrintService
53 com/oracle/net/Sdp
53 com/sun/corba/se/impl/encoding/OSFCodeSetRegistry
53 com/sun/corba/se/impl/orbutil/ORBUtility
53 com/sun/corba/se/spi/orb/OperationFactory
53 com/sun/nio/sctp/SctpStandardSocketOptions
53 java/net/StandardSocketOptions
53 java/nio/file/CopyMoveHelper
53 java/nio/file/StandardWatchEventKinds
53 jdk/net/ExtendedSocketOptions
53 sun/font/ScriptRunData
53 sun/misc/GC
53 sun/nio/fs/Globs
53 sun/nio/fs/WindowsSecurity
53 sun/security/provider/certpath/PKIX
52 com/sun/beans/finder/FieldFinder
52 com/sun/jmx/mbeanserver/Introspector
52 com/sun/jmx/snmp/defaults/DefaultPaths
52 com/sun/jmx/snmp/defaults/SnmpProperties
52 com/sun/jndi/ldap/LdapPoolManager
52 com/sun/jndi/ldap/ServiceLocator
52 com/sun/jndi/toolkit/url/UrlUtil
52 com/sun/media/sound/JDK13Services
52 com/sun/media/sound/Printer
52 com/sun/media/sound/Toolkit
52 com/sun/naming/internal/ResourceManager
52 com/sun/net/ssl/SSLSecurity
52 com/sun/org/apache/xml/internal/security/algorithms/ClassLoaderUtils
52 com/sun/org/apache/xml/internal/security/keys/KeyUtils
52 com/sun/org/apache/xml/internal/security/transforms/ClassLoaderUtils
52 com/sun/org/apache/xml/internal/security/utils/Base64
52 com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils
52 com/sun/org/apache/xml/internal/security/utils/I18n
52 com/sun/org/apache/xml/internal/security/utils/JavaUtils
52 com/sun/org/apache/xml/internal/security/utils/XMLUtils
52 java/awt/MouseInfo
52 java/lang/System
52 java/nio/file/FileSystems
52 java/security/Security
52 java/util/Collections
52 javax/management/MBeanServerFactory
52 javax/management/remote/JMXConnectorFactory
52 javax/management/remote/JMXConnectorServerFactory
52 javax/print/attribute/AttributeSetUtilities
52 javax/security/sasl/Sasl
52 javax/sound/midi/MidiSystem
52 javax/sound/sampled/AudioSystem
52 javax/swing/BorderFactory
52 jdk/management/resource/internal/ResourceNatives
52 sun/awt/OSInfo
52 sun/java2d/loops/GraphicsPrimitiveMgr
52 sun/management/jmxremote/ConnectorBootstrap
52 sun/nio/fs/WindowsFileCopy
52 sun/nio/fs/WindowsLinkSupport
52 sun/nio/fs/WindowsUriSupport
52 sun/reflect/misc/ReflectUtil
52 sun/rmi/server/Util
52 sun/security/jca/GetInstance
52 sun/security/jca/JCAUtil
52 sun/security/jca/Providers
52 sun/security/jgss/krb5/SubjectComber
52 sun/security/krb5/Confounder
52 sun/security/krb5/internal/crypto/Des3
52 sun/security/krb5/KrbServiceLocator
52 sun/security/provider/ByteArrayAccess
52 sun/security/provider/ParameterCache
52 sun/security/provider/SunEntries
52 sun/security/rsa/RSACore
52 sun/security/tools/KeyStoreUtil
52 sun/security/util/SecurityConstants
52 sun/security/validator/KeyStores
52 sun/security/x509/OIDMap
52 sun/util/calendar/ZoneInfoFile
52 sun/util/locale/provider/TimeZoneNameUtility
48 com/sun/corba/se/impl/naming/cosnaming/NamingUtils
48 com/sun/corba/se/spi/copyobject/CopyobjectDefaults
48 com/sun/corba/se/spi/ior/iiop/IIOPFactories
48 com/sun/corba/se/spi/ior/IORFactories
48 com/sun/corba/se/spi/orbutil/fsm/StateEngineFactory
48 com/sun/corba/se/spi/presentation/rmi/PresentationDefaults
48 com/sun/corba/se/spi/protocol/RequestDispatcherDefault
48 com/sun/corba/se/spi/transport/TransportDefault
48 com/sun/java/util/jar/pack/ConstantPool
48 com/sun/java/util/jar/pack/Utils
48 com/sun/jmx/remote/internal/IIOPHelper
48 com/sun/jndi/cosnaming/ExceptionMapper
48 com/sun/jndi/ldap/Obj
48 java/awt/dnd/SerializationTester
48 java/io/DeleteOnExitHook
48 java/lang/ApplicationShutdownHooks
48 java/lang/Compiler
48 java/lang/invoke/MethodHandleNatives
48 java/lang/invoke/MethodHandleProxies
48 java/lang/invoke/MethodHandles
48 java/lang/invoke/MethodHandleStatics
48 java/lang/management/ManagementFactory
48 java/lang/Math
48 java/lang/StrictMath
48 java/lang/StringCoding
48 java/net/IDN
48 java/net/URLEncoder
48 java/nio/Bits
48 java/nio/channels/Channels
48 java/nio/file/attribute/PosixFilePermissions
48 java/nio/file/Files
48 java/nio/file/Paths
48 java/nio/file/TempFileHelper
48 java/rmi/Naming
48 java/rmi/server/RMIClassLoader
48 java/security/AccessController
48 java/util/Arrays
48 java/util/Base64
48 java/util/concurrent/Executors
48 java/util/concurrent/locks/LockSupport
48 java/util/jar/Pack200
48 java/util/Spliterators
48 java/util/stream/Collectors
48 java/util/stream/FindOps
48 java/util/stream/SliceOps
48 javax/imageio/ImageIO
48 javax/lang/model/util/ElementFilter
48 javax/rmi/CORBA/Util
48 javax/swing/colorchooser/ColorChooserComponentFactory
48 jdk/net/Sockets
48 org/jcp/xml/dsig/internal/dom/DOMUtils
48 org/jcp/xml/dsig/internal/dom/Utils
48 sun/awt/ScrollPaneWheelScroller
48 sun/invoke/util/BytecodeDescriptor
48 sun/invoke/util/BytecodeName
48 sun/invoke/util/VerifyAccess
48 sun/invoke/util/VerifyType
48 sun/management/ExtendedPlatformComponent
48 sun/management/ManagementFactoryHelper
48 sun/management/Util
48 sun/misc/FpUtils
48 sun/misc/Service
48 sun/net/ExtendedOptionsImpl
48 sun/net/NetProperties
48 sun/net/sdp/SdpSupport
48 sun/nio/ch/DefaultAsynchronousChannelProvider
48 sun/nio/ch/DefaultSelectorProvider
48 sun/nio/ch/ExtendedSocketOption
48 sun/nio/ch/Invoker
48 sun/nio/ch/IOUtil
48 sun/nio/ch/Net
48 sun/nio/ch/Secrets
48 sun/nio/cs/Surrogate
48 sun/nio/fs/DefaultFileSystemProvider
48 sun/nio/fs/DefaultFileTypeDetector
48 sun/nio/fs/NativeBuffers
48 sun/nio/fs/Util
48 sun/nio/fs/WindowsChannelFactory
48 sun/nio/fs/WindowsNativeDispatcher
48 sun/nio/fs/WindowsPathParser
48 sun/nio/fs/WindowsUserPrincipals
48 sun/print/CustomMediaSizeName
48 sun/print/CustomMediaTray
48 sun/rmi/server/LoaderHandler
48 sun/rmi/transport/DGCClient
48 sun/rmi/transport/proxy/CGIHandler
48 sun/security/provider/certpath/DistributionPointFetcher
48 sun/security/provider/certpath/OCSP
48 sun/security/util/ECUtil
48 sun/security/util/UntrustedCertificates
48 sun/util/locale/LocaleMatcher
48 sun/util/logging/LoggingSupport
47 com/sun/corba/se/impl/protocol/CorbaInvocationInfo
47 java/lang/reflect/Proxy
43 com/sun/corba/se/impl/naming/cosnaming/TransientNameServer
43 com/sun/corba/se/impl/orbutil/CacheTable
43 java/sql/DriverManager
43 sun/rmi/transport/ObjectTable
27804
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment