0

我更喜欢将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.请告诉我这个案例的好做法。

4

1 回答 1

2

如果方法排序(或其他)经常调用,我认为这是减少内存和 GC 使用的好习惯。

嗯,这是相反的方式。如果您对内存感到困扰,那么这些static字段将一直存在于内存中,直到类被卸载。

然而,这里关注的更多是可读性,而不是内存或性能。如果你发现自己使用了一个Comparator实例可能会使用 2-3 次,甚至更多,最好将其存储在一个字段中,以避免重复代码。更好的是,标记字段final。如果您只打算使用它一次,那么将它存储为static字段是没有意义的。

但是我的同事更喜欢在这种情况下使用匿名内部类,说 JIT 会优化它。

我不明白你的同事在谈论什么样的优化。您应该要求他/她进一步澄清。IMO,这只是一个未成熟的优化,你真的不应该被打扰。

于 2013-12-25T08:19:27.103 回答