2013-05-26 7 views
6

Bir iş parçacığı, silindikten sonra toplanıp çöp toplar mı, yoksa run() yöntemi tamamlandıktan sonra bile varlığını sürdürür ve bellek tüketir mi? ÖrneğinKonular, Java'da run() yöntemi çıkarıldıktan sonra otomatik olarak çöp toplar mı?

:

Ben Konuyu otomatik bellekten silinecektir ya da açık bir şekilde yapılması ihtiyacı var olup olmadığını açıklığa kavuşturmak istiyorum
Class A{ 
    public void somemethod() 
    { 
    while(true) 
    new ThreadClass().start(); 
    } 

    public class ThreadClass extends Thread{ 
     public ThreadClass() 
     {} 
     @Override 
     public void run() {......} 
    } 
} 

.

+1

Not. Her ikisi de, diğer herhangi bir Java nesnesi gibi, kullanılmış olduktan sonra toplanan çöpleri alırlar. –

+0

@owlstead: AsyncTask'ı mı kastediyorsunuz? – Rick77

+0

Olası bir kopyası olabilir: http://stackoverflow.com/questions/2423284/java-thread-garbage-collected-or-not – awsome

cevap

8

Bu otomatik olarak gerçekleşir, yani iş parçacığı, çalışma yöntemi ile tamamlandığında bellek otomatik olarak serbest bırakılır.

1

Konular yalnızca çalışma yöntemlerinin sonuna kadar var, bundan sonra çöp toplama için uygun hale getirildiler.

Belleğin bir prim olduğu bir çözüme ihtiyacınız varsa, bir ExecutorService numaralı telefonu düşünebilirsiniz. Bu, iş parçacığını sizin için işleyecek ve iş parçacığı ile belleği işlemek yerine mantığa konsantre olmanızı sağlayacaktır.

0

Konular, run yönteminin tamamlanması üzerine toplanan otomatik olarak çöp toplamasıdır, dolayısıyla bunu açıkça yapmanız gerekmez.

0

Çalışmaları, çalışma yöntemi tamamlandıktan sonra çöp toplanacak. Bunun dikkate değer istisnası, android hata ayıklayıcıyı kullandığınız zamandır. Android hata ayıklayıcı, çalışmayı bitiren iş parçacıklarını içeren, bilinmesi gereken nesneler üzerinde çöp toplanmasını engeller. doğrudan konu kullanmak yerine `Task`s kullanmaları önerilir

Why do threads leak on Android?

İlgili konular