繁体   English   中英

无限循环内的Java对象创建

[英]Java Object Creation Inside Infinite Loop

我正在尝试编写守护进程。 以下是我的示例代码片段。

public void listener() {
    MyObject obj = null;

    while(true) {
        obj = new MyObject();
        obj.process();
    }
}

还是我应该这样创造

public void listener() {
    MyObject obj = new MyObject();

    while(true) {
        obj.process();
    }
}

process()方法将进行数据库select并将其insert into表中,连接Web服务并获取响应消息并将该消息发送给用户。

哪一种是正确的方法?

这完全取决于MyObject功能以及process(()的实现方式。作为一般概念,如果MyObject是无状态的,并且一个process调用不会留下任何可能干扰后续调用的剩余,您可以优化并使用单个实例,而不是在每次迭代中都用一个新实例来破坏垃圾收集器。

在第一个示例中,创建obj直到堆大小已满,并且堆大小已满时JVM抛出java.lang.OutOfMemoryError

在第二个示例中,您有一个对象,并且始终调用process()方法。

对于新生的好问题。 我很感激

第一个,这将为循环的每次迭代创建一个新的Object o。 垃圾收集器将经常清洁。

第二个,因此它将一直可用。 如果您想一直重复使用对象,那就去找吧。

由于这是无限的过程,因此只需选择第二种方法即可重用对象。

暂无
暂无

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

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