2011-09-11 22 views
8

Ben bir test programı yazıyorum: Bir JFrame atamak bellek sızıntısına neden oluyor mu? aşağıdaki gibi

  1. kullanıcı düğme A tıkladığında

    , 50 JFrames açar. kullanıcı düğme B tıkladığında
  2. ben bu Görev Yöneticisi kullanılarak belirlenir bellek B butonuna tıkladıktan sonra azalmaması bulmak düğmesi A'yı

tıklayarak gösterilen tüm JFrames elden, ctrl + Windows'ta alt + del ve "java" bellek kullanımını denetleme.

+0

Bazı kodlar kesinlikle bize yardımcı olacaktır ... –

+1

Bkz. [Çalışma zamanında Üst Düzey Kapsayıcıyı Kaldır] (http://stackoverflow.com/questions/6309407/remove-top-level-container-on-runtime/6310284# 6.310.284). – trashgod

+1

Kodum özel bir şey değil. Yeni JFrame ile JFrame oluşturma. Dispose() öğesini arayarak atın() – Bear

cevap

11

, olamaz, mümkün değil çözmek,

1) gerçekten Runtime üzerinde Top-Level Containers sürü oluşturmaz/(sadece Java PL) onlar kesinleşmiş asla çünkü, Fly ve geçerli JVM örneği çıkana kadar ve bu nesne GC'ed hiç yalnız onların Grapfics2D Runtime üzerinde

2) myContainer#dispose()gibi güncel JVM örneği için aynıdır 1.st JComponent orada JPanel koyup myPanel#removeAll() diyoruz, ama JVM kullanılabilir ve kullanılan Bellek

3) oluşturmak yalnızca birkaç Top-Level Containers (maksimum eş zamanlı görüntülenir), yeniden kullanım ile bağlantılarda 10, aksi takdirde RootPane kalkar ve senin Konteyner :-) saydam olacağını Sınırı sadece kalır dan

4) kısmen

5), JVM çağrı GC ile Bellek kullanılan azaltmak mümkündür, ancak sadece Graphics2D gelen miktarını returs ve Garbage immediatelly çalışır gelmez daha fazla here usefull info here

+0

için çok teşekkürler. Ama ben öneriyi anlamıyorum 3. – Bear

+0

btw, Java sorunu biliyor mu? – Bear

+0

@ İki seçeneğiniz var mı? 1) üç - Dört Üst Seviye Konteyner oluşturun, 1. JFrame diğer JDialog (Modality ile de) veya JWindow, 2) ya da CardLayout için http://download.oracle.com/javase/tutorial/uiswing/layout/card.html dosyasını arayacak ve daha sonra Toplar oluşturmak yerine bahis kartlarını değiştirecektir. Seviye Konteynerler :-) – mKorbel

2

Herhangi bir kod olmadan size yardımcı olamayız ... jFrame'i çağırıyor musunuz? dispose()?

public void atmayın()

Bültenleri onun olunan çocukların bu Window, bulunması alt tarafından kullanılan yerli ekran kaynakların tümünü ve tüm. Bu ise, bu Bileşenlerin kaynakları yok edilecek, kullandıkları herhangi bir bellek işletim sistemine geri gönderilecek ve bunlar olarak belirlenemez.

fazla bilgi mevcut here doğru

0

Çerçevenizdeki GC (çöp toplayıcı) köküne güçlü bir başvuru varsa, atma yöntemini çağırdıysanız, toplanan çöpleri almazsınız, bu nedenle tümünü eledikten sonra herhangi bir bellek değişikliği göremezsiniz. çerçeveler. Hafıza istiyorsanız, bırakmanız gereken şeylerden, o zaman çerçeveler toplamak için çöp gerekir.

İlgili konular