我更喜欢对不将其状态存储在字段中的类实例使用静态字段,而不是匿名内部类。我认为,如果方法 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.请告诉我此案例的良好做法。
最佳答案
I think this good practice for to less memory and GC usage if method sort(or other) call very often.
嗯,情况正好相反。如果您担心内存问题,static
字段将一直保留在内存中,直到类被卸载。
但是,这里更关心的是可读性,而不是内存或性能。如果您发现自己使用 Comparator
实例可能是 2-3 次或更多,最好将其存储在字段中,以避免重复代码。更好的是,将字段标记为final
。如果您只想使用它一次,则将其存储为 static
字段是没有意义的。
But my colleague prefer to use anonymous-inner-classes for this case saying that JIT will optimize it.
我不明白你的同事说的是什么样的优化。您应该向他/她询问进一步的澄清。 IMO,这只是一个不成熟的优化,你真的不应该被打扰。
关于java - 匿名内部类与静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770557/