繁体   English   中英

哪个更有效率? (垃圾收集)

[英]Which is more efficient? (Garbage Collection)

好的,我的问题如下:说您有一个像下面这样的课程。 在运行时:
每次循环运行时,都会创建一个新的动作侦听器吗?
第二类比第一类更有效率吗?
在第一堂课中,正在创建100个新的ActionListener对象吗?

public class Foo extends JFrame {
    public Foo() {
        for (int i = 0; i < 100; i++) {
            JTextField someField = new JTextField();
            someField.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    //DO SOMETHING HERE
                }
            });
        }
    }
}

与一流的比较:

public class Foo extends JFrame {
    public Foo() {
        ActionListener someActionListener = new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                //DO SOMETHING HERE
            }
        }; 
        for (int i = 0; i < 100; i++) {
            JTextField someField = new JTextField();
            someField.addActionListener(someActionListener);
        }
    }
}

第二个示例可以节省1-2 KB(约合0.003美分),但是鉴于功能不同,正确性更为重要。

相比之下,您在最低工资上花费的1秒钟时间价值0.2美分,因此,即使您花了不到一秒钟的时间来思考,也可能浪费时间。 ;)

在第一个程序中,您正在运行new ActionListener() 100次。 您最终将获得100个ActionListener对象。

在第二个程序中,您只运行一次new ActionListener() 因此,您最终只会得到1个ActionListener对象。

显然,在第一个程序中,您将占用更多的内存。 但是程序并不等效,因为在第一个程序中,每个JTextField都有自己的ActionListener ,在第二个程序中,它们都共享一个。

每次循环运行时,都会创建一个新的动作侦听器吗?

在头等舱,是的。

第二类比第一类更有效率吗?

第二个类为每个新的JTextField()对象提供相同的动作侦听器。 这样效率更高(节省一些内存)。 但是,您应该知道所有100个JTextField()对象都具有相同的操作侦听器

另外,如果要解决这种情况,则应将someActionListener = new ActionListener()移到Foo的构造函数中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM