[英]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.