gpt4 book ai didi

java - 奇怪的 DAO 设计导致 PermGen 错误?

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:34 24 4
gpt4 key购买 nike

我继承了一个非常奇怪的设计,以前的联系公司用它来用 Java 实现 DAO。我相信这是我不断收到 PermGen 错误的原因,但想看看其他人的想法。

每个 DAO 都有一个或多个私有(private)静态最终字段。这些是表类型。表是一个抽象类。每个表的实现都是内联实现的。在静态 block 中,这些实现被放入静态 HashMap 中。

由于 OBJ_MAP 保存了 Table 类的实现,这是否有可能导致 ClassLoader 永远无法被垃圾收集?

import java.sql.Types;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MyDAO {
private static final Table DESCRIPTION = new TableImpl("MYDESC", Types.VARCHAR);
private static final Table CODE = new TableImpl("MYCODE", Types.VARCHAR);

private static final Map<Table, String> OBJ_MAP = new HashMap<Table, String>();

static {

OBJ_MAP.put(DESCRIPTION, "description");
OBJ_MAP.put(CODE, "code");
}

@SuppressWarnings("unchecked")
public List<BusinessType> getAllBusinessTypes() {
return DAOUtil.executeObjectSelect("Select MYDESC, MYCODE,
from MYTABLE", BusinessType.class,
OBJ_MAP, new BusinessType());
}
}

最佳答案

如果每个具有某些类类型的静态最终字段的类都阻止 ClassLoader 被垃圾收集,那么我们在任何程序中都不会走得太远,因此除非您可以提供更多信息(例如“DAO 是从类加载器 A 加载的,但 Table 实现来自类加载器 B”,但这可行),我将选择“不,这不可能是原因。”

关于java - 奇怪的 DAO 设计导致 PermGen 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com