【发布时间】:2014-05-14 15:52:49
【问题描述】:
在代码审查期间,我的一位同事查看了这段代码:
public List<Item> extractItems(List<Object[]> results) {
return Lists.transform(results, new Function<Object[], Item>() {
@Override
public Item apply(Object[] values) {
...
}
});
}
他建议改成这样:
public List<Item> extractItems(List<Object[]> results) {
return Lists.transform(results, getTransformer());
}
private Function<Object[], Item> transformer;
private Function<Object[], Item> getTransformer() {
if(transformer == null) {
transformer = new Function<Object[], Item>() {
@Override
public Item apply(Object[] values) {
...
}
};
}
return transformer;
}
因此,我们正在考虑采用 new Function() 构造,并将其移至成员变量并在下次重新使用。
虽然我理解他的逻辑和推理,但我想我并不认为我应该为我创建的每个可能的遵循这种模式的对象执行此操作。似乎有一些很好的理由不这样做,但我不确定。
你的想法是什么?我们应该总是缓存这样重复创建的对象吗?
更新
Function 是 google guava 的东西,没有状态。有几个人指出了这种变化的非线程安全方面,这是完全有效的,但实际上并不是一个问题。我更多的是问构造vs缓存小对象的做法,哪个更好?
【问题讨论】:
-
这里的问题似乎很主观,最好放在Code Review Exchange
-
谢谢,我不知道那个交流。
标签: java performance object caching memory