use field access replace getter, use array replace ArrayList.

This commit is contained in:
wenshao
2017-01-21 02:03:42 +08:00
parent a84cdc70a0
commit 55165e2f22
2 changed files with 14 additions and 11 deletions
@@ -46,8 +46,8 @@ public final class DruidConnectionHolder {
private final Connection conn;
private final List<ConnectionEventListener> connectionEventListeners = new CopyOnWriteArrayList<ConnectionEventListener>();
private final List<StatementEventListener> statementEventListeners = new CopyOnWriteArrayList<StatementEventListener>();
private final long connectTimeMillis;
private transient long lastActiveTimeMillis;
protected final long connectTimeMillis;
protected transient long lastActiveTimeMillis;
private long useCount = 0;
private long lastNotEmptyWaitNanos;
@@ -2254,7 +2254,9 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
}
public void shrink(boolean checkTime) {
final List<DruidConnectionHolder> evictList = new ArrayList<DruidConnectionHolder>();
final DruidConnectionHolder[] evictArray = new DruidConnectionHolder[this.maxActive];
int evictArrayLength = 0;
try {
lock.lockInterruptibly();
} catch (InterruptedException e) {
@@ -2269,34 +2271,34 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
if (checkTime) {
if (phyTimeoutMillis > 0) {
long phyConnectTimeMillis = currentTimeMillis - connection.getTimeMillis();
long phyConnectTimeMillis = currentTimeMillis - connection.connectTimeMillis;
if (phyConnectTimeMillis > phyTimeoutMillis) {
evictList.add(connection);
evictArray[evictArrayLength++] = connection;
continue;
}
}
long idleMillis = currentTimeMillis - connection.getLastActiveTimeMillis();
long idleMillis = currentTimeMillis - connection.lastActiveTimeMillis;
if (idleMillis < minEvictableIdleTimeMillis) {
break;
}
if (checkTime && i < checkCount) {
evictList.add(connection);
evictArray[evictArrayLength++] = connection;
} else if (idleMillis > maxEvictableIdleTimeMillis) {
evictList.add(connection);
evictArray[evictArrayLength++] = connection;
}
} else {
if (i < checkCount) {
evictList.add(connection);
evictArray[evictArrayLength++] = connection;
} else {
break;
}
}
}
int removeCount = evictList.size();
int removeCount = evictArrayLength;
if (removeCount > 0) {
System.arraycopy(connections, removeCount, connections, 0, poolingCount - removeCount);
Arrays.fill(connections, poolingCount - removeCount, poolingCount, null);
@@ -2306,7 +2308,8 @@ public class DruidDataSource extends DruidAbstractDataSource implements DruidDat
lock.unlock();
}
for (DruidConnectionHolder item : evictList) {
for (int i = 0; i < evictArrayLength; ++i) {
DruidConnectionHolder item = evictArray[i];
Connection connection = item.getConnection();
JdbcUtils.close(connection);
destroyCount.incrementAndGet();