我正在创建一个客户端类,它将连接到不同类型的数据库。以下是我要执行的代码段。
public class Client{
private static Map<ApplicationTypeEnum, Connection> connectionPool = new HashMap<>();
public void init() throws Exception {
try {
Connection con1 = getConnection(someparams...);
connectionPool.put("app-1",con1)
Connection con2 = getConnection(someparams...);
connectionPool.put("app-2",con2)
} catch (Exception pe) {
throw pe;
}
}
}
现在
Connection
对象是init
的本地对象,因此当控件超出Connection
方法时,有可能会垃圾回收init
对象。 最佳答案
只要存在指向这些对象的引用,它们就不会被垃圾回收。在您的情况下,您拥有指向地图的静态变量connectionPool
,其中包含这些对象。如果从上述映射中删除这些对象,或者将另一个映射分配给不带这些对象的connectionPool
,并且对这些对象没有任何其他引用,则是,它们将被收集。