Java 性能 : When clearing a object is it better to set to null or create a new object.

标签 java performance object null new-operator

当重复使用一个对象时,是通过设置为空来清除数据,还是实例化一个新对象更好?

   Object a = new Object();
   for(...){
       ...
       a = null;
       **OR**
       a = new Object();
    }

这是我所指的例子:

Customer a = new Customer();
Collection<Customer> data = new ArrayList<Customer>();

        while (rs != null && rs.next()) {   
            a = new Customer();
            a.setCustId(rs.getLong("CUST_ID"));
            a.setPerNo(period);
            a.setName(rs.getString("cust_nm"));

            if(a!= null)
                data.add(a);
        }

我想知道

a = new Customer();

是执行此操作的最佳方法,或者是否应该以不同的方式执行此操作以节省内存并获得最佳性能,因为每个循环都有要输入的新客户信息。据我了解,如果您创建一个新客户,您创建一个新对象并将 a 指向该新对象。所以 a 指向的旧对象将被垃圾收集器拾取 - 与将其设置为 null 的情况相同。这是正确的理解吗?

最佳答案

我更愿意:

for (...) {
    Object a = new Object();
    ...
}

为什么要使范围大于它需要的范围?

同样,除非我需要一个新对象,否则我不会为此创建一个对象。

虽然从给出的描述中很难说更多 - 如果您能提供更完整和真实的示例,我们也许能够提出更具体的建议。

(请注意,没有迹象表明您想要重复使用对象,就像重复使用变量一样。它们是非常不同的概念。)

编辑:看看你的具体例子,我会这样写:

Collection<Customer> data = new ArrayList<Customer>();

while (rs != null && rs.next()) {   
    Customer a = new Customer();
    a.setCustId(rs.getLong("CUST_ID"));
    a.setPerNo(period);
    a.setName(rs.getString("cust_nm"));

    data.add(a);
}

请注意,这不会创建符合垃圾回收条件的 任何 Customer 对象 - 而您的原始代码会创建 Customer 的实例在进入循环之前,然后忽略新创建的对象,而是创建一个新对象并重新分配 a 的值。

关于Java 性能 : When clearing a object is it better to set to null or create a new object.,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6861159/

相关文章:

java - Android WebView 始终为 loadUrl 上的 javascript getElementById 返回 null

java - 使用多个构造函数但没有 getter 方法对遗留代码进行单元测试

javascript - 推断组序列的算法名称

jquery - 在 jQuery post 参数中使用对象

c# - 将数据存储在数组、对象、结构、列表或类中。 C#

java - 使用 Java 从文件中读取值

java - 将多个值从一个页面传递到另一页面

python - 3000 keyhash 的 Redis 值获取大约需要 10 秒(python 3.5)

javascript - Ionic 2 滚动性能问题

mysql 在带有连接查询的小表上性能低下