我更喜欢将static
字段用于不在字段中存储其状态的类的实例,而不是匿名内部类。如果方法sort
(或其他)经常调用,我认为这样可以减少内存和GC的使用。但我的同事更喜欢在这个案例中使用匿名内部类,说JIT会优化它。
class MyClass {
//non fields of class
/*access modifier*/ final static Comparator<MyClass> comparator = new Comparator<MyClass>(){
public compare(MyClass o1, MyClass o2){
//comparing logic
}
}
}
用法示例(我更喜欢):
List<MyClass> list = ...;
Collection.sort(list, MyClass.comparator);
用法示例(我的同事更喜欢):
List<MyClass> list = ...;
Collection.sort(list, new Comparator<MyClass>(){
public compare(MyClass o1, MyClass o2){
//comparing logic
}
});
1。在openJDK优化中使用匿名内部类?
2。请告诉我这个案例的良好做法。
答案 0 :(得分:2)
如果方法排序(或其他)经常调用,我认为这样可以减少内存和GC的使用。
嗯,反之亦然。如果你对内存感到困扰,static
字段将存在于内存中,直到卸载类为止。
然而,关注的更多是这里的可读性而不是内存或性能。如果您发现自己使用Comparator
实例可能是2-3次或更多,最好将其存储在字段中,以避免重复代码。更好的是,标记字段final
。如果您只打算使用一次,则无法将其存储为static
字段。
但是我的同事更倾向于使用匿名内部类来说明JIT会优化它。
我不明白你的同事在谈论什么样的优化。你应该让他/她进一步澄清。 IMO,这只是一个早熟的优化,你真的不应该被打扰。