public class com.sun.prism.impl.Disposer
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: com.sun.prism.impl.Disposer
super_class: java.lang.Object
{
private static com.sun.prism.impl.Disposer disposerInstance;
descriptor: Lcom/sun/prism/impl/Disposer;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
private static final int WEAK;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 0
private static final int PHANTOM;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1
private static final int SOFT;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 2
private static int refType;
descriptor: I
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
private final java.lang.ref.ReferenceQueue queue;
descriptor: Ljava/lang/ref/ReferenceQueue;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.Hashtable records;
descriptor: Ljava/util/Hashtable;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.LinkedList<com.sun.prism.impl.Disposer$Record> disposalQueue;
descriptor: Ljava/util/LinkedList;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Ljava/util/LinkedList<Lcom/sun/prism/impl/Disposer$Record;>;
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=1, args_size=0
0: iconst_1
putstatic com.sun.prism.impl.Disposer.refType:I
1: getstatic com.sun.prism.impl.PrismSettings.refType:Ljava/lang/String;
astore 0
start local 0 2: aload 0
ifnull 13
3: aload 0
ldc "weak"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 7
4: iconst_0
putstatic com.sun.prism.impl.Disposer.refType:I
5: getstatic com.sun.prism.impl.PrismSettings.verbose:Z
ifeq 13
getstatic java.lang.System.err:Ljava/io/PrintStream;
ldc "Using WEAK refs"
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
6: goto 13
StackMap locals: java.lang.String
StackMap stack:
7: aload 0
ldc "soft"
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 11
8: iconst_2
putstatic com.sun.prism.impl.Disposer.refType:I
9: getstatic com.sun.prism.impl.PrismSettings.verbose:Z
ifeq 13
getstatic java.lang.System.err:Ljava/io/PrintStream;
ldc "Using SOFT refs"
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
10: goto 13
11: StackMap locals:
StackMap stack:
iconst_1
putstatic com.sun.prism.impl.Disposer.refType:I
12: getstatic com.sun.prism.impl.PrismSettings.verbose:Z
ifeq 13
getstatic java.lang.System.err:Ljava/io/PrintStream;
ldc "Using PHANTOM refs"
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
13: StackMap locals:
StackMap stack:
new com.sun.prism.impl.Disposer
dup
invokespecial com.sun.prism.impl.Disposer.<init>:()V
putstatic com.sun.prism.impl.Disposer.disposerInstance:Lcom/sun/prism/impl/Disposer;
end local 0 14: return
LocalVariableTable:
Start End Slot Name Signature
2 14 0 type Ljava/lang/String;
private void <init>();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.lang.ref.ReferenceQueue
dup
invokespecial java.lang.ref.ReferenceQueue.<init>:()V
putfield com.sun.prism.impl.Disposer.queue:Ljava/lang/ref/ReferenceQueue;
2: aload 0
new java.util.Hashtable
dup
invokespecial java.util.Hashtable.<init>:()V
putfield com.sun.prism.impl.Disposer.records:Ljava/util/Hashtable;
3: aload 0
new java.util.LinkedList
dup
invokespecial java.util.LinkedList.<init>:()V
putfield com.sun.prism.impl.Disposer.disposalQueue:Ljava/util/LinkedList;
4: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lcom/sun/prism/impl/Disposer;
public static void addRecord(java.lang.Object, com.sun.prism.impl.Disposer$Record);
descriptor: (Ljava/lang/Object;Lcom/sun/prism/impl/Disposer$Record;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: getstatic com.sun.prism.impl.Disposer.disposerInstance:Lcom/sun/prism/impl/Disposer;
aload 0
aload 1
invokevirtual com.sun.prism.impl.Disposer.add:(Ljava/lang/Object;Lcom/sun/prism/impl/Disposer$Record;)V
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 target Ljava/lang/Object;
0 2 1 rec Lcom/sun/prism/impl/Disposer$Record;
MethodParameters:
Name Flags
target
rec
public static void disposeRecord(com.sun.prism.impl.Disposer$Record);
descriptor: (Lcom/sun/prism/impl/Disposer$Record;)V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: getstatic com.sun.prism.impl.Disposer.disposerInstance:Lcom/sun/prism/impl/Disposer;
aload 0
invokevirtual com.sun.prism.impl.Disposer.addToDisposalQueue:(Lcom/sun/prism/impl/Disposer$Record;)V
1: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 rec Lcom/sun/prism/impl/Disposer$Record;
MethodParameters:
Name Flags
rec
public static void cleanUp();
descriptor: ()V
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=0, args_size=0
0: getstatic com.sun.prism.impl.Disposer.disposerInstance:Lcom/sun/prism/impl/Disposer;
invokevirtual com.sun.prism.impl.Disposer.disposeUnreachables:()V
1: getstatic com.sun.prism.impl.Disposer.disposerInstance:Lcom/sun/prism/impl/Disposer;
invokevirtual com.sun.prism.impl.Disposer.processDisposalQueue:()V
2: return
LocalVariableTable:
Start End Slot Name Signature
private synchronized void add(java.lang.Object, com.sun.prism.impl.Disposer$Record);
descriptor: (Ljava/lang/Object;Lcom/sun/prism/impl/Disposer$Record;)V
flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
Code:
stack=4, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 1
instanceof com.sun.prism.impl.Disposer$Target
ifeq 2
1: aload 1
checkcast com.sun.prism.impl.Disposer$Target
invokeinterface com.sun.prism.impl.Disposer$Target.getDisposerReferent:()Ljava/lang/Object;
astore 1
2: StackMap locals:
StackMap stack:
getstatic com.sun.prism.impl.Disposer.refType:I
iconst_1
if_icmpne 5
3: new java.lang.ref.PhantomReference
dup
aload 1
aload 0
getfield com.sun.prism.impl.Disposer.queue:Ljava/lang/ref/ReferenceQueue;
invokespecial java.lang.ref.PhantomReference.<init>:(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
astore 3
start local 3 4: goto 9
end local 3 StackMap locals:
StackMap stack:
5: getstatic com.sun.prism.impl.Disposer.refType:I
iconst_2
if_icmpne 8
6: new java.lang.ref.SoftReference
dup
aload 1
aload 0
getfield com.sun.prism.impl.Disposer.queue:Ljava/lang/ref/ReferenceQueue;
invokespecial java.lang.ref.SoftReference.<init>:(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
astore 3
start local 3 7: goto 9
end local 3 8: StackMap locals:
StackMap stack:
new java.lang.ref.WeakReference
dup
aload 1
aload 0
getfield com.sun.prism.impl.Disposer.queue:Ljava/lang/ref/ReferenceQueue;
invokespecial java.lang.ref.WeakReference.<init>:(Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
astore 3
start local 3 9: StackMap locals: java.lang.ref.Reference
StackMap stack:
aload 0
getfield com.sun.prism.impl.Disposer.records:Ljava/util/Hashtable;
aload 3
aload 2
invokevirtual java.util.Hashtable.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
10: return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 11 0 this Lcom/sun/prism/impl/Disposer;
0 11 1 target Ljava/lang/Object;
0 11 2 rec Lcom/sun/prism/impl/Disposer$Record;
4 5 3 ref Ljava/lang/ref/Reference;
7 8 3 ref Ljava/lang/ref/Reference;
9 11 3 ref Ljava/lang/ref/Reference;
MethodParameters:
Name Flags
target
rec
private synchronized void addToDisposalQueue(com.sun.prism.impl.Disposer$Record);
descriptor: (Lcom/sun/prism/impl/Disposer$Record;)V
flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getfield com.sun.prism.impl.Disposer.disposalQueue:Ljava/util/LinkedList;
aload 1
invokevirtual java.util.LinkedList.add:(Ljava/lang/Object;)Z
pop
1: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/sun/prism/impl/Disposer;
0 2 1 rec Lcom/sun/prism/impl/Disposer$Record;
MethodParameters:
Name Flags
rec
private synchronized void disposeUnreachables();
descriptor: ()V
flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
Code:
stack=4, locals=3, args_size=1
start local 0 0: goto 10
start local 1 1: StackMap locals: java.lang.Object
StackMap stack:
aload 1
checkcast java.lang.ref.Reference
invokevirtual java.lang.ref.Reference.clear:()V
2: aload 0
getfield com.sun.prism.impl.Disposer.records:Ljava/util/Hashtable;
aload 1
invokevirtual java.util.Hashtable.remove:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast com.sun.prism.impl.Disposer$Record
astore 2
start local 2 3: aload 2
invokeinterface com.sun.prism.impl.Disposer$Record.dispose:()V
4: aconst_null
astore 1
5: aconst_null
astore 2
end local 2 6: goto 10
StackMap locals:
StackMap stack: java.lang.Exception
7: astore 2
start local 2 8: getstatic java.lang.System.out:Ljava/io/PrintStream;
new java.lang.StringBuilder
dup
ldc "Exception while removing reference: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
aload 2
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokevirtual java.io.PrintStream.println:(Ljava/lang/String;)V
9: aload 2
invokevirtual java.lang.Exception.printStackTrace:()V
end local 2 end local 1 10: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.prism.impl.Disposer.queue:Ljava/lang/ref/ReferenceQueue;
invokevirtual java.lang.ref.ReferenceQueue.poll:()Ljava/lang/ref/Reference;
dup
astore 1
start local 1 11: ifnonnull 1
12: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Lcom/sun/prism/impl/Disposer;
1 10 1 obj Ljava/lang/Object;
11 13 1 obj Ljava/lang/Object;
3 6 2 rec Lcom/sun/prism/impl/Disposer$Record;
8 10 2 e Ljava/lang/Exception;
Exception table:
from to target type
1 6 7 Class java.lang.Exception
private synchronized void processDisposalQueue();
descriptor: ()V
flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
Code:
stack=1, locals=1, args_size=1
start local 0 0: goto 2
1: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.prism.impl.Disposer.disposalQueue:Ljava/util/LinkedList;
invokevirtual java.util.LinkedList.remove:()Ljava/lang/Object;
checkcast com.sun.prism.impl.Disposer$Record
invokeinterface com.sun.prism.impl.Disposer$Record.dispose:()V
2: StackMap locals:
StackMap stack:
aload 0
getfield com.sun.prism.impl.Disposer.disposalQueue:Ljava/util/LinkedList;
invokevirtual java.util.LinkedList.isEmpty:()Z
ifeq 1
3: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lcom/sun/prism/impl/Disposer;
}
SourceFile: "Disposer.java"
NestMembers:
com.sun.prism.impl.Disposer$Record com.sun.prism.impl.Disposer$Target
InnerClasses:
public abstract Record = com.sun.prism.impl.Disposer$Record of com.sun.prism.impl.Disposer
public abstract Target = com.sun.prism.impl.Disposer$Target of com.sun.prism.impl.Disposer