-
Notifications
You must be signed in to change notification settings - Fork 331
Expand file tree
/
Copy pathUnloadingChecker.java
More file actions
32 lines (25 loc) · 1.04 KB
/
UnloadingChecker.java
File metadata and controls
32 lines (25 loc) · 1.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package jvmbootstraptest;
import static java.util.concurrent.TimeUnit.MINUTES;
import datadog.trace.test.util.GCUtils;
import java.lang.management.ClassLoadingMXBean;
import java.lang.management.ManagementFactory;
public class UnloadingChecker {
static class Canary {}
public static void main(final String[] args) throws Exception {
ClassLoadingMXBean classLoadingMXBean = ManagementFactory.getClassLoadingMXBean();
long initialUnloadCount = classLoadingMXBean.getUnloadedClassCount();
// load an isolated class which we know can be unloaded after a full GC
new IsolatingClassLoader().loadClass("jvmbootstraptest.UnloadingChecker$Canary");
long waitNanos = MINUTES.toNanos(2);
long startNanos = System.nanoTime();
while (System.nanoTime() - startNanos < waitNanos) {
try {
GCUtils.awaitGC();
} catch (Throwable ignore) {
}
if (initialUnloadCount < classLoadingMXBean.getUnloadedClassCount()) {
break; // some class unloading has taken place, stop and check results
}
}
}
}