私は現在、アプリケーションをメンテナンスしており、Spring配線でSingletonとして定義されたオブジェクトの多くが、そのメソッド内の他のオブジェクトの新しいインスタンスを作成することに気づいています。Spring Singletonで新しいインスタンスを作成するとメモリリークが発生しますか?
たとえば、login()メソッドが呼び出されるたびにLoginDetailsの新しいインスタンスを作成するLoginService Singletonがあります。 LoginDetailsは一時的なもので、login()メソッドの実行にのみ必要です。
私が質問したのは、SpringがLoginService用の単一のオブジェクトを作成した場合、それを作成したオブジェクトへの参照としてガーベジコレクションとしてマークされたLoginDetailsのインスタンスは決して終了しませんでしたか?
私が何を意味するかの例は次のとおりです。
public void deleteCustomer(Long customerId, HttpServletRequest request) {
CustomerType customerType = new CustomerType();
customerType.setCustomerId(customerId);
CustomerDeleteRequestType deleteRequest = new CustomerDeleteRequestType();
deleteRequest.setCustomer(customerType);
CustomerDeleteResponseType deleteResponse = mmmwsClient.executeRequest(deleteRequest);
log.debug("Delete Response Recieved from Server for Customer Name Update " + deleteResponse.getServiceResult());
}
使用するフィールドが唯一の方法で変数ではなく、私はこの方法が終了すると、それらへの参照が破壊されるだろうと思いインスタンス変数であるため?
Spring Singletonに関する私の理解は正しいですか?
おかげ
私のシングルトンクラスにはインスタンス変数はありません。新しいオブジェクトは作成され、メソッドフィールドのみに配置され、使用されます。問題の更新例(ごめんなさい。これは最初の部分に含める必要があります): – Elwood
メソッドはフィールドではありません。メソッドにオブジェクトを配置しません。メソッド内でオブジェクトを使用します。方法は単なる論理です。ローカルに作成されたオブジェクトを除き、メソッドの実行中にのみメモリ内にオブジェクトを保持しません。メソッドが返ってくると、作成したオブジェクトがオブジェクトによって参照されていなければ、ガベージコレクションされます。 –
それは理にかなっています。私たちがメモリリークを起こしているかどうかは問題ではないかと思います!答える時間をとってくれてありがとう。 – Elwood