Java garbage collection thread

Ein thread ist Müll gesammelt, wenn der run() - Methode in den thread beendet ist oder wenn die Funktion genannt wurde aus beendet?

Ich nicht ein Problem haben oder irgendetwas, aber ich möchte vermeiden, memory-leaks und so.

Für Menschen, die gerne code:

public void SomeClass {
    public SomeClass() {

    }

    public void someMethod() {
        Object data = veryBigObject;

        while(true) {
            MyThread thread = new MyThread(veryBigObject);
            thread.run();

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) { /* do nothing */ }
        }
    }

    public static void main(String[] args) {
        SomeClass myclass = SomeClass();
        myclass.someMethod();
    }
}


public class MyThread extends Thread {
    private Object data;

    public Thread(Object data) {
        this.data = data;
    }

    public void run() {
        //do stuff with data
    }
}

In allen Sprachen, die ich kenne, Müll (wenn die Sprache, die hat jeder) entnommen wird, wenn eine Methode beendet. Ich gehe davon aus Java-als auch nicht. Das bedeutet, dass theoretisch die threads erstelle ich in someMethod() werden nicht erfasst, bis someMethod() endet. Wenn wir annehmen, dass die while-Schleife läuft für eine sehr lange Zeit, würde die Anwendung run out of memory und Abstürzen.

Meine Frage: ist das wahr? Wenn ja, was zu tun ist, es zu vermeiden?

  • stackoverflow.com/a/2423293/798818
  • In allen Sprachen, die ich kenne, Müll (wenn die Sprache, die hat jeder) entnommen wird, wenn eine Methode beendet. Zeigen Sie eine Sprache! Sie Fehler-garbage collection w/ automatic reference counting und C++ gleichermaßen Destruktor stack-Objekt zugeordnet. Java reserviert sich keine Objekte auf dem stack (durch design, aber es ist technisch möglich von EA [escape analysis] oder ED[nicht erkannt]) die Aussage ist falsch, im besten Fall (sehr falsch im schlimmsten Fall)
InformationsquelleAutor Tim S. | 2012-07-13
Schreibe einen Kommentar