我正在创建一个客户端类,它将连接到不同类型的数据库。以下是我要执行的代码段。

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,并且对这些对象没有任何其他引用,则是,它们将被收集。

09-26 15:21