From 4ef805fa1d9f7451a0a8498d03c45c289c3703e1 Mon Sep 17 00:00:00 2001 From: Jake Wharton Date: Wed, 24 Dec 2014 15:47:10 -0800 Subject: [PATCH] Remove some needless allocations. These individually do not contribute a lot, but as a whole end up being seen on allocation tracker. --- .../com/squareup/okhttp/ConnectionPool.java | 4 ++-- .../com/squareup/okhttp/ConnectionSpec.java | 8 ++++---- .../com/squareup/okhttp/internal/Util.java | 18 ++++++++++-------- .../okhttp/internal/http/RouteSelector.java | 4 +++- .../internal/tls/OkHostnameVerifier.java | 18 +++++++++++------- 5 files changed, 30 insertions(+), 22 deletions(-) diff --git a/okhttp/src/main/java/com/squareup/okhttp/ConnectionPool.java b/okhttp/src/main/java/com/squareup/okhttp/ConnectionPool.java index 980fb89f5..5a09b2ad0 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/ConnectionPool.java +++ b/okhttp/src/main/java/com/squareup/okhttp/ConnectionPool.java @@ -109,8 +109,8 @@ public final class ConnectionPool { } } } - for (Connection expiredConnection : expiredConnections) { - Util.closeQuietly(expiredConnection.getSocket()); + for (int i = 0, size = expiredConnections.size(); i < size; i++) { + Util.closeQuietly(expiredConnections.get(i).getSocket()); } } }; diff --git a/okhttp/src/main/java/com/squareup/okhttp/ConnectionSpec.java b/okhttp/src/main/java/com/squareup/okhttp/ConnectionSpec.java index c7049f07a..862be0f44 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/ConnectionSpec.java +++ b/okhttp/src/main/java/com/squareup/okhttp/ConnectionSpec.java @@ -149,10 +149,10 @@ public final class ConnectionSpec { * supported by {@code sslSocket}. */ private ConnectionSpec supportedSpec(SSLSocket sslSocket) { - List supportedCipherSuites = Util.intersect(Arrays.asList(cipherSuites), - Arrays.asList(sslSocket.getSupportedCipherSuites())); - List supportedTlsVersions = Util.intersect(Arrays.asList(tlsVersions), - Arrays.asList(sslSocket.getSupportedProtocols())); + List supportedCipherSuites = + Util.intersect(cipherSuites, sslSocket.getSupportedCipherSuites()); + List supportedTlsVersions = + Util.intersect(tlsVersions, sslSocket.getSupportedProtocols()); return new Builder(this) .cipherSuites(supportedCipherSuites.toArray(new String[supportedCipherSuites.size()])) .tlsVersions(supportedTlsVersions.toArray(new String[supportedTlsVersions.size()])) diff --git a/okhttp/src/main/java/com/squareup/okhttp/internal/Util.java b/okhttp/src/main/java/com/squareup/okhttp/internal/Util.java index 30f4d28d8..6f081d230 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/internal/Util.java +++ b/okhttp/src/main/java/com/squareup/okhttp/internal/Util.java @@ -30,7 +30,6 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -270,16 +269,19 @@ public final class Util { } /** - * Returns a copy of {@code a} containing only elements also in {@code b}. The returned elements - * are in the same order as in {@code a}. + * Returns a mutable copy of {@code first} containing only elements also in {@code second}. The + * returned elements are in the same order as in {@code first}. */ - public static List intersect(Collection a, Collection b) { + public static List intersect(T[] first, T[] second) { List result = new ArrayList<>(); - for (T t : a) { - if (b.contains(t)) { - result.add(t); + for (T a : first) { + for (T b : second) { + if (a.equals(b)) { + result.add(b); + break; + } } } - return Collections.unmodifiableList(result); + return result; } } diff --git a/okhttp/src/main/java/com/squareup/okhttp/internal/http/RouteSelector.java b/okhttp/src/main/java/com/squareup/okhttp/internal/http/RouteSelector.java index f49d6a7f5..2772dbebb 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/internal/http/RouteSelector.java +++ b/okhttp/src/main/java/com/squareup/okhttp/internal/http/RouteSelector.java @@ -309,7 +309,9 @@ public final class RouteSelector { /** Prepares the connection specs to attempt. */ private void resetConnectionSpecs() { connectionSpecs = new ArrayList<>(); - for (ConnectionSpec spec : address.getConnectionSpecs()) { + List specs = address.getConnectionSpecs(); + for (int i = 0, size = specs.size(); i < size; i++) { + ConnectionSpec spec = specs.get(i); if (request.isHttps() == spec.isTls()) { connectionSpecs.add(spec); } diff --git a/okhttp/src/main/java/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java b/okhttp/src/main/java/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java index 82bb7c929..740de1bcd 100644 --- a/okhttp/src/main/java/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java +++ b/okhttp/src/main/java/com/squareup/okhttp/internal/tls/OkHostnameVerifier.java @@ -82,8 +82,9 @@ public final class OkHostnameVerifier implements HostnameVerifier { * Returns true if {@code certificate} matches {@code ipAddress}. */ private boolean verifyIpAddress(String ipAddress, X509Certificate certificate) { - for (String altName : getSubjectAltNames(certificate, ALT_IPA_NAME)) { - if (ipAddress.equalsIgnoreCase(altName)) { + List altNames = getSubjectAltNames(certificate, ALT_IPA_NAME); + for (int i = 0, size = altNames.size(); i < size; i++) { + if (ipAddress.equalsIgnoreCase(altNames.get(i))) { return true; } } @@ -96,9 +97,10 @@ public final class OkHostnameVerifier implements HostnameVerifier { private boolean verifyHostName(String hostName, X509Certificate certificate) { hostName = hostName.toLowerCase(Locale.US); boolean hasDns = false; - for (String altName : getSubjectAltNames(certificate, ALT_DNS_NAME)) { + List altNames = getSubjectAltNames(certificate, ALT_DNS_NAME); + for (int i = 0, size = altNames.size(); i < size; i++) { hasDns = true; - if (verifyHostName(hostName, altName)) { + if (verifyHostName(hostName, altNames.get(i))) { return true; } } @@ -116,9 +118,11 @@ public final class OkHostnameVerifier implements HostnameVerifier { } public static List allSubjectAltNames(X509Certificate certificate) { - List result = new ArrayList<>(); - result.addAll(getSubjectAltNames(certificate, ALT_IPA_NAME)); - result.addAll(getSubjectAltNames(certificate, ALT_DNS_NAME)); + List altIpaNames = getSubjectAltNames(certificate, ALT_IPA_NAME); + List altDnsNames = getSubjectAltNames(certificate, ALT_DNS_NAME); + List result = new ArrayList<>(altIpaNames.size() + altDnsNames.size()); + result.addAll(altIpaNames); + result.addAll(altDnsNames); return result; }