Use ArrayList instead of LinkedList for known size
Spring JDBC unlike other modules uses LinkedList instead of ArrayList in several places. There is a large body of evidence suggesting that on contemporary hardware ArrayList is both faster and has less overhead than even in degenerate cases of empty lists [3] or unknown size. There are two places in Spring JDBC where the size of the list is known in advance and an ArrayList of the correct final size can be created [1] https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8011200 [2] http://cliffc.org/blog/2017/11/05/modern-hardware-performance-cache-lines/ [3] https://bugs.openjdk.java.net/browse/JDK-8011200 Issue: SPR-16378
This commit is contained in:
parent
c88f11f958
commit
91e39d558f
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
package org.springframework.jdbc.core;
|
package org.springframework.jdbc.core;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -184,12 +185,16 @@ public class SqlParameter {
|
||||||
* to a List of SqlParameter objects as used in this package.
|
* to a List of SqlParameter objects as used in this package.
|
||||||
*/
|
*/
|
||||||
public static List<SqlParameter> sqlTypesToAnonymousParameterList(@Nullable int... types) {
|
public static List<SqlParameter> sqlTypesToAnonymousParameterList(@Nullable int... types) {
|
||||||
List<SqlParameter> result = new LinkedList<>();
|
List<SqlParameter> result;
|
||||||
if (types != null) {
|
if (types != null) {
|
||||||
|
result = new ArrayList<>(types.length);
|
||||||
for (int type : types) {
|
for (int type : types) {
|
||||||
result.add(new SqlParameter(type));
|
result.add(new SqlParameter(type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
result = new LinkedList<>();
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -423,7 +422,7 @@ public abstract class NamedParameterUtils {
|
||||||
*/
|
*/
|
||||||
public static List<SqlParameter> buildSqlParameterList(ParsedSql parsedSql, SqlParameterSource paramSource) {
|
public static List<SqlParameter> buildSqlParameterList(ParsedSql parsedSql, SqlParameterSource paramSource) {
|
||||||
List<String> paramNames = parsedSql.getParameterNames();
|
List<String> paramNames = parsedSql.getParameterNames();
|
||||||
List<SqlParameter> params = new LinkedList<>();
|
List<SqlParameter> params = new ArrayList<>(paramNames.size());
|
||||||
for (String paramName : paramNames) {
|
for (String paramName : paramNames) {
|
||||||
params.add(new SqlParameter(
|
params.add(new SqlParameter(
|
||||||
paramName, paramSource.getSqlType(paramName), paramSource.getTypeName(paramName)));
|
paramName, paramSource.getSqlType(paramName), paramSource.getTypeName(paramName)));
|
||||||
|
|
Loading…
Reference in New Issue