【发布时间】:2013-02-15 19:53:24
【问题描述】:
我们遇到了内存泄漏问题,我们怀疑下面的代码可能是原因,我们在单例类中有一个静态方法,并且怀疑它在直接引用时会导致内存泄漏。
// This class is wired in spring xml and loaded as spring bean
public class SpringSingletonRestClient{
// instance method to make a web-service call
public ServiceResponse getResponseFromARestService(String RequestParam){.....}
// public static helper bean mapping method, that is used outside this class
// for converting the service response object to different object
public static DomainResponse convertServiceResponseToDomainResponse(ServiceResponse serviceResponse){ //conversion logic.... }
}
}
用法
Class MainClass {
//injected as spring bean
SpringSingletonRestClient client;
public void someMethod(){
ServiceResponse serviceResponse = client.getResponseFromARestService(...);
DomainResponse domainResponse = SpringSingletonRestClient.convertServiceResponseToDomainResponse(serviceResponse);
// use domainResponse object
.......
.......
}
}
请让我知道是否需要更多说明,因为我刚刚添加了伪。 我们正在运行到高内存使用率,我们怀疑使用在由 spring 启动的类中声明的静态方法没有正确收集垃圾,并且因此发生内存泄漏。
问题 - 在 Spring 启动的单例类中使用静态方法是否很糟糕,即使该静态方法被直接引用使用而不被其实例变量使用。
【问题讨论】:
-
我不明白为什么使用静态方法会导致泄漏,但我应该承认,当类是单例时,假定它永远不应该被收集(如果你期望的话)跨度>
-
是的,我怀疑这一点,但在我找到根目录之前不太确定。
标签: java spring static singleton static-methods