2017-03-22 5 views
0

Ich versuche, Daemon Prozess schreiben. Unten ist mein Beispielcode-Snippet.Java Objekterstellung innerhalb unendlich Schleife

public void listener() { 
    MyObject obj = null; 

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

oder soll ich schaffen wie diese

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

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

process() Methode Datenbank select und insert into Tabelle tun, Web-Service zu verbinden und die Antwortnachricht zu erhalten und die Nachricht an Benutzer senden.

Welches ist der richtige Weg?

+1

Das hängt davon ab, was "MyObject" und "MyObject.process" sind und was dieses Ding überhaupt tun soll. – user2357112

+0

Prozess wird tun .. db auswählen und einfügen, verbinden Web-Service und die Nachricht verarbeiten. – Easy2DownVoteHard2Ans

Antwort

0

Gute Frage für Erstsemester. Ich schätze.

Die erste, wird dies ein neues Objekt o für jede Iteration der Schleife erstellen. Müllabfuhr wird oft gereinigt.

Die zweite, so wird es für alle Zeit verfügbar sein. Wenn Sie das Objekt die ganze Zeit wiederverwenden wollen, dann gehen Sie darauf.

Da es unendlich Prozess ist, dann gehen Sie einfach für die zweite Option, um die Objekte wiederzuverwenden.

1

, die ganz auf welchem ​​hängt MyObject tut und wie process(() umgesetzt wird. Als allgemeine Vorstellung, wenn MyObject staatenlos ist, und ein process Anruf alle Reste nicht verlassen werden, die den nachfolgenden Aufruf stören könnten, könnten Sie wahrscheinlich optimieren und eine einzelne Instanz anstelle der Garbage Collector mit einer neuen Instanz in jeder Iteration von Dreschen.

+0

@ Mureinik. Danke für deine Antwort. Können Sie bitte sagen, was Sie mit Staatenlosigkeit meinen? – Easy2DownVoteHard2Ans

+1

@EasyToDownVoteHardToAns staatenlos bedeutet nur, dass - es hat keinen Zustand (das heißt, Datenelemente), und jede Methode aufrufen kann nicht das Ergebnis einer späteren Methode ruft – Mureinik

+0

@ Mureinik Dank und zur Kenntnis genommen. – Easy2DownVoteHard2Ans

0

Im ersten Beispiel erstellen Sie obj, bis Ihre Heap-Größe voll ist und wenn die Heap-Größe voll ist JVM löst java.lang.OutOfMemoryError.

In zweite Probe haben Sie ein Objekt und Sie rufen immer Prozess() -Methode.

+3

Da nach jeder Schleifeniteration auf die neu erzeugten Objekte nicht mehr zugegriffen werden kann, werden sie unbrauchbar gemacht, bevor ein "OutOfMemoryError" geworfen wird. – Hoopje