public class freemarker.cache.MruCacheStorage implements freemarker.cache.CacheStorageWithGetSize
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: freemarker.cache.MruCacheStorage
super_class: java.lang.Object
{
private final freemarker.cache.MruCacheStorage$MruEntry strongHead;
descriptor: Lfreemarker/cache/MruCacheStorage$MruEntry;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final freemarker.cache.MruCacheStorage$MruEntry softHead;
descriptor: Lfreemarker/cache/MruCacheStorage$MruEntry;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.Map map;
descriptor: Ljava/util/Map;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.lang.ref.ReferenceQueue refQueue;
descriptor: Ljava/lang/ref/ReferenceQueue;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int strongSizeLimit;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final int softSizeLimit;
descriptor: I
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private int strongSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
private int softSize;
descriptor: I
flags: (0x0002) ACC_PRIVATE
public void <init>(int, int);
descriptor: (II)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=3, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new freemarker.cache.MruCacheStorage$MruEntry
dup
invokespecial freemarker.cache.MruCacheStorage$MruEntry.<init>:()V
putfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
2: aload 0
new freemarker.cache.MruCacheStorage$MruEntry
dup
invokespecial freemarker.cache.MruCacheStorage$MruEntry.<init>:()V
putfield freemarker.cache.MruCacheStorage.softHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
3: aload 0
getfield freemarker.cache.MruCacheStorage.softHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.linkAfter:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
4: aload 0
new java.util.HashMap
dup
invokespecial java.util.HashMap.<init>:()V
putfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
5: aload 0
new java.lang.ref.ReferenceQueue
dup
invokespecial java.lang.ref.ReferenceQueue.<init>:()V
putfield freemarker.cache.MruCacheStorage.refQueue:Ljava/lang/ref/ReferenceQueue;
6: aload 0
iconst_0
putfield freemarker.cache.MruCacheStorage.strongSize:I
7: aload 0
iconst_0
putfield freemarker.cache.MruCacheStorage.softSize:I
8: iload 1
ifge 9
new java.lang.IllegalArgumentException
dup
ldc "strongSizeLimit < 0"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
9: StackMap locals: freemarker.cache.MruCacheStorage int int
StackMap stack:
iload 2
ifge 10
new java.lang.IllegalArgumentException
dup
ldc "softSizeLimit < 0"
invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
athrow
10: StackMap locals:
StackMap stack:
aload 0
iload 1
putfield freemarker.cache.MruCacheStorage.strongSizeLimit:I
11: aload 0
iload 2
putfield freemarker.cache.MruCacheStorage.softSizeLimit:I
12: return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Lfreemarker/cache/MruCacheStorage;
0 13 1 strongSizeLimit I
0 13 2 softSizeLimit I
MethodParameters:
Name Flags
strongSizeLimit
softSizeLimit
public java.lang.Object get(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual freemarker.cache.MruCacheStorage.removeClearedReferences:()V
1: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast freemarker.cache.MruCacheStorage$MruEntry
astore 2
start local 2 2: aload 2
ifnonnull 4
3: aconst_null
areturn
4: StackMap locals: freemarker.cache.MruCacheStorage$MruEntry
StackMap stack:
aload 0
aload 2
aconst_null
invokevirtual freemarker.cache.MruCacheStorage.relinkEntryAfterStrongHead:(Lfreemarker/cache/MruCacheStorage$MruEntry;Ljava/lang/Object;)V
5: aload 2
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getValue:()Ljava/lang/Object;
astore 3
start local 3 6: aload 3
instanceof freemarker.cache.MruCacheStorage$MruReference
ifeq 8
7: aload 3
checkcast freemarker.cache.MruCacheStorage$MruReference
invokevirtual freemarker.cache.MruCacheStorage$MruReference.get:()Ljava/lang/Object;
areturn
8: StackMap locals: java.lang.Object
StackMap stack:
aload 3
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lfreemarker/cache/MruCacheStorage;
0 9 1 key Ljava/lang/Object;
2 9 2 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
6 9 3 value Ljava/lang/Object;
MethodParameters:
Name Flags
key
public void put(java.lang.Object, java.lang.Object);
descriptor: (Ljava/lang/Object;Ljava/lang/Object;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
invokevirtual freemarker.cache.MruCacheStorage.removeClearedReferences:()V
1: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast freemarker.cache.MruCacheStorage$MruEntry
astore 3
start local 3 2: aload 3
ifnonnull 7
3: new freemarker.cache.MruCacheStorage$MruEntry
dup
aload 1
aload 2
invokespecial freemarker.cache.MruCacheStorage$MruEntry.<init>:(Ljava/lang/Object;Ljava/lang/Object;)V
astore 3
4: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 1
aload 3
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
5: aload 0
aload 3
invokevirtual freemarker.cache.MruCacheStorage.linkAfterStrongHead:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
6: goto 8
7: StackMap locals: freemarker.cache.MruCacheStorage$MruEntry
StackMap stack:
aload 0
aload 3
aload 2
invokevirtual freemarker.cache.MruCacheStorage.relinkEntryAfterStrongHead:(Lfreemarker/cache/MruCacheStorage$MruEntry;Ljava/lang/Object;)V
8: StackMap locals:
StackMap stack:
return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lfreemarker/cache/MruCacheStorage;
0 9 1 key Ljava/lang/Object;
0 9 2 value Ljava/lang/Object;
2 9 3 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
MethodParameters:
Name Flags
key
value
public void remove(java.lang.Object);
descriptor: (Ljava/lang/Object;)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual freemarker.cache.MruCacheStorage.removeClearedReferences:()V
1: aload 0
aload 1
invokevirtual freemarker.cache.MruCacheStorage.removeInternal:(Ljava/lang/Object;)V
2: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lfreemarker/cache/MruCacheStorage;
0 3 1 key Ljava/lang/Object;
MethodParameters:
Name Flags
key
private void removeInternal(java.lang.Object);
descriptor: (Ljava/lang/Object;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=3, args_size=2
start local 0 start local 1 0: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 1
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast freemarker.cache.MruCacheStorage$MruEntry
astore 2
start local 2 1: aload 2
ifnull 3
2: aload 0
aload 2
invokevirtual freemarker.cache.MruCacheStorage.unlinkEntryAndInspectIfSoft:(Lfreemarker/cache/MruCacheStorage$MruEntry;)Z
pop
3: StackMap locals: freemarker.cache.MruCacheStorage$MruEntry
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lfreemarker/cache/MruCacheStorage;
0 4 1 key Ljava/lang/Object;
1 4 2 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
MethodParameters:
Name Flags
key
public void clear();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.makeHead:()V
1: aload 0
getfield freemarker.cache.MruCacheStorage.softHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.linkAfter:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
2: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
invokeinterface java.util.Map.clear:()V
3: aload 0
aload 0
iconst_0
dup_x1
putfield freemarker.cache.MruCacheStorage.softSize:I
putfield freemarker.cache.MruCacheStorage.strongSize:I
4: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.cache.MruCacheStorage.refQueue:Ljava/lang/ref/ReferenceQueue;
invokevirtual java.lang.ref.ReferenceQueue.poll:()Ljava/lang/ref/Reference;
ifnonnull 4
5: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lfreemarker/cache/MruCacheStorage;
private void relinkEntryAfterStrongHead(freemarker.cache.MruCacheStorage$MruEntry, java.lang.Object);
descriptor: (Lfreemarker/cache/MruCacheStorage$MruEntry;Ljava/lang/Object;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
aload 1
invokevirtual freemarker.cache.MruCacheStorage.unlinkEntryAndInspectIfSoft:(Lfreemarker/cache/MruCacheStorage$MruEntry;)Z
ifeq 9
aload 2
ifnonnull 9
1: aload 1
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getValue:()Ljava/lang/Object;
checkcast freemarker.cache.MruCacheStorage$MruReference
astore 3
start local 3 2: aload 3
invokevirtual freemarker.cache.MruCacheStorage$MruReference.get:()Ljava/lang/Object;
astore 4
start local 4 3: aload 4
ifnull 7
4: aload 1
aload 4
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.setValue:(Ljava/lang/Object;)V
5: aload 0
aload 1
invokevirtual freemarker.cache.MruCacheStorage.linkAfterStrongHead:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
6: goto 12
7: StackMap locals: freemarker.cache.MruCacheStorage$MruReference java.lang.Object
StackMap stack:
aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 3
invokevirtual freemarker.cache.MruCacheStorage$MruReference.getKey:()Ljava/lang/Object;
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 4 end local 3 8: goto 12
9: StackMap locals:
StackMap stack:
aload 2
ifnull 11
10: aload 1
aload 2
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.setValue:(Ljava/lang/Object;)V
11: StackMap locals:
StackMap stack:
aload 0
aload 1
invokevirtual freemarker.cache.MruCacheStorage.linkAfterStrongHead:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
12: StackMap locals:
StackMap stack:
return
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 13 0 this Lfreemarker/cache/MruCacheStorage;
0 13 1 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
0 13 2 newValue Ljava/lang/Object;
2 8 3 mref Lfreemarker/cache/MruCacheStorage$MruReference;
3 8 4 strongValue Ljava/lang/Object;
MethodParameters:
Name Flags
entry
newValue
private void linkAfterStrongHead(freemarker.cache.MruCacheStorage$MruEntry);
descriptor: (Lfreemarker/cache/MruCacheStorage$MruEntry;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=4, args_size=2
start local 0 start local 1 0: aload 1
aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.linkAfter:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
1: aload 0
getfield freemarker.cache.MruCacheStorage.strongSize:I
aload 0
getfield freemarker.cache.MruCacheStorage.strongSizeLimit:I
if_icmpne 17
2: aload 0
getfield freemarker.cache.MruCacheStorage.softHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getPrevious:()Lfreemarker/cache/MruCacheStorage$MruEntry;
astore 2
start local 2 3: aload 2
aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
if_acmpeq 18
4: aload 2
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.unlink:()V
5: aload 0
getfield freemarker.cache.MruCacheStorage.softSizeLimit:I
ifle 15
6: aload 2
aload 0
getfield freemarker.cache.MruCacheStorage.softHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.linkAfter:(Lfreemarker/cache/MruCacheStorage$MruEntry;)V
7: aload 2
new freemarker.cache.MruCacheStorage$MruReference
dup
aload 2
aload 0
getfield freemarker.cache.MruCacheStorage.refQueue:Ljava/lang/ref/ReferenceQueue;
invokespecial freemarker.cache.MruCacheStorage$MruReference.<init>:(Lfreemarker/cache/MruCacheStorage$MruEntry;Ljava/lang/ref/ReferenceQueue;)V
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.setValue:(Ljava/lang/Object;)V
8: aload 0
getfield freemarker.cache.MruCacheStorage.softSize:I
aload 0
getfield freemarker.cache.MruCacheStorage.softSizeLimit:I
if_icmpne 13
9: aload 0
getfield freemarker.cache.MruCacheStorage.strongHead:Lfreemarker/cache/MruCacheStorage$MruEntry;
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getPrevious:()Lfreemarker/cache/MruCacheStorage$MruEntry;
astore 3
start local 3 10: aload 3
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.unlink:()V
11: aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 3
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getKey:()Ljava/lang/Object;
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 3 12: goto 18
13: StackMap locals: freemarker.cache.MruCacheStorage$MruEntry
StackMap stack:
aload 0
dup
getfield freemarker.cache.MruCacheStorage.softSize:I
iconst_1
iadd
putfield freemarker.cache.MruCacheStorage.softSize:I
14: goto 18
15: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.cache.MruCacheStorage.map:Ljava/util/Map;
aload 2
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getKey:()Ljava/lang/Object;
invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 2 16: goto 18
17: StackMap locals:
StackMap stack:
aload 0
dup
getfield freemarker.cache.MruCacheStorage.strongSize:I
iconst_1
iadd
putfield freemarker.cache.MruCacheStorage.strongSize:I
18: StackMap locals:
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 19 0 this Lfreemarker/cache/MruCacheStorage;
0 19 1 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
3 16 2 lruStrong Lfreemarker/cache/MruCacheStorage$MruEntry;
10 12 3 lruSoft Lfreemarker/cache/MruCacheStorage$MruEntry;
MethodParameters:
Name Flags
entry
private boolean unlinkEntryAndInspectIfSoft(freemarker.cache.MruCacheStorage$MruEntry);
descriptor: (Lfreemarker/cache/MruCacheStorage$MruEntry;)Z
flags: (0x0002) ACC_PRIVATE
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 1
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.unlink:()V
1: aload 1
invokevirtual freemarker.cache.MruCacheStorage$MruEntry.getValue:()Ljava/lang/Object;
instanceof freemarker.cache.MruCacheStorage$MruReference
ifeq 4
2: aload 0
dup
getfield freemarker.cache.MruCacheStorage.softSize:I
iconst_1
isub
putfield freemarker.cache.MruCacheStorage.softSize:I
3: iconst_1
ireturn
4: StackMap locals:
StackMap stack:
aload 0
dup
getfield freemarker.cache.MruCacheStorage.strongSize:I
iconst_1
isub
putfield freemarker.cache.MruCacheStorage.strongSize:I
5: iconst_0
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lfreemarker/cache/MruCacheStorage;
0 6 1 entry Lfreemarker/cache/MruCacheStorage$MruEntry;
MethodParameters:
Name Flags
entry
private void removeClearedReferences();
descriptor: ()V
flags: (0x0002) ACC_PRIVATE
Code:
stack=2, locals=2, args_size=1
start local 0 0: StackMap locals:
StackMap stack:
aload 0
getfield freemarker.cache.MruCacheStorage.refQueue:Ljava/lang/ref/ReferenceQueue;
invokevirtual java.lang.ref.ReferenceQueue.poll:()Ljava/lang/ref/Reference;
checkcast freemarker.cache.MruCacheStorage$MruReference
astore 1
start local 1 1: aload 1
ifnonnull 3
2: goto 5
3: StackMap locals: freemarker.cache.MruCacheStorage$MruReference
StackMap stack:
aload 0
aload 1
invokevirtual freemarker.cache.MruCacheStorage$MruReference.getKey:()Ljava/lang/Object;
invokevirtual freemarker.cache.MruCacheStorage.removeInternal:(Ljava/lang/Object;)V
end local 1 4: goto 0
5: StackMap locals:
StackMap stack:
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lfreemarker/cache/MruCacheStorage;
1 4 1 ref Lfreemarker/cache/MruCacheStorage$MruReference;
public int getStrongSizeLimit();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.cache.MruCacheStorage.strongSizeLimit:I
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/cache/MruCacheStorage;
public int getSoftSizeLimit();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.cache.MruCacheStorage.softSizeLimit:I
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/cache/MruCacheStorage;
public int getStrongSize();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield freemarker.cache.MruCacheStorage.strongSize:I
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/cache/MruCacheStorage;
public int getSoftSize();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokevirtual freemarker.cache.MruCacheStorage.removeClearedReferences:()V
1: aload 0
getfield freemarker.cache.MruCacheStorage.softSize:I
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lfreemarker/cache/MruCacheStorage;
public int getSize();
descriptor: ()I
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
invokevirtual freemarker.cache.MruCacheStorage.getSoftSize:()I
aload 0
invokevirtual freemarker.cache.MruCacheStorage.getStrongSize:()I
iadd
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lfreemarker/cache/MruCacheStorage;
}
SourceFile: "MruCacheStorage.java"
NestMembers:
freemarker.cache.MruCacheStorage$MruEntry freemarker.cache.MruCacheStorage$MruReference
InnerClasses:
private final MruEntry = freemarker.cache.MruCacheStorage$MruEntry of freemarker.cache.MruCacheStorage
private MruReference = freemarker.cache.MruCacheStorage$MruReference of freemarker.cache.MruCacheStorage