Skip to content

Commit 6e4890f

Browse files
seemingly simple change to remove AtomicBoolean relieves GC pressure substantially
1 parent d5dc284 commit 6e4890f

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

src/com/sun/jna/internal/Cleaner.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,12 @@ private CleanerRef add(final CleanerRef toAdd) {
8888
}
8989

9090
// Remove by node reference
91-
private void remove(final CleanerRef node) {
92-
uncleaned.remove(node);
91+
private boolean remove(final CleanerRef node) {
92+
return uncleaned.remove(node);
9393
}
9494

9595
private static class CleanerRef extends PhantomReference<Object> implements Cleanable {
9696
private volatile Runnable cleanupTask;
97-
private AtomicBoolean cleaned = new AtomicBoolean(false);
9897

9998
CleanerRef(Object referent, ReferenceQueue<? super Object> q, Runnable cleanupTask) {
10099
super(referent, q);
@@ -103,8 +102,7 @@ private static class CleanerRef extends PhantomReference<Object> implements Clea
103102

104103
@Override
105104
public void clean() {
106-
if (cleaned.compareAndSet(false, true)) {
107-
INSTANCE.remove(this);
105+
if (INSTANCE.remove(this)) {
108106
cleanupTask.run();
109107
}
110108
}

0 commit comments

Comments
 (0)