public final class oadd.io.netty.util.internal.ObjectCleaner extends java.lang.Object
{
private static final int REFERENCE_QUEUE_POLL_TIMEOUT_MS;
static final java.lang.String CLEANER_THREAD_NAME;
private static final java.util.Set LIVE_SET;
private static final java.lang.ref.ReferenceQueue REFERENCE_QUEUE;
private static final java.util.concurrent.atomic.AtomicBoolean CLEANER_RUNNING;
private static final java.lang.Runnable CLEANER_TASK;
public static void register(java.lang.Object, java.lang.Runnable)
{
java.util.Set v;
java.util.concurrent.atomic.AtomicBoolean v;
java.lang.Runnable v, v;
oadd.io.netty.util.internal.ObjectCleaner$AutomaticCleanerReference v;
oadd.io.netty.util.internal.ObjectCleaner$2 v;
oadd.io.netty.util.concurrent.FastThreadLocalThread v;
java.lang.Object v, v;
java.lang.String v;
boolean v;
v := @parameter: java.lang.Object;
v := @parameter: java.lang.Runnable;
v = new oadd.io.netty.util.internal.ObjectCleaner$AutomaticCleanerReference;
v = staticinvoke <oadd.io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "cleanupTask");
specialinvoke v.<oadd.io.netty.util.internal.ObjectCleaner$AutomaticCleanerReference: void <init>(java.lang.Object,java.lang.Runnable)>(v, v);
v = <oadd.io.netty.util.internal.ObjectCleaner: java.util.Set LIVE_SET>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
v = <oadd.io.netty.util.internal.ObjectCleaner: java.util.concurrent.atomic.AtomicBoolean CLEANER_RUNNING>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean compareAndSet(boolean,boolean)>(0, 1);
if v == 0 goto label;
v = new oadd.io.netty.util.concurrent.FastThreadLocalThread;
v = <oadd.io.netty.util.internal.ObjectCleaner: java.lang.Runnable CLEANER_TASK>;
specialinvoke v.<oadd.io.netty.util.concurrent.FastThreadLocalThread: void <init>(java.lang.Runnable)>(v);
virtualinvoke v.<java.lang.Thread: void setPriority(int)>(1);
v = new oadd.io.netty.util.internal.ObjectCleaner$2;
specialinvoke v.<oadd.io.netty.util.internal.ObjectCleaner$2: void <init>(java.lang.Thread)>(v);
staticinvoke <java.security.AccessController: java.lang.Object doPrivileged(java.security.PrivilegedAction)>(v);
v = <oadd.io.netty.util.internal.ObjectCleaner: java.lang.String CLEANER_THREAD_NAME>;
virtualinvoke v.<java.lang.Thread: void setName(java.lang.String)>(v);
virtualinvoke v.<java.lang.Thread: void setDaemon(boolean)>(1);
virtualinvoke v.<java.lang.Thread: void start()>();
label:
return;
}
public static int getLiveSetCount()
{
int v;
java.util.Set v;
v = <oadd.io.netty.util.internal.ObjectCleaner: java.util.Set LIVE_SET>;
v = interfaceinvoke v.<java.util.Set: int size()>();
return v;
}
private void <init>()
{
oadd.io.netty.util.internal.ObjectCleaner v;
v := @this: oadd.io.netty.util.internal.ObjectCleaner;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
static void <clinit>()
{
java.util.concurrent.atomic.AtomicBoolean v;
java.lang.ref.ReferenceQueue v;
oadd.io.netty.util.internal.ConcurrentSet v;
int v, v;
java.lang.Class v;
java.lang.String v, v;
oadd.io.netty.util.internal.ObjectCleaner$1 v;
v = staticinvoke <oadd.io.netty.util.internal.SystemPropertyUtil: int getInt(java.lang.String,int)>("oadd.io.netty.util.internal.ObjectCleaner.refQueuePollTimeout", 10000);
v = staticinvoke <java.lang.Math: int max(int,int)>(500, v);
<oadd.io.netty.util.internal.ObjectCleaner: int REFERENCE_QUEUE_POLL_TIMEOUT_MS> = v;
v = class "Loadd/io/netty/util/internal/ObjectCleaner;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getSimpleName()>();
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001Thread");
<oadd.io.netty.util.internal.ObjectCleaner: java.lang.String CLEANER_THREAD_NAME> = v;
v = new oadd.io.netty.util.internal.ConcurrentSet;
specialinvoke v.<oadd.io.netty.util.internal.ConcurrentSet: void <init>()>();
<oadd.io.netty.util.internal.ObjectCleaner: java.util.Set LIVE_SET> = v;
v = new java.lang.ref.ReferenceQueue;
specialinvoke v.<java.lang.ref.ReferenceQueue: void <init>()>();
<oadd.io.netty.util.internal.ObjectCleaner: java.lang.ref.ReferenceQueue REFERENCE_QUEUE> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
<oadd.io.netty.util.internal.ObjectCleaner: java.util.concurrent.atomic.AtomicBoolean CLEANER_RUNNING> = v;
v = new oadd.io.netty.util.internal.ObjectCleaner$1;
specialinvoke v.<oadd.io.netty.util.internal.ObjectCleaner$1: void <init>()>();
<oadd.io.netty.util.internal.ObjectCleaner: java.lang.Runnable CLEANER_TASK> = v;
return;
}
}