Câu hỏi này đã được đăng trên một số trang web. Tôi đã không tìm thấy câu trả lời đúng ở đó, vì vậy tôi đăng nó ở đây một lần nữa.Java Thread Garbage được thu thập hay không
public class TestThread {
public static void main(String[] s) {
// anonymous class extends Thread
Thread t = new Thread() {
public void run() {
// infinite loop
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
// as long as this line printed out, you know it is alive.
System.out.println("thread is running...");
}
}
};
t.start(); // Line A
t = null; // Line B
// no more references for Thread t
// another infinite loop
while (true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.gc();
System.out.println("Executed System.gc()");
} // The program will run forever until you use ^C to stop it
}
}
Truy vấn của tôi không phải là dừng Chủ đề. Hãy để tôi thuật lại câu hỏi của tôi. Dòng A (xem mã ở trên) bắt đầu một Chủ đề mới; và Dòng B làm cho tham chiếu chuỗi rỗng. Vì vậy, JVM bây giờ có một đối tượng Thread (đang ở trạng thái đang chạy) mà không có tham chiếu nào tồn tại (như t = null trong dòng B). Vì vậy, câu hỏi của tôi là, tại sao luồng này (không có tham chiếu nữa trong chuỗi chính) tiếp tục chạy cho đến khi luồng chính đang chạy. Theo hiểu biết của tôi, đối tượng chủ đề phải là bài đăng được thu thập rác B. Tôi đã cố gắng chạy mã này trong 5 phút và hơn thế nữa, yêu cầu Java Runtime chạy GC, nhưng luồng chỉ không dừng lại.
Hy vọng cả mã và câu hỏi đều rõ ràng trong lần này.
Câu trả lời này, vì nó hiện đang tồn tại, đặt ra câu hỏi nếu chủ đề có thể được GC'ed ở tất cả (sau khi họ chấm dứt). Vì câu hỏi này được đánh dấu là bản sao của [this this] (http://stackoverflow.com/questions/10380327/java-threads-and-garbage-collector), nên đề cập rằng các chuỗi sẽ không còn được đánh dấu là " rễ thu gom rác thải "sau khi chúng kết thúc, và do đó, chúng có thể tiếp cận được với GC. – bluenote10
@ bluenote10 chính xác, do đó cụm từ "chạy chuỗi". – falstro
Câu cuối cùng là thâm nhập: "tại sao sợi chính của bạn không bị rác ...". – Determinant