You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/10/10 12:55:39 UTC
svn commit: r1764080 - in /qpid/java/trunk:
bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/
broker-core/src/main/java/org/apache/qpid/server/model/adapter/
broker-core/src/main/java/org/apache/qpid/server/store/
broker-core/src/main/jav...
Author: lquack
Date: Mon Oct 10 12:55:39 2016
New Revision: 1764080
URL: http://svn.apache.org/viewvc?rev=1764080&view=rev
Log:
QPID-7447: [Java Broker] Performance Improvements
* Stop taking defensive copy in AMQConnection#getSessionModels()
* Use Long instead of Date in TransactionTimeoutTicker
* Prevent unnecessary iterator alloctions in SelectorThread when lists are empty
Modified:
qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java
qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java
Modified: qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java (original)
+++ qpid/java/trunk/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AbstractBDBMessageStore.java Mon Oct 10 12:55:39 2016
@@ -1348,6 +1348,7 @@ public abstract class AbstractBDBMessage
private void doPostCommitActions()
{
+ // QPID-7447: prevent unnecessary allocation of empty iterator
if (!_postCommitActions.isEmpty())
{
for (Runnable action : _postCommitActions)
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/adapter/SessionAdapter.java Mon Oct 10 12:55:39 2016
@@ -216,20 +216,20 @@ public final class SessionAdapter extend
final VirtualHost virtualhost = (VirtualHost) addressSpace;
final List<Ticker> tickers = new ArrayList<>(4);
- final Supplier<Date> transactionStartTimeSupplier = new Supplier<Date>()
+ final Supplier<Long> transactionStartTimeSupplier = new Supplier<Long>()
{
@Override
- public Date get()
+ public Long get()
{
- return SessionAdapter.this.getTransactionStartTime();
+ return SessionAdapter.this._session.getTransactionStartTime();
}
};
- final Supplier<Date> transactionUpdateTimeSupplier = new Supplier<Date>()
+ final Supplier<Long> transactionUpdateTimeSupplier = new Supplier<Long>()
{
@Override
- public Date get()
+ public Long get()
{
- return SessionAdapter.this.getTransactionUpdateTime();
+ return SessionAdapter.this._session.getTransactionUpdateTime();
}
};
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/store/AbstractJDBCMessageStore.java Mon Oct 10 12:55:39 2016
@@ -1193,6 +1193,7 @@ public abstract class AbstractJDBCMessag
private void doPostCommitActions()
{
+ // QPID-7447: prevent unnecessary allocation of empty iterator
if (!_postCommitActions.isEmpty())
{
for (Runnable action : _postCommitActions)
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AMQPConnection.java Mon Oct 10 12:55:39 2016
@@ -23,7 +23,7 @@ package org.apache.qpid.server.transport
import java.net.SocketAddress;
import java.security.AccessControlContext;
import java.security.Principal;
-import java.util.List;
+import java.util.Collection;
import javax.security.auth.Subject;
@@ -83,11 +83,11 @@ public interface AMQPConnection<C extend
void stopConnection();
/**
- * Returns the a list of session models. Required to return a copy.
+ * Returns the a view of session models. Callers may not modify the returned view Required to return a copy.
*
* @return list of sessions
*/
- List<? extends AMQSessionModel<?>> getSessionModels();
+ Collection<? extends AMQSessionModel<?>> getSessionModels();
void resetStatistics();
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/AggregateTicker.java Mon Oct 10 12:55:39 2016
@@ -32,6 +32,7 @@ public class AggregateTicker implements
public int getTimeToNextTick(final long currentTime)
{
int nextTick = Integer.MAX_VALUE;
+ // QPID-7447: prevent unnecessary allocation of empty iterator
if (!_tickers.isEmpty())
{
for (Ticker ticker : _tickers)
@@ -46,9 +47,13 @@ public class AggregateTicker implements
public int tick(final long currentTime)
{
int nextTick = Integer.MAX_VALUE;
- for(Ticker ticker : _tickers)
+ // QPID-7447: prevent unnecessary allocation of empty iterator
+ if (!_tickers.isEmpty())
{
- nextTick = Math.min(ticker.tick(currentTime), nextTick);
+ for(Ticker ticker : _tickers)
+ {
+ nextTick = Math.min(ticker.tick(currentTime), nextTick);
+ }
}
return nextTick;
}
@@ -71,6 +76,7 @@ public class AggregateTicker implements
@Override
public void notifySchedulingDelay(final long schedulingDelay)
{
+ // QPID-7447: prevent unnecessary allocation of empty iterator
if (!_tickers.isEmpty())
{
for (Ticker ticker : _tickers)
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/SelectorThread.java Mon Oct 10 12:55:39 2016
@@ -150,7 +150,8 @@ class SelectorThread extends Thread
}
}
- return toBeScheduled;
+ // QPID-7447: prevent unnecessary allocation of empty iterator
+ return toBeScheduled.isEmpty() ? Collections.<NonBlockingConnection>emptyList() : toBeScheduled;
}
private List<NonBlockingConnection> processSelectionKeys()
@@ -261,7 +262,8 @@ class SelectorThread extends Thread
}
}
- return unregisterableConnections;
+ // QPID-7447: prevent unnecessary allocation of empty iterator
+ return unregisterableConnections.isEmpty() ? Collections.<NonBlockingConnection>emptyList() : unregisterableConnections;
}
private void performSelect()
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/transport/TransactionTimeoutTicker.java Mon Oct 10 12:55:39 2016
@@ -21,7 +21,6 @@
package org.apache.qpid.server.transport;
-import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
import com.google.common.base.Supplier;
@@ -33,7 +32,7 @@ public class TransactionTimeoutTicker im
{
private final long _timeoutValue;
private final Action<Long> _notification;
- private final Supplier<Date> _timeSupplier;
+ private final Supplier<Long> _timeSupplier;
private final long _notificationRepeatPeriod;
private AtomicLong _accumulatedSchedulingDelay = new AtomicLong();
@@ -44,12 +43,12 @@ public class TransactionTimeoutTicker im
public TransactionTimeoutTicker(long timeoutValue,
long notificationRepeatPeriod,
- Supplier<Date> timeStampSupplier,
+ Supplier<Long> timeStampSupplier,
Action<Long> notification)
{
_timeoutValue = timeoutValue;
_notification = notification;
- _lastTransactionTimeStamp = timeStampSupplier.get().getTime();
+ _lastTransactionTimeStamp = timeStampSupplier.get();
_timeSupplier = timeStampSupplier;
_notificationRepeatPeriod = notificationRepeatPeriod;
}
@@ -57,7 +56,7 @@ public class TransactionTimeoutTicker im
@Override
public int getTimeToNextTick(final long currentTime)
{
- final long transactionTimeStamp = _timeSupplier.get().getTime();
+ final long transactionTimeStamp = _timeSupplier.get();
int tick = calculateTimeToNextTick(currentTime, transactionTimeStamp);
if (tick <= 0 && _nextNotificationTime > currentTime)
{
@@ -69,7 +68,7 @@ public class TransactionTimeoutTicker im
@Override
public int tick(final long currentTime)
{
- final long transactionTimeStamp = _timeSupplier.get().getTime();
+ final long transactionTimeStamp = _timeSupplier.get();
int tick = calculateTimeToNextTick(currentTime, transactionTimeStamp);
if (tick <= 0)
{
Modified: qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java (original)
+++ qpid/java/trunk/broker-core/src/test/java/org/apache/qpid/server/transport/TransactionTimeoutTickerTest.java Mon Oct 10 12:55:39 2016
@@ -29,8 +29,6 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import java.util.Date;
-
import com.google.common.base.Supplier;
import org.mockito.InOrder;
@@ -41,7 +39,7 @@ public class TransactionTimeoutTickerTes
{
private TransactionTimeoutTicker _ticker;
- private Supplier<Date> _dateSupplier = mock(Supplier.class);
+ private Supplier<Long> _dateSupplier = mock(Supplier.class);
private Action<Long> _notificationAction = mock(Action.class);
private long _timeoutValue = 100;
private long _notificationRepeatPeriod = 5000;
@@ -50,7 +48,7 @@ public class TransactionTimeoutTickerTes
{
final long timeNow = System.currentTimeMillis();
- when(_dateSupplier.get()).thenReturn(new Date(0));
+ when(_dateSupplier.get()).thenReturn(0L);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -68,7 +66,7 @@ public class TransactionTimeoutTickerTes
final long timeNow = System.currentTimeMillis();
final long transactionTime = timeNow - 90;
- when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+ when(_dateSupplier.get()).thenReturn(transactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -87,7 +85,7 @@ public class TransactionTimeoutTickerTes
final long timeNow = System.currentTimeMillis();
final long transactionTime = timeNow - 90;
- when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+ when(_dateSupplier.get()).thenReturn(transactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -109,7 +107,7 @@ public class TransactionTimeoutTickerTes
final long firstTransactionTime = timeNow - 10;
// First transaction
- when(_dateSupplier.get()).thenReturn(new Date(firstTransactionTime));
+ when(_dateSupplier.get()).thenReturn(firstTransactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -124,7 +122,7 @@ public class TransactionTimeoutTickerTes
timeNow += 100;
final long secondTransactionTime = timeNow - 5;
- when(_dateSupplier.get()).thenReturn(new Date(secondTransactionTime));
+ when(_dateSupplier.get()).thenReturn(secondTransactionTime);
final int expectedTickForSecondTransaction = 95;
assertTickTime("Unexpected ticker value for second transaction",
@@ -140,7 +138,7 @@ public class TransactionTimeoutTickerTes
final long firstTransactionTime = timeNow - 10;
// First transaction
- when(_dateSupplier.get()).thenReturn(new Date(firstTransactionTime));
+ when(_dateSupplier.get()).thenReturn(firstTransactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -156,7 +154,7 @@ public class TransactionTimeoutTickerTes
timeNow += 100;
final long secondTransactionTime = timeNow - 5;
- when(_dateSupplier.get()).thenReturn(new Date(secondTransactionTime));
+ when(_dateSupplier.get()).thenReturn(secondTransactionTime);
final int expectedTickForSecondTransaction = 95;
assertTickTime("Unexpected ticker value for second transaction",
@@ -171,7 +169,7 @@ public class TransactionTimeoutTickerTes
long timeNow = System.currentTimeMillis();
final long transactionTime = timeNow - 110;
- when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+ when(_dateSupplier.get()).thenReturn(transactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
@@ -192,7 +190,7 @@ public class TransactionTimeoutTickerTes
long timeNow = System.currentTimeMillis();
final long transactionTime = timeNow - 110;
- when(_dateSupplier.get()).thenReturn(new Date(transactionTime));
+ when(_dateSupplier.get()).thenReturn(transactionTime);
_ticker = new TransactionTimeoutTicker(_timeoutValue, _notificationRepeatPeriod,
_dateSupplier,
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/AMQPConnection_0_10.java Mon Oct 10 12:55:39 2016
@@ -24,9 +24,9 @@ import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
-import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
@@ -313,7 +313,7 @@ public class AMQPConnection_0_10 extends
return _connection.getRemoteContainerName();
}
- public List<ServerSession> getSessionModels()
+ public Collection<? extends AMQSessionModel<?>> getSessionModels()
{
return _connection.getSessionModels();
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnection.java Mon Oct 10 12:55:39 2016
@@ -28,6 +28,8 @@ import java.security.AccessController;
import java.security.Principal;
import java.security.PrivilegedAction;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
@@ -335,16 +337,16 @@ public class ServerConnection extends Co
super.removeSession(ssn);
}
- public List<ServerSession> getSessionModels()
+ public Collection<? extends ServerSession> getSessionModels()
{
- List<ServerSession> sessions = new ArrayList<>();
- for (Session ssn : getChannels())
- {
- sessions.add((ServerSession) ssn);
- }
- return sessions;
+ return Collections.unmodifiableCollection(getChannels());
}
+ @Override
+ protected Collection<ServerSession> getChannels()
+ {
+ return (Collection<ServerSession>) super.getChannels();
+ }
/**
* @return authorizedSubject
@@ -502,11 +504,11 @@ public class ServerConnection extends Co
private class ProcessPendingIterator implements Iterator<Runnable>
{
- private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+ private final Collection<? extends ServerSession> _sessionsWithPending;
private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
private ProcessPendingIterator()
{
- _sessionsWithPending = getSessionModels();
+ _sessionsWithPending = new ArrayList<>(getSessionModels());
_sessionIterator = _sessionsWithPending.iterator();
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerSession.java Mon Oct 10 12:55:39 2016
@@ -1209,6 +1209,7 @@ public class ServerSession extends Sessi
consumerListNeedsRefreshing = true;
}
+ // QPID-7447: prevent unnecessary allocation of empty iterator
Iterator<ConsumerTarget> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget>emptyIterator() : _consumersWithPendingWork.iterator();
boolean consumerHasMoreWork = false;
Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java Mon Oct 10 12:55:39 2016
@@ -3782,6 +3782,7 @@ public class AMQChannel
consumerListNeedsRefreshing = true;
}
+ // QPID-7447: prevent unnecessary allocation of empty iterator
Iterator<ConsumerTarget_0_8> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget_0_8>emptyIterator() : _consumersWithPendingWork.iterator();
boolean consumerHasMoreWork = false;
Modified: qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Impl.java Mon Oct 10 12:55:39 2016
@@ -31,6 +31,7 @@ import java.security.AccessController;
import java.security.Principal;
import java.security.PrivilegedAction;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -849,9 +850,9 @@ public class AMQPConnection_0_8Impl
}
@Override
- public List<AMQChannel> getSessionModels()
+ public Collection<? extends AMQChannel> getSessionModels()
{
- return new ArrayList<>(_channelMap.values());
+ return Collections.unmodifiableCollection(_channelMap.values());
}
@Override
@@ -1414,11 +1415,11 @@ public class AMQPConnection_0_8Impl
private class ProcessPendingIterator implements Iterator<Runnable>
{
- private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+ private final Collection<? extends AMQChannel> _sessionsWithPending;
private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
private ProcessPendingIterator()
{
- _sessionsWithPending = getSessionModels();
+ _sessionsWithPending = new ArrayList<>(getSessionModels());
_sessionIterator = _sessionsWithPending.iterator();
}
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/AMQPConnection_1_0.java Mon Oct 10 12:55:39 2016
@@ -1423,9 +1423,9 @@ public class AMQPConnection_1_0 extends
return _remoteContainerId;
}
- public List<Session_1_0> getSessionModels()
+ public Collection<? extends Session_1_0> getSessionModels()
{
- return new ArrayList<>(_sessions);
+ return Collections.unmodifiableCollection(_sessions);
}
public void unblock()
@@ -1532,11 +1532,11 @@ public class AMQPConnection_1_0 extends
private class ProcessPendingIterator implements Iterator<Runnable>
{
- private final List<? extends AMQSessionModel<?>> _sessionsWithPending;
+ private final Collection<? extends AMQSessionModel<?>> _sessionsWithPending;
private Iterator<? extends AMQSessionModel<?>> _sessionIterator;
private ProcessPendingIterator()
{
- _sessionsWithPending = getSessionModels();
+ _sessionsWithPending = new ArrayList<>(getSessionModels());
_sessionIterator = _sessionsWithPending.iterator();
}
Modified: qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/Session_1_0.java Mon Oct 10 12:55:39 2016
@@ -1544,6 +1544,7 @@ public class Session_1_0 implements AMQS
consumerListNeedsRefreshing = true;
}
+ // QPID-7447: prevent unnecessary allocation of empty iterator
Iterator<ConsumerTarget_1_0> iter = _consumersWithPendingWork.isEmpty() ? Collections.<ConsumerTarget_1_0>emptyIterator() : _consumersWithPendingWork.iterator();
boolean consumerHasMoreWork = false;
while(iter.hasNext())
Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/bytebuffer/QpidByteBuffer.java Mon Oct 10 12:55:39 2016
@@ -649,6 +649,7 @@ public class QpidByteBuffer
QpidByteBuffer dest) throws SSLException
{
final ByteBuffer[] src;
+ // QPID-7447: prevent unnecessary allocations
if (buffers.isEmpty())
{
src = EMPTY_BYTE_BUFFER_ARRAY;
Modified: qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java?rev=1764080&r1=1764079&r2=1764080&view=diff
==============================================================================
--- qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java (original)
+++ qpid/java/trunk/common/src/main/java/org/apache/qpid/transport/Connection.java Mon Oct 10 12:55:39 2016
@@ -721,7 +721,7 @@ public class Connection extends Connecti
return connectionLost.get();
}
- protected Collection<Session> getChannels()
+ protected Collection<? extends Session> getChannels()
{
return new ArrayList<>(channels.values());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org