无限循环内的Java对象创建

时间:2017-03-22 07:01:47

标签: java

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

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()方法将执行数据库selectinsert into表,连接Web服务并获取响应消息并将消息发送给用户。

哪一个是正确的方法?

3 个答案:

答案 0 :(得分:1)

这完全取决于MyObject的作用以及process(()的实施方式。作为一般概念,如果MyObject是无状态的,并且一个process呼叫不会留下任何可能影响后续呼叫的剩余部分,则可以优化并使用单个实例而不是颠簸每次迭代都有一个新实例的垃圾收集器。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

第二个,因此它将一直可用。如果你想一直重用这个对象,那就去吧。

由于它是无限过程,所以只需要第二个选项来重用对象。