前言
问题的上下文如下, 再给定的 flink003 节点上面的 TaskManager 节点对应的 vm old 几乎被占用完了
另外还有一个明显的问题是 fgc 的次数明显异常, ygc 才八千次, fgc 就六千次了 ?
我们这里的主题主要是 探索一下 主要占用 old 的对象都是什么 ?, 以及一个 大致的原因
[root@ecs-flink-003 ~]# jps
6915 WrapperSimpleApp
583516 Main
1240520 TaskManagerRunner
997810 Jps
[root@ecs-flink-003 ~]# jstat -gcutil 1240520
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 59.54 99.43 95.23 89.37 7874 41.102 5832 1268.308 1309.410
[root@ecs-flink-003 ~]# jmap -heap 1240520
Attaching to process ID 1240520, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.60-b23
using thread-local object allocation.
Parallel GC with 13 thread(s)
Heap Configuration:
MinHeapFreeRatio = 0
MaxHeapFreeRatio = 100
MaxHeapSize = 9374269440 (8940.0MB)
NewSize = 3124756480 (2980.0MB)
MaxNewSize = 3124756480 (2980.0MB)
OldSize = 6249512960 (5960.0MB)
NewRatio = 2
SurvivorRatio = 8
MetaspaceSize = 21807104 (20.796875MB)
CompressedClassSpaceSize = 1073741824 (1024.0MB)
MaxMetaspaceSize = 5494538240 (5240.0MB)
G1HeapRegionSize = 0 (0.0MB)
Heap Usage:
PS Young Generation
Eden Space:
capacity = 2886729728 (2753.0MB)
used = 1718836800 (1639.2105102539062MB)
free = 1167892928 (1113.7894897460938MB)
59.54269924641868% used
From Space:
capacity = 19922944 (19.0MB)
used = 0 (0.0MB)
free = 19922944 (19.0MB)
0.0% used
To Space:
capacity = 119013376 (113.5MB)
used = 0 (0.0MB)
free = 119013376 (113.5MB)
0.0% used
PS Old Generation
capacity = 6249512960 (5960.0MB)
used = 6214046888 (5926.176918029785MB)
free = 35466072 (33.823081970214844MB)
99.43249862466082% used
27319 interned Strings occupying 2961728 bytes.
查找占用 old 的对象
jmap histo $pid 列出占用空间对象的 top10
可以看到的是, 整个 heap 9g, 这里 char[] 占用了 5.5g ?
接下来看一下 这都是一些什么字符串
jmap histo $pid 列出占用空间对象的 top10
num #instances #bytes class name
----------------------------------------------
1: 1381831 5460743720 [C
2: 167040 2576855560 [B
3: 1180994 28343856 java.lang.String
4: 87163 28120712 [I
5: 625826 20026432 java.util.HashMap$Node
6: 566321 18122272 java.util.ArrayList$Itr
7: 401111 17644992 [Ljava.lang.Object;
8: 407890 16315600 java.util.TreeMap$Entry
9: 74192 10258376 [Ljava.util.HashMap$Node;
10: 155426 7460448 java.util.HashMap
jmap dump 一下堆空间信息
jhat 分析一下 char[] 的实例, 可以看到 73w 的 char[] 的 oop
获取 top150, 可以看到 前面有 132 个占用空间为 37410664 的字符串[合计 35.6M], 随机抽取一个查看对应的 java.lang.String 的引用
(0x6113f7818,37410664)
(0x6823e7450,37410664)
(0x6227dcf10,37410664)
(0x61c793270,37410664)
(0x6c4f400b0,37410664)
(0x5daafa468,37410664)
(0x6742d9968,37410664)
(0x5be2ccbd8,37410664)
(0x5d6262ba0,37410664)
(0x5d86294e8,37410664)
(0x6b1605990,37410664)
(0x5d3e02f48,37410664)
(0x6ad9e71b8,37410664)
(0x6b5ddd5e0,37410664)
(0x6b39cfa28,37410664)
(0x5bbdceca0,37410664)
(0x7291583b8,37410664)
(0x6be14aea0,37410664)
(0x71892fe80,37410664)
(0x6c050df58,37410664)
(0x6c290da48,37410664)
(0x6bbd0cd60,37410664)
(0x724908728,37410664)
(0x7434e53b0,37410664)
(0x7410df180,37410664)
(0x7164cb2b0,37410664)
(0x7140c61f8,37410664)
(0x726cb5e90,37410664)
(0x6068aa018,37410664)
(0x60449ed78,37410664)
(0x67dc82888,37410664)
(0x6a6c70918,37410664)
(0x759050368,37410664)
(0x5ee02fba8,37410664)
(0x756c2f0d0,37410664)
(0x5f042e668,37410664)
(0x5e44157c8,37410664)
(0x705c00000,37410664)
(0x5e67c2f30,37410664)
(0x750bb8d00,37410664)
(0x5dfbb5960,37410664)
(0x5c0f8c5a0,37410664)
(0x6ebb7eda8,37410664)
(0x5e8b70fe8,37410664)
(0x73af40540,37410664)
(0x60ba43330,37410664)
(0x6986117b0,37410664)
(0x69d9fbb20,37410664)
(0x5a5de3c58,37410664)
(0x6155b2798,37410664)
(0x68d1a4140,37410664)
(0x61795ff00,37410664)
(0x6dc95b450,37410664)
(0x646157c70,37410664)
(0x6d0948630,37410664)
(0x6ded08bb8,37410664)
(0x6485053d8,37410664)
(0x6418f83f8,37410664)
(0x6d2cf5d98,37410664)
(0x6f30f5408,37410664)
(0x6670efef0,37410664)
(0x6cc0e87a8,37410664)
(0x59fcbe430,37410664)
(0x6e10b6320,37410664)
(0x64a8b2b40,37410664)
(0x6f54a3aa0,37410664)
(0x6d50a3500,37410664)
(0x66949d760,37410664)
(0x6f789c870,37410664)
(0x66288fde0,37410664)
(0x64cc602a8,37410664)
(0x66b84aec8,37410664)
(0x5ffc3ed58,37410664)
(0x5b641a758,37410664)
(0x5b87c7ec0,37410664)
(0x74bfb1b48,37410664)
(0x6e93924d0,37410664)
(0x66e7683b0,37410664)
(0x74e35f2b0,37410664)
(0x73632ec70,37410664)
(0x6c771b818,37410664)
(0x5f3b08b80,37410664)
(0x7386dc3d8,37410664)
(0x5f82d3118,37410664)
(0x5f5ec5ca0,37410664)
(0x7092bd528,37410664)
(0x7026b3e18,37410664)
(0x7302a5180,37410664)
(0x6e6ea31d0,37410664)
(0x72de9c4a8,37410664)
(0x598295828,37410664)
(0x59a693d70,37410664)
(0x71fa52ec0,37410664)
(0x624e3fe20,37410664)
(0x71d63b2c0,37410664)
(0x67a630c70,37410664)
(0x65a217480,37410664)
(0x657e140f8,37410664)
(0x655a0a5c0,37410664)
(0x595e042c8,37410664)
(0x5ab9fd1a0,37410664)
(0x65c5d1ec0,37410664)
(0x70f1ceb80,37410664)
(0x70cdc6168,37410664)
(0x6fd5be660,37410664)
(0x63c1ab370,37410664)
(0x6781aada8,37410664)
(0x5addaa908,37410664)
(0x6331a90b0,37410664)
(0x5c8da28c0,37410664)
(0x5d05a04a0,37410664)
(0x5c6994678,37410664)
(0x5c4593380,37410664)
(0x5b0169d68,37410664)
(0x635556818,37410664)
(0x65353a8a8,37410664)
(0x637903f80,37410664)
(0x745d01058,37410664)
(0x5a34e5700,37410664)
(0x686ce2fa8,37410664)
(0x6f08d5fe8,37410664)
(0x639cb16e8,37410664)
(0x62c4964a8,37410664)
(0x6a346fc38,37410664)
(0x692c5d268,37410664)
(0x60f04a0b0,37410664)
(0x6848428b0,37410664)
(0x75b841180,37410664)
(0x68002fff0,37410664)
(0x620416630,37410664)
(0x69500a9d0,37410664)
(0x6a1002310,37410664)
(0x650fdbd00,263952)
(0x5c07c42f8,263952)
(0x6f0789308,263952)
(0x6c7381e28,263952)
(0x608f3df20,263952)
(0x650efeff8,263952)
(0x608ef4c98,263952)
(0x6f06ddef8,263952)
(0x6766d2c48,263952)
(0x5c06bf0b8,263952)
(0x70caaada0,263952)
(0x5be27f1f0,263952)
(0x608e79610,263952)
(0x6c4e1fa80,263952)
(0x5da9eed50,263952)
(0x5eb1d1400,263952)
(0x5eb144398,263952)
(0x74ad0e4e0,263952)
可以找到一个 LinkedHashMap, 其中某一个 key 为 "extract-rule.xml" 的 entry 即为我们这里的这个 大对象
代码中 track 一下 extract-rule.xml 加载的地方, StartJobEngineApp 初始化的地方
后面将 "extract-rule.xml" → 文件内容, transfer 到了 configFileBase64Map 里面, 对应的就是我们上面看到的这个 LinkedHashMap
那么这个 "extract-rule.xml" 为什么会被加载 132 次呢 ? 又为什么没有被 gc 掉 ?
继续往后面看, 会看到 SOURCE, TRANSFORMATION, SINK 等几个 operator 都持有一份 "extract-rule.xml" 的内容
也就是一个 job, 假设只有最简单的 SOURCE → 1个TRANSFORMATION → SINK 的步骤, 那
么这个 "extract-rule.xml" 的内容 会被存储 4次
这个 LinkedHashMap 是被存储在 ConfigFileObjectService 中
最开始的 usercode 中的 ConfigFileObjectService 是 classloader 加载创建的, 后面的 SOURCE/TRANSFORMATION/SINK 中的 ConfigFileObjectService 是算子需要的上下文, 由 usercode 传递过来 反序列化生成的
以 MyFlinkKafkaConsumerXSource 为例, 看一下 这一系列引用关系
以 TransFieldToStandardXCommand 为例, 会被封装到 PreprocessProcessFuncImpl 中与 flink 进行交互, 引用关系如下
以 EsDeployDefImpXSink 为例, 看一下 这一系列引用关系
那么 我这里的情况是从 flink 的控制台已经看不到任何的 job 了, 为什么 这些对象还被强引用了 ?
我们回到 jmap -histo 的结果, 可以找到 35 个 com.HelloWorld.flink.common.ConfigFileObjectService 的 class, 有的有 4 个 instance, 有的有 5个, 有的有 6个
另外还有 35 个 org.apache.flink.util.ChildFirstClassLoader 这里可以大致判断出 flink 的 job 之间的隔离大致是通过 classloader 进行隔离的
num #instances #bytes class name
----------------------------------------------
592: 35 3360 org.apache.flink.util.ChildFirstClassLoader
1724: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1725: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1726: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1727: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1728: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1729: 6 144 com.HelloWorld.flink.common.ConfigFileObjectService
1836: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1837: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1838: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1839: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1840: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1841: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1842: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1843: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1844: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1845: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1846: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1847: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1848: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1849: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1850: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1851: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
1852: 5 120 com.HelloWorld.flink.common.ConfigFileObjectService
2068: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2069: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2070: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2071: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2072: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2073: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2074: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2075: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2076: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2077: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2078: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
2079: 4 96 com.HelloWorld.flink.common.ConfigFileObjectService
Total 3089420 7578685856
flink 的 /jar/$jarId/run 的执行过程
我们上面 可以大致判断出 flink 的 job 之间的隔离大致是通过 classloader 进行隔离的, 但是 还需要实锤
flink rest api 这部分是自己基于 netty 开放的服务, 我们这里的 /jar/$jarId/run 处理请求的是 JarRunHandler
这里我们需要关注的是当前线程是 Flink-DispatcherRestEndpoint-thread-*, 是 jobManager 创建的时候开放 Rest 服务的时候创建的一组线程池, 用于执行 XXHandler 里面的一部分异步处理
当前线程的 contextClassloader 是一个 ChildFirstClassloader, 另外加载 mainClazz 的也是这个 ChildFirstClassloader
这部分的代码体现也可以再这上面找到, 具体选择 classloader 也有策略控制, 这里不在赘述, 总之我们这里的情况是 选择的是 ChildFirstClassloader
堆栈信息再往前推进一些, 可以看到 Flink-DispatcherRestEndpoint-thread-* 是执行 usercode 的时候将 contextClassloader 换成了 ChildFirstClassloader, 执行完成将 contextClassloader
切换回去, 常见的操作
这里可以看到 job 中 usercode 这一部分代码的执行是通过 classloader 进行隔离的
TaskManager 这边, 同一个 jvm 同一个 job 会对应同一个 ChildFirstClassLoader, 创建是 Task 初始化的时候创建的
为什么 job 已经执行完成了, ConfigFileObjectService 相关的对象没有被回收?
抽取一个 ConfigFileObjectService 查看一下, 引用这个对象的只有 ConfigFileObjectService.uniqueInstance, 是一个静态字段, 意味着需要回收 这个 ConfigFileObjectService 对象, 是需要卸载类 ConfigFileObjectService
根据规范 卸载类的条件是 其对应的 classloadaer 被回收
我们抽取一个 ChildFirstClassLoader, 来查看一下, 可以明显看到的是还有 诸多 java.lang.Thread 还引用了当前 ConfigFileObjectService
gc 的时候, java.lang.Thread oop 本身以及其 stack 是 gc roots 的一部分, 既然这么多 alive 的 java.lang.Thread 还引用着 ChildFirstClassLoader, classloader 是被 gc 不掉
当然 不排除其他强应用, 充分不必要 条件
一个模拟的 case
这里根据场景 模拟了一个 测试用例, 依赖的 jar为 flink-core 使用 ChildFirstClassLoader
Test18ChildFirstClassloader
package com.hx.test;
import org.apache.flink.util.ChildFirstClassLoader;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
public class Test18ChildFirstClassloader {
// Test18ChildFirstClassloader
// -Xmx128M -XX:+UseSerialGC -verbose:class
public static void main(String[] args) throws Exception {
File classFile = new File("D:\\WorkStations\\IdeaWorkStations\\HelloWorld\\target\\classes");
URL[] classpathes = new URL[]{
classFile.toURI().toURL()
};
// create many namespace by classloader
int namespaceCount = 50;
// List<ChildFirstClassLoader> classloaderList = new ArrayList<>();
for (int i = 0; i < namespaceCount; i++) {
ChildFirstClassLoader classloader = new ChildFirstClassLoader(
classpathes,
Test18ChildFirstClassloader.class.getClassLoader(),
new String[]{}
);
// classloaderList.add(classloader);
ClassLoader oldContextClassloader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(classloader);
try {
Class clazz = classloader.loadClass("com.hx.test.Test18StaticHolder");
Method method = clazz.getDeclaredMethod("main", String[].class);
method.invoke(null, new Object[]{
new String[]{"1", "2"}
});
} finally {
Thread.currentThread().setContextClassLoader(oldContextClassloader);
}
}
System.gc();
System.in.read();
}
}
Test18StaticHolder
package com.hx.test;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
// Test18StaticHolder
public class Test18StaticHolder {
private static Test18StaticHolder INSTANCE;
public static String HOLDER = null;
static {
INSTANCE = new Test18StaticHolder();
try {
HOLDER = readContent("D:\\WorkStations\\IdeaWorkStations\\Tmp\\06_jysy_logs\\whale-client.log.0");
} catch (Exception e) {
e.printStackTrace();
}
}
// Test18StaticHolder
public static void main(String[] args) {
System.out.println(" Test18StaticHolder proceed ... ");
new Thread(() -> {
// do biz
sleep(10_000);
}, "Test18StaticHolderAliveThread").start();
}
// readContent
public static String readContent(String path) throws Exception {
BufferedReader reader = new BufferedReader(new FileReader(new File(path)));
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\r\n");
}
return sb.toString();
}
// sleep
public static void sleep(long sleepInMs) {
try {
Thread.sleep(sleepInMs);
} catch (Exception e) {
e.printStackTrace();
}
}
}
jmap -histo $pid
num #instances #bytes class name
----------------------------------------------
1: 4418 125602984 [C
2: 189 797560 [I
3: 4134 99216 java.lang.String
4: 842 95856 java.lang.Class
5: 1391 74504 [Ljava.lang.Object;
6: 156 64560 [B
7: 836 33440 java.util.TreeMap$Entry
8: 268 25696 [Ljava.util.HashMap$Node;
9: 689 22048 java.util.HashMap$Node
10: 58 21808 java.lang.Thread
11: 284 18176 java.net.URL
12: 168 13440 [Ljava.util.WeakHashMap$Entry;
13: 272 13056 java.util.HashMap
14: 231 12936 java.lang.invoke.MemberName
15: 279 11160 java.lang.ref.SoftReference
16: 109 10464 java.util.jar.JarFile$JarFileEntry
17: 244 9760 java.util.LinkedHashMap$Entry
18: 300 9600 java.util.concurrent.ConcurrentHashMap$Node
19: 396 9504 java.util.LinkedList$Node
20: 226 9040 java.lang.ref.Finalizer
21: 252 8928 [Ljava.lang.String;
22: 168 8064 java.util.WeakHashMap
23: 117 7488 java.util.jar.JarFile
24: 141 6768 sun.misc.URLClassPath$JarLoader
25: 119 6664 sun.nio.cs.UTF_8$Encoder
26: 202 6464 java.util.LinkedList
27: 196 6272 java.lang.invoke.LambdaForm$Name
28: 256 6144 java.lang.Long
29: 244 5856 java.io.ExpiringCache$Entry
30: 94 5640 [Ljava.lang.ref.SoftReference;
31: 174 5568 java.lang.ref.ReferenceQueue
32: 166 5312 java.util.Hashtable$Entry
33: 128 5120 java.lang.invoke.MethodType
34: 103 4944 java.util.zip.Inflater
35: 48 4608 org.apache.flink.util.ChildFirstClassLoader
36: 110 4400 java.security.AccessControlContext
37: 123 4144 [Ljava.lang.Class;
38: 55 4128 [Ljava.util.Hashtable$Entry;
39: 129 4128 java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
40: 256 4096 java.lang.Byte
41: 256 4096 java.lang.Integer
42: 256 4096 java.lang.Short
43: 102 4080 java.security.ProtectionDomain
44: 169 4056 java.util.ArrayList
45: 117 3744 java.util.zip.ZipCoder
46: 111 3552 java.lang.invoke.DirectMethodHandle
47: 204 3264 java.lang.Object
48: 102 3264 java.util.Vector
49: 101 3232 java.security.CodeSource
50: 68 3056 [Ljava.lang.invoke.LambdaForm$Name;
51: 63 3024 java.lang.invoke.LambdaForm
52: 28 2912 [Ljava.lang.invoke.MethodHandle;
53: 176 2816 java.lang.ref.ReferenceQueue$Lock
54: 117 2808 java.util.ArrayDeque
55: 49 2744 java.lang.invoke.MethodTypeForm
56: 7 2544 [Ljava.util.concurrent.ConcurrentHashMap$Node;
57: 52 2496 java.util.Hashtable
58: 103 2472 java.util.zip.ZStreamRef
59: 50 2400 sun.misc.URLClassPath
60: 96 2304 java.lang.invoke.LambdaForm$NamedFunction
61: 95 2280 [Ljava.security.ProtectionDomain;
62: 128 2048 java.lang.Character
63: 62 1984 java.io.File
64: 38 1824 sun.util.locale.LocaleObjectCache$CacheEntry
65: 52 1664 java.security.Permissions
66: 102 1632 [Ljava.security.Principal;
67: 51 1632 java.io.FilePermission
68: 102 1632 java.security.ProtectionDomain$Key
69: 51 1632 java.util.Stack
70: 50 1600 java.lang.invoke.BoundMethodHandle$Species_L
71: 18 1440 java.lang.reflect.Constructor
72: 51 1224 java.io.FilePermissionCollection
73: 49 1176 sun.misc.URLClassPath$FileLoader
74: 23 1104 java.nio.HeapCharBuffer
75: 1 1040 [Ljava.lang.Byte;
76: 1 1040 [Ljava.lang.Integer;
77: 1 1040 [Ljava.lang.Long;
78: 1 1040 [Ljava.lang.Short;
79: 1 1040 [[C
80: 26 1040 java.io.ObjectStreamField
81: 27 864 com.intellij.rt.debugger.agent.CaptureAgent$InstrumentPoint
82: 50 800 java.util.HashSet
83: 33 792 java.lang.StringBuilder
84: 19 760 sun.util.locale.BaseLocale$Key
85: 9 656 [S
86: 3 624 [Ljava.lang.invoke.LambdaForm;
87: 19 608 java.util.Locale
88: 19 608 sun.util.locale.BaseLocale
89: 9 576 java.util.concurrent.ConcurrentHashMap
90: 10 560 sun.invoke.util.Wrapper
91: 1 528 [Ljava.lang.Character;
92: 13 520 java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle
93: 6 456 [Lsun.invoke.util.Wrapper;
94: 19 456 java.util.Locale$LocaleKey
95: 13 416 java.lang.invoke.SimpleMethodHandle
96: 17 408 java.util.jar.Attributes$Name
97: 10 400 java.lang.invoke.DirectMethodHandle$Accessor
98: 1 384 java.lang.ref.Finalizer$FinalizerThread
99: 6 384 java.nio.DirectByteBuffer
100: 1 376 java.lang.ref.Reference$ReferenceHandler
101: 14 336 java.lang.invoke.LambdaFormEditor$Transform$Kind
102: 6 336 java.nio.DirectLongBufferU
103: 10 320 java.lang.OutOfMemoryError
104: 10 320 java.lang.StackTraceElement
105: 13 312 java.lang.RuntimePermission
106: 11 304 [Ljava.io.ObjectStreamField;
107: 2 304 [Ljava.lang.Thread;
108: 12 288 java.lang.invoke.Invokers
109: 9 288 jdk.internal.org.objectweb.asm.Type
110: 12 288 sun.misc.MetaIndex
111: 8 248 [Ljava.lang.invoke.LambdaForm$BasicType;
112: 6 240 [Ljava.lang.invoke.BoundMethodHandle$SpeciesData;
113: 5 240 java.util.TreeMap
114: 4 224 java.lang.Package
115: 9 216 sun.reflect.NativeConstructorAccessorImpl
116: 7 208 [Ljava.lang.invoke.LambdaForm$NamedFunction;
117: 5 200 java.lang.invoke.BoundMethodHandle$SpeciesData
118: 5 200 java.util.WeakHashMap$Entry
119: 6 192 java.lang.invoke.LambdaForm$BasicType
120: 8 192 java.lang.invoke.MethodHandleImpl$Intrinsic
121: 2 176 java.lang.reflect.Method
122: 7 168 java.net.NetPermission
123: 4 160 java.io.FileDescriptor
124: 3 144 java.nio.HeapByteBuffer
125: 3 144 java.util.Properties
126: 6 144 sun.misc.PerfCounter
127: 9 144 sun.reflect.DelegatingConstructorAccessorImpl
128: 2 128 java.io.ExpiringCache$1
129: 3 120 java.lang.invoke.BoundMethodHandle$Species_LL
130: 2 112 [Ljava.lang.invoke.MethodType;
131: 2 96 java.lang.ThreadGroup
132: 3 96 java.lang.ThreadLocal$ThreadLocalMap$Entry
133: 3 96 java.security.BasicPermissionCollection
134: 4 96 sun.misc.JarIndex
135: 1 96 sun.misc.Launcher$AppClassLoader
136: 2 96 sun.nio.cs.StreamEncoder
137: 3 88 [Ljava.lang.StackTraceElement;
138: 1 88 sun.misc.Launcher$ExtClassLoader
139: 1 80 [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
140: 2 80 java.io.BufferedWriter
141: 2 80 java.io.ExpiringCache
142: 2 80 java.lang.ClassLoader$NativeLibrary
143: 5 80 java.lang.ThreadLocal
144: 2 80 java.lang.invoke.MethodHandleImpl$AsVarargsCollector
145: 2 80 sun.nio.cs.UTF_8$Decoder
146: 1 72 [Ljava.lang.invoke.LambdaFormEditor$Transform$Kind;
147: 3 72 java.security.SecurityPermission
148: 3 72 java.util.Collections$SynchronizedSet
149: 3 72 java.util.concurrent.atomic.AtomicLong
150: 2 64 [J
151: 2 64 java.io.FileInputStream
152: 2 64 java.io.FileOutputStream
153: 2 64 java.io.PrintStream
154: 2 64 java.lang.ClassValue$Entry
155: 2 64 java.lang.VirtualMachineError
156: 2 64 java.lang.ref.ReferenceQueue$Null
157: 1 56 [[I
158: 1 56 java.lang.invoke.LambdaFormEditor$Transform
159: 1 56 java.net.SocketPermission
160: 1 48 [Ljava.lang.invoke.MethodHandleImpl$Intrinsic;
161: 2 48 java.io.BufferedOutputStream
162: 1 48 java.io.BufferedReader
163: 2 48 java.io.File$PathStatus
164: 2 48 java.io.OutputStreamWriter
165: 1 48 java.lang.ProcessEnvironment
166: 1 48 java.lang.invoke.BoundMethodHandle$Species_L4
167: 2 48 java.lang.invoke.MethodHandles$Lookup
168: 2 48 java.lang.reflect.ReflectPermission
169: 2 48 java.nio.charset.CoderResult
170: 3 48 java.nio.charset.CodingErrorAction
171: 2 48 java.util.Collections$SetFromMap
172: 3 48 java.util.concurrent.atomic.AtomicInteger
173: 2 48 sun.instrument.TransformerManager
174: 2 48 sun.misc.NativeSignalHandler
175: 2 48 sun.misc.Signal
176: 1 48 sun.nio.cs.StreamDecoder
177: 2 40 [Lsun.instrument.TransformerManager$TransformerInfo;
178: 1 40 [[Ljava.lang.invoke.LambdaForm$Name;
179: 1 40 java.io.BufferedInputStream
180: 1 40 java.util.IdentityHashMap
181: 1 40 sun.nio.cs.StandardCharsets$Aliases
182: 1 40 sun.nio.cs.StandardCharsets$Cache
183: 1 40 sun.nio.cs.StandardCharsets$Classes
184: 1 40 sun.nio.cs.ext.ExtendedCharsets
185: 1 32 [Ljava.lang.OutOfMemoryError;
186: 1 32 [Ljava.lang.ThreadGroup;
187: 2 32 com.intellij.rt.debugger.agent.CaptureAgent$ParamKeyProvider
188: 1 32 java.io.WinNTFileSystem
189: 1 32 java.lang.ArithmeticException
190: 2 32 java.lang.Boolean
191: 1 32 java.lang.NullPointerException
192: 2 32 java.nio.ByteOrder
193: 1 32 java.util.Collections$UnmodifiableMap
194: 1 32 java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
195: 1 32 sun.instrument.InstrumentationImpl
196: 2 32 sun.net.www.protocol.jar.Handler
197: 1 32 sun.nio.cs.StandardCharsets
198: 1 24 [Ljava.io.File$PathStatus;
199: 1 24 [Ljava.lang.ClassValue$Entry;
200: 1 24 [Ljava.net.URL;
201: 1 24 [Lsun.launcher.LauncherHelper;
202: 1 24 com.intellij.rt.debugger.agent.CaptureAgent$FieldKeyProvider
203: 1 24 java.io.FileReader
204: 1 24 java.lang.ClassValue$Version
205: 1 24 java.lang.Double
206: 1 24 java.lang.ThreadLocal$ThreadLocalMap
207: 1 24 java.lang.invoke.MethodHandleImpl$4
208: 1 24 java.lang.invoke.MethodType$ConcurrentWeakInternSet
209: 1 24 java.security.AllPermissionCollection
210: 1 24 java.util.BitSet
211: 1 24 java.util.Collections$EmptyMap
212: 1 24 java.util.Collections$UnmodifiableRandomAccessList
213: 1 24 java.util.Locale$Cache
214: 1 24 sun.instrument.TransformerManager$TransformerInfo
215: 1 24 sun.launcher.LauncherHelper
216: 1 24 sun.nio.cs.ISO_8859_1
217: 1 24 sun.nio.cs.ThreadLocalCoders$1
218: 1 24 sun.nio.cs.ThreadLocalCoders$2
219: 1 24 sun.nio.cs.US_ASCII
220: 1 24 sun.nio.cs.UTF_16
221: 1 24 sun.nio.cs.UTF_16BE
222: 1 24 sun.nio.cs.UTF_16LE
223: 1 24 sun.nio.cs.UTF_8
224: 1 24 sun.reflect.NativeMethodAccessorImpl
225: 1 24 sun.util.locale.BaseLocale$Cache
226: 1 16 [D
227: 1 16 [F
228: 1 16 [Ljava.lang.Throwable;
229: 1 16 [Ljava.security.cert.Certificate;
230: 1 16 [Z
231: 1 16 com.hx.test.Test18StaticHolder
232: 1 16 com.hx.test.Test18StaticHolder
233: 1 16 com.hx.test.Test18StaticHolder
234: 1 16 com.hx.test.Test18StaticHolder
235: 1 16 com.hx.test.Test18StaticHolder
236: 1 16 com.hx.test.Test18StaticHolder
237: 1 16 com.hx.test.Test18StaticHolder
238: 1 16 com.hx.test.Test18StaticHolder
239: 1 16 com.hx.test.Test18StaticHolder
240: 1 16 com.hx.test.Test18StaticHolder
241: 1 16 com.hx.test.Test18StaticHolder
242: 1 16 com.hx.test.Test18StaticHolder
243: 1 16 com.hx.test.Test18StaticHolder
244: 1 16 com.hx.test.Test18StaticHolder
245: 1 16 com.hx.test.Test18StaticHolder
246: 1 16 com.hx.test.Test18StaticHolder
247: 1 16 com.hx.test.Test18StaticHolder
248: 1 16 com.hx.test.Test18StaticHolder
249: 1 16 com.hx.test.Test18StaticHolder
250: 1 16 com.hx.test.Test18StaticHolder
251: 1 16 com.hx.test.Test18StaticHolder
252: 1 16 com.hx.test.Test18StaticHolder
253: 1 16 com.hx.test.Test18StaticHolder
254: 1 16 com.hx.test.Test18StaticHolder
255: 1 16 com.hx.test.Test18StaticHolder
256: 1 16 com.hx.test.Test18StaticHolder
257: 1 16 com.hx.test.Test18StaticHolder
258: 1 16 com.hx.test.Test18StaticHolder
259: 1 16 com.hx.test.Test18StaticHolder
260: 1 16 com.hx.test.Test18StaticHolder
261: 1 16 com.hx.test.Test18StaticHolder
262: 1 16 com.hx.test.Test18StaticHolder
263: 1 16 com.hx.test.Test18StaticHolder
264: 1 16 com.hx.test.Test18StaticHolder
265: 1 16 com.hx.test.Test18StaticHolder
266: 1 16 com.hx.test.Test18StaticHolder
267: 1 16 com.hx.test.Test18StaticHolder
268: 1 16 com.hx.test.Test18StaticHolder
269: 1 16 com.hx.test.Test18StaticHolder
270: 1 16 com.hx.test.Test18StaticHolder
271: 1 16 com.hx.test.Test18StaticHolder
272: 1 16 com.hx.test.Test18StaticHolder
273: 1 16 com.hx.test.Test18StaticHolder
274: 1 16 com.hx.test.Test18StaticHolder
275: 1 16 com.hx.test.Test18StaticHolder
276: 1 16 com.hx.test.Test18StaticHolder
277: 1 16 com.hx.test.Test18StaticHolder
278: 1 16 com.hx.test.Test18StaticHolder
279: 1 16 com.hx.test.Test18StaticHolder$$Lambda$1/329611835
280: 1 16 com.hx.test.Test18StaticHolder$$Lambda$10/1757676444
281: 1 16 com.hx.test.Test18StaticHolder$$Lambda$11/1870647526
282: 1 16 com.hx.test.Test18StaticHolder$$Lambda$12/2009787198
283: 1 16 com.hx.test.Test18StaticHolder$$Lambda$13/466505482
284: 1 16 com.hx.test.Test18StaticHolder$$Lambda$14/1615780336
285: 1 16 com.hx.test.Test18StaticHolder$$Lambda$15/2094411587
286: 1 16 com.hx.test.Test18StaticHolder$$Lambda$16/1216590855
287: 1 16 com.hx.test.Test18StaticHolder$$Lambda$17/1122134344
288: 1 16 com.hx.test.Test18StaticHolder$$Lambda$18/1413653265
289: 1 16 com.hx.test.Test18StaticHolder$$Lambda$19/125622176
290: 1 16 com.hx.test.Test18StaticHolder$$Lambda$2/1007251739
291: 1 16 com.hx.test.Test18StaticHolder$$Lambda$20/342597804
292: 1 16 com.hx.test.Test18StaticHolder$$Lambda$21/258754732
293: 1 16 com.hx.test.Test18StaticHolder$$Lambda$22/1476394199
294: 1 16 com.hx.test.Test18StaticHolder$$Lambda$23/348100441
295: 1 16 com.hx.test.Test18StaticHolder$$Lambda$24/655381473
296: 1 16 com.hx.test.Test18StaticHolder$$Lambda$25/1076496284
297: 1 16 com.hx.test.Test18StaticHolder$$Lambda$26/1072601481
298: 1 16 com.hx.test.Test18StaticHolder$$Lambda$27/1459672753
299: 1 16 com.hx.test.Test18StaticHolder$$Lambda$28/1596000437
300: 1 16 com.hx.test.Test18StaticHolder$$Lambda$29/1225439493
301: 1 16 com.hx.test.Test18StaticHolder$$Lambda$3/853993923
302: 1 16 com.hx.test.Test18StaticHolder$$Lambda$30/1845904670
303: 1 16 com.hx.test.Test18StaticHolder$$Lambda$31/13329486
304: 1 16 com.hx.test.Test18StaticHolder$$Lambda$32/517210187
305: 1 16 com.hx.test.Test18StaticHolder$$Lambda$33/1776957250
306: 1 16 com.hx.test.Test18StaticHolder$$Lambda$34/1273765644
307: 1 16 com.hx.test.Test18StaticHolder$$Lambda$35/764577347
308: 1 16 com.hx.test.Test18StaticHolder$$Lambda$36/422250493
309: 1 16 com.hx.test.Test18StaticHolder$$Lambda$37/343965883
310: 1 16 com.hx.test.Test18StaticHolder$$Lambda$38/2114650936
311: 1 16 com.hx.test.Test18StaticHolder$$Lambda$39/540585569
312: 1 16 com.hx.test.Test18StaticHolder$$Lambda$4/201556483
313: 1 16 com.hx.test.Test18StaticHolder$$Lambda$40/828441346
314: 1 16 com.hx.test.Test18StaticHolder$$Lambda$41/858242339
315: 1 16 com.hx.test.Test18StaticHolder$$Lambda$42/1558712965
316: 1 16 com.hx.test.Test18StaticHolder$$Lambda$43/1401132667
317: 1 16 com.hx.test.Test18StaticHolder$$Lambda$44/1875308878
318: 1 16 com.hx.test.Test18StaticHolder$$Lambda$45/36202360
319: 1 16 com.hx.test.Test18StaticHolder$$Lambda$46/329645619
320: 1 16 com.hx.test.Test18StaticHolder$$Lambda$47/1668627309
321: 1 16 com.hx.test.Test18StaticHolder$$Lambda$5/731395981
322: 1 16 com.hx.test.Test18StaticHolder$$Lambda$6/1282473384
323: 1 16 com.hx.test.Test18StaticHolder$$Lambda$7/226710952
324: 1 16 com.hx.test.Test18StaticHolder$$Lambda$8/1379435698
325: 1 16 com.hx.test.Test18StaticHolder$$Lambda$9/1073502961
326: 1 16 com.intellij.rt.debugger.agent.CaptureAgent$1
327: 1 16 com.intellij.rt.debugger.agent.CaptureAgent$CaptureTransformer
328: 1 16 com.intellij.rt.debugger.agent.CaptureStorage$1
329: 1 16 java.io.FileDescriptor$1
330: 1 16 java.lang.CharacterDataLatin1
331: 1 16 java.lang.ClassValue$Identity
332: 1 16 java.lang.Float
333: 1 16 java.lang.ProcessEnvironment$EntryComparator
334: 1 16 java.lang.ProcessEnvironment$NameComparator
335: 1 16 java.lang.Runtime
336: 1 16 java.lang.String$CaseInsensitiveComparator
337: 1 16 java.lang.System$2
338: 1 16 java.lang.Terminator$1
339: 1 16 java.lang.Throwable$WrappedPrintStream
340: 1 16 java.lang.invoke.MemberName$Factory
341: 1 16 java.lang.invoke.MethodHandleImpl$2
342: 1 16 java.lang.invoke.MethodHandleImpl$3
343: 1 16 java.lang.ref.Reference$1
344: 1 16 java.lang.ref.Reference$Lock
345: 1 16 java.lang.reflect.ReflectAccess
346: 1 16 java.net.URLClassLoader$7
347: 1 16 java.nio.Bits$1
348: 1 16 java.nio.charset.CoderResult$1
349: 1 16 java.nio.charset.CoderResult$2
350: 1 16 java.security.AllPermission
351: 1 16 java.security.ProtectionDomain$2
352: 1 16 java.security.ProtectionDomain$JavaSecurityAccessImpl
353: 1 16 java.util.Collections$EmptyList
354: 1 16 java.util.Collections$EmptySet
355: 1 16 java.util.HashMap$EntrySet
356: 1 16 java.util.HashMap$Values
357: 1 16 java.util.Hashtable$EntrySet
358: 1 16 java.util.IdentityHashMap$KeySet
359: 1 16 java.util.LinkedHashMap$LinkedKeySet
360: 1 16 java.util.WeakHashMap$KeySet
361: 1 16 java.util.concurrent.atomic.AtomicBoolean
362: 1 16 java.util.jar.JavaUtilJarAccessImpl
363: 1 16 java.util.zip.ZipFile$1
364: 1 16 sun.misc.ASCIICaseInsensitiveComparator
365: 1 16 sun.misc.Launcher
366: 1 16 sun.misc.Launcher$Factory
367: 1 16 sun.misc.Perf
368: 1 16 sun.misc.Unsafe
369: 1 16 sun.net.www.protocol.file.Handler
370: 1 16 sun.reflect.DelegatingMethodAccessorImpl
371: 1 16 sun.reflect.ReflectionFactory
Total 22482 127186264
完