java - 匿名内部类与静态字段

标签 java static anonymous-inner-class

我更喜欢对不将其状态存储在字段中的类实例使用静态字段,而不是匿名内部类。我认为,如果方法 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/

相关文章:

java - 如何更改 JTextArea/JTextLabel 的可见性?

java - List.of 给出错误 : cannot find symbol error

java - 静态 block 和 Spring Autowiring 哪个更好?

用于从动态应用程序创建静态二进制文件的 Linux 工具

java - 保存匿名内部类中生成的数据

java - 我如何获取这个参数?

java - Spring Boot 中不会自动保存 ID

java - JPA 中的批量更新(Toplink)

C 相当于 Java 静态 block (启动时运行一次)

java - 对匿名类与匿名内部类感到困惑