SSLを使用してRESTful APIと通信しようとしています。クライアントアプリケーション全体は、次のような基本的な接続方法に依存します。JavaクライアントでHTTPS接続を最適化する
URL url = null;
HttpsURLConnection connection = null;
BufferedReader bufferedReader = null;
InputStream is = null;
try {
url = new URL(TARGET_URL);
HostnameVerifier hv = new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod(requestType);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Language", "en-US");
connection.setSSLSocketFactory(sslSocketFactory);
is = connection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(is));
String line;
StringBuffer lines = new StringBuffer();
while ((line = bufferedReader.readLine()) != null) {
lines.append(line).append(LINE_BREAKER);
}
return lines.toString();
} catch (Exception e) {
System.out.println("Exception is :"+e.toString());
return e.toString();
}
}
これはうまくいきますが、より効率的な方法がありますか?私たちはApache HTTPClientを試しました。それはすごくシンプルなAPIを持っていますが、上記のコードとApache HTTPClientのパフォーマンスをYourKitと比較すると、後者は最初のものより多くのオブジェクトを作成していました。これをどのように最適化するのですか?
これは面白そう、しかし、あなたが特定の問題を抱えている場合には言及していません。 HTTPClient経由で生成されるオブジェクトの数が実際のパフォーマンスの問題を引き起こしていますか?またはあなたは[事前に最適化していますか?](http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize)? – OverZealous
実際の問題は、生成されるオブジェクトの数が多すぎます。これにより、サーバーが消費するメモリが増加し、メモリがMAX_HEAP_SPACEに達するとGCがアクティブになります。このGCがアクティブになると、いつかCPU使用率も増加します。だから、生成されるオブジェクトの数を減らすことができれば、CPUを冷やしたり、サーバーを冷たく保つのに役立ちます。 – Nikhil