サーブレット(同時使用率がかなり高い)が発信URLConnectionを作成して、通常のサーバー側処理ロジックの一部としてデータRESTスタイルを取得するユースケースがあります。URLは潜在的に異なるため、サーブレットが呼び出されるたびに接続が作成されて使用されます(ただし、ドメインは常に同じです)。ポートと接続がアプリケーションサーバー上で必要な時間より長く開いたままにならないように、これが可能な限り最適に行われるようにしたいのですが、該当する場合は再利用されます。
Javadocは少し曖昧に見えます-URLConnectionについて:
「リクエスト後にURLConnectionのInputStreamまたはOutputStreamでclose()メソッドを呼び出すと、特定のプロトコル仕様で異なる動作が指定されていない限り、このインスタンスに関連付けられたネットワークリソースが解放される可能性があります。」
HttpURLConnectionの場合:
'各HttpURLConnectionインスタンスは単一のリクエストを行うために使用されますが、HTTPサーバーへの基盤となるネットワーク接続は他のインスタンスによって透過的に共有される場合があります。リクエスト後にHttpURLConnectionのInputStreamまたはOutputStreamでclose()メソッドを呼び出すと、このインスタンスに関連付けられているネットワークリソースが解放される場合がありますが、共有の永続的な接続には影響しません。その時点で持続的接続がアイドル状態である場合、disconnect()メソッドを呼び出すと、基になるソケットが閉じる可能性があります。
現在、URLConnectionが使用されており、以下のコードに従って入力ストリームのみが閉じられています(エラー処理とURL読み取りは、質問に関連しないため削除されました)。私の考えでは、これによりストリームリソースがクリーンアップされますが、可能であれば基盤となるソケットの再利用が可能になります(リクエストは常に同じドメインに送信され、URLパスが異なるため)。さらに最適化する方法についてのアドバイスをいただければ幸いです。
URL requestUrl = new URL(location);
URLConnection urlConnection = requestUrl.openConnection();
BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "UTF-8"));
//reading code here
br.close();