我使用与字符串实习生相同的想法在 java 中创建了一个实习生池。简单地说,我维护一个
WeakHashMap<T, T>
每次映射包含对象时,它都会返回相同的对象,好处是可以节省java堆内存。例如,我有一个这样的 Person 类:
public Person() {
String name;
int age;
String employer;
@Override
public equals(Pbject obj) {
......
}
@Override
public hashCode() {
......
}
}
它没有使类唯一的字段(无主键)。问题是当我想检查地图是否包含特定的人时,我需要先创建一个临时人员,以便 map.contains() 方法可以为这个人调用 equals() 方法。结果,在我运行profiler查看内存使用情况后,我可以看到GC收集了很多临时对象,这肯定会导致更多的GC和CPU使用。有没有一种方法可以在不创建太多临时对象的情况下实现实习生池的想法?
ps 我从这篇文章中得到了实习生池的想法:Generic InternPool<T> in Java?