动态创建对象并将其存储为字段

时间:2015-06-22 11:10:15

标签: java performance object

我有这个循环,运行大约1,000,000次。

                 while ((line = br.readLine()) != null) {
                      if(!(line.isEmpty())){

                         data = new JSONObject(line);
                         name = (String)data.get("name");
                         surname = (String)data.get("surname");
                         ar.put(name, surname);  //an array

                     }
                }

在数据方面的效率方面有什么优势(如果有的话),名称和姓氏是与在运行时创建新动态对象相比较的字段

                 while ((line = br.readLine()) != null) {
                      if(!(line.isEmpty())){

                         JSONObject data = new JSONObject(line);
                         String name = (String)data.get("name");
                         String surname = (String)data.get("surname");
                         ar.put(name, surname); //an array

                     }
                }

2 个答案:

答案 0 :(得分:4)

没有任何区别,因为您只更改了变量的范围。由于您没有使用范围之外的变量,因此生成的字节码也是相同的(您可以使用df = df.drop(df.columns[range(11,36)], axis=1) 进行尝试。)

因此,为清晰起见,请使用第二种风格。

编辑:事实上,如果您将变量作为类的字段,则字节码可能不同。性能将取决于JIT将如何结束它,但不太可能存在显着差异(即便如此,第二种方式更容易优化 - >可能更快)。

答案 1 :(得分:0)

第一种方法的执行速度应该更快,因为 对每个变量(数据,名称,姓氏)使用单个 引用每一个循环
第二种方法 为每个循环中的每个方法创建一个新的 引用。所以你最终创建了每个参与者的百万个参考文献!!

然而创建一个引用是一个恒定的时间操作,不应该打扰你。您应该专注于使您的代码可读和清洁。因此,由于最佳实践表明变量的范围尽可能小,所以如果我知道这种方法会运行多次,我只会采用第一种方法。 (我的意思是如果只运行一次,你可以再等几毫秒)

效果提示:由于您关注性能,并且假设您大致知道迭代次数,我建议您初始化{{1}的容量 }