Repository: qpid-jms Updated Branches: refs/heads/master 816773722 -> 615fb0848
QPIDJMS-390 Use an atomic int field updater in ProviderFuture Avoid allocation of AtomicBoolean instances for each ProviderFuture instance and instead use an Atomic field updater to reduce GC overhead Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/615fb084 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/615fb084 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/615fb084 Branch: refs/heads/master Commit: 615fb084877c430c2d040427d78423ac8bab245b Parents: 8167737 Author: Timothy Bish <[email protected]> Authored: Fri Jun 8 13:09:43 2018 -0400 Committer: Timothy Bish <[email protected]> Committed: Fri Jun 8 13:09:43 2018 -0400 ---------------------------------------------------------------------- .../org/apache/qpid/jms/provider/ProviderFuture.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/615fb084/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java index 61168d4..01b3c6e 100644 --- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java +++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/ProviderFuture.java @@ -19,7 +19,7 @@ package org.apache.qpid.jms.provider; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import org.apache.qpid.jms.util.IOExceptionSupport; @@ -28,11 +28,16 @@ import org.apache.qpid.jms.util.IOExceptionSupport; */ public class ProviderFuture implements AsyncResult { - private final AtomicBoolean completer = new AtomicBoolean(); + private static final AtomicIntegerFieldUpdater<ProviderFuture> COMPLETE_UPDATER = + AtomicIntegerFieldUpdater.newUpdater(ProviderFuture.class, "complete"); + private final CountDownLatch latch = new CountDownLatch(1); private final ProviderSynchronization synchronization; private volatile Throwable error; + @SuppressWarnings("unused") + private volatile int complete; + public ProviderFuture() { this(null); } @@ -48,7 +53,7 @@ public class ProviderFuture implements AsyncResult { @Override public void onFailure(Throwable result) { - if (completer.compareAndSet(false, true)) { + if (COMPLETE_UPDATER.compareAndSet(this, 0, 1)) { error = result; if (synchronization != null) { synchronization.onPendingFailure(error); @@ -59,7 +64,7 @@ public class ProviderFuture implements AsyncResult { @Override public void onSuccess() { - if (completer.compareAndSet(false, true)) { + if (COMPLETE_UPDATER.compareAndSet(this, 0, 1)) { if (synchronization != null) { synchronization.onPendingSuccess(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
