2021-02-02 11:40:07 +08:00
|
|
|
From 1ae617207543d079b95384bc2a57996392d5df09 Mon Sep 17 00:00:00 2001
|
|
|
|
|
Date: Fri, 22 Jan 2021 11:30:40 +0800
|
|
|
|
|
Subject: Backport of JDK-8157570
|
2020-01-20 12:09:52 +08:00
|
|
|
|
|
|
|
|
summary: sun.rmi.transport.GC retains a strong reference to the context class loader
|
|
|
|
|
LLT:
|
|
|
|
|
Bug url: https://bugs.openjdk.java.net/browse/JDK-8157570
|
|
|
|
|
---
|
|
|
|
|
jdk/src/share/classes/sun/misc/GC.java | 26 +++++++++++---------------
|
|
|
|
|
1 file changed, 11 insertions(+), 15 deletions(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/jdk/src/share/classes/sun/misc/GC.java b/jdk/src/share/classes/sun/misc/GC.java
|
2021-02-02 11:40:07 +08:00
|
|
|
index c77bf1d05..eb92617c1 100644
|
2020-01-20 12:09:52 +08:00
|
|
|
--- a/jdk/src/share/classes/sun/misc/GC.java
|
|
|
|
|
+++ b/jdk/src/share/classes/sun/misc/GC.java
|
|
|
|
|
@@ -29,6 +29,7 @@ import java.security.AccessController;
|
|
|
|
|
import java.security.PrivilegedAction;
|
|
|
|
|
import java.util.SortedSet;
|
|
|
|
|
import java.util.TreeSet;
|
|
|
|
|
+import sun.misc.InnocuousThread;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@@ -83,8 +84,9 @@ public class GC {
|
|
|
|
|
public static native long maxObjectInspectionAge();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- private static class Daemon extends Thread {
|
|
|
|
|
+ private static class Daemon implements Runnable {
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
public void run() {
|
|
|
|
|
for (;;) {
|
|
|
|
|
long l;
|
|
|
|
|
@@ -122,23 +124,17 @@ public class GC {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
- private Daemon(ThreadGroup tg) {
|
|
|
|
|
- super(tg, "GC Daemon");
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- /* Create a new daemon thread in the root thread group */
|
|
|
|
|
+ /* Create a new daemon thread */
|
|
|
|
|
public static void create() {
|
|
|
|
|
PrivilegedAction<Void> pa = new PrivilegedAction<Void>() {
|
|
|
|
|
public Void run() {
|
|
|
|
|
- ThreadGroup tg = Thread.currentThread().getThreadGroup();
|
|
|
|
|
- for (ThreadGroup tgn = tg;
|
|
|
|
|
- tgn != null;
|
|
|
|
|
- tg = tgn, tgn = tg.getParent());
|
|
|
|
|
- Daemon d = new Daemon(tg);
|
|
|
|
|
- d.setDaemon(true);
|
|
|
|
|
- d.setPriority(Thread.MIN_PRIORITY + 1);
|
|
|
|
|
- d.start();
|
|
|
|
|
- GC.daemon = d;
|
|
|
|
|
+ Thread t = InnocuousThread.newSystemThread("RMI GC Daemon",
|
|
|
|
|
+ new Daemon());
|
|
|
|
|
+ assert t.getContextClassLoader() == null;
|
|
|
|
|
+ t.setDaemon(true);
|
|
|
|
|
+ t.setPriority(Thread.MIN_PRIORITY + 1);
|
|
|
|
|
+ t.start();
|
|
|
|
|
+ GC.daemon = t;
|
|
|
|
|
return null;
|
|
|
|
|
}};
|
|
|
|
|
AccessController.doPrivileged(pa);
|
|
|
|
|
--
|
|
|
|
|
2.19.0
|
|
|
|
|
|