我继承了一个非常奇怪的设计,以前的联系公司用来在 Java 中实现 DAO。我相信这是我不断收到 PermGen 错误的原因,但想看看其他人的想法。
每个 DAO 都有一个或多个私有静态最终字段。这些是表类型。表是一个抽象类。每个 Table 实现都是在线实现的。在静态块中,这些实现被放入静态哈希映射中。
是否有可能因为 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());
}
}