CodeGym/Java Kursu/Modül 3/Nesil çöp toplama

Nesil çöp toplama

Mevcut

Nesil Nesnelerle Çalışmak

Java çöp toplayıcıları, nesneleri yaşa göre sınıflandırabilen kuşaksal bir çöp toplama stratejisi uygular.

JVM'de böyle bir ihtiyaç (tüm nesneleri işaretlemek ve sıkıştırmak) verimsiz olarak adlandırılabilir. Çok sayıda nesne tahsis edildiğinden, listeleri büyür ve bu da çöp toplama süresinin artmasına neden olur. Uygulamaların ampirik analizi, Java'daki çoğu nesnenin kısa ömürlü olduğunu göstermiştir.

JVM'deki yığın bellek alanı üç bölüme ayrılmıştır:

Nesil Nesnelerle Çalışmak

Genç nesil

Yeni yaratılan nesneler genç nesilde başlar. Genç nesil ayrıca iki kategoriye ayrılmıştır.

  • Eden Space - Tüm yeni nesneler burada başlar, onlara ilk bellek tahsis edilir.
  • Survivor Spaces (FromSpace ve ToSpace) - Bir çöp toplama döngüsünden sağ çıktıktan sonra nesneler Eden'den buraya taşınır.

Nesnelerin genç nesilden çöp toplandığı sürece küçük çöp toplama olayı denir.

Eden'in alanı nesnelerle dolduğunda, küçük bir çöp toplama işlemi gerçekleştirilir. Tüm ölü nesneler kaldırılır ve tüm canlılar kalan iki alandan birine taşınır. Küçük GC ayrıca kurtulan alanındaki nesneleri de kontrol eder ve onları başka bir (sonraki) kurtulan alanına taşır.

Örnek olarak aşağıdaki diziyi ele alalım.

  1. Aden'de her iki türden (canlı ve ölü) nesneler vardır.
  2. Küçük bir GC oluşur - tüm ölü nesneler Eden'den kaldırılır. Tüm canlı nesneler uzay-1'e (FromSpace) taşınır. Eden ve uzay-2 artık boş.
  3. Yeni nesneler oluşturulur ve Eden'e eklenir. Eden ve uzay-1'deki bazı nesneler ölü hale gelir.
  4. Küçük bir GC oluşur - tüm ölü nesneler Eden'den ve boşluk-1'den kaldırılır. Tüm canlı nesneler boşluk-2'ye (ToSpace) taşınır. Eden ve boşluk-1 boş.

Böylece her an hayatta kalan boşluklardan biri daima boş kalır. Hayatta kalanlar, hayatta kalan alanlarında hareket etmek için belirli bir eşiğe ulaştıklarında, daha eski bir nesle geçerler.

Genç nesil boyutunu ayarlamak için -Xmn bayrağını kullanabilirsiniz .

Eski jenerasyon

Önemli bir süre yaşayan nesneler (örneğin, bir programın ömrünün çoğu) sonunda daha eski nesneler haline gelir - asırlık. Normal nesil olarak da bilinir ve Survivor Spaces'ta uzun süredir bırakılan nesneleri içerir.

Bir nesnenin yaşam eşiği, eski nesle taşınmadan önce kaç çöp toplama döngüsünden geçmesi gerektiğini belirler. Nesnelerin eski nesilden çöp kutusuna gönderildiği süreç, ana çöp toplama olayı olarak adlandırılır.

Başlangıç ​​ve maksimum yığın bellek boyutunu ayarlamak için -Xms ve -Xmx işaretlerini kullanabilirsiniz .

Java kuşaksal çöp toplamayı kullandığından, bir nesne ne kadar çok çöp toplama olayı yaşarsa, öbek üzerinde o kadar ilerler. Genç nesilde başlar ve yeterince uzun yaşarsa sonunda normal nesilde biter.

Mekanlar ve nesiller arasındaki nesnelerin tanıtımını anlamak için aşağıdaki örneği göz önünde bulundurun:

Bir nesne yaratıldığında, ilk olarak genç neslin Eden alanına yerleştirilir.

Küçük bir çöp toplama meydana gelir gelmez, Eden'deki canlı nesneler FromSpace'e taşınır. Bir sonraki küçük çöp toplama işlemi gerçekleştiğinde, hem Eden'den hem de uzaydan canlı nesneler ToSpace'e taşınır.

Bu döngü belirli sayıda devam eder. Nesne bu noktadan sonra hala "hizmetteyse", bir sonraki çöp toplama döngüsü onu eski nesil alana taşıyacaktır.

Kalıcı nesil ve metauzay

Sınıflar ve yöntemler gibi meta veriler kalıcı oluşturmada saklanır. JVM, uygulama tarafından kullanılan sınıflara göre çalışma zamanında onu doldurur. Artık kullanılmayan sınıflar kalıcı nesilden çöpe gidebilir.

Kalıcı neslin başlangıç ​​ve maksimum boyutunu ayarlamak için -XX:PermGen ve -XX:MaxPermGen işaretlerini kullanabilirsiniz .

meta uzay

Java 8'den bu yana, PermGen alanı MetaSpace bellek alanı ile değiştirilmiştir. Uygulama, PermGen'den farklıdır - bu yığın alanı artık otomatik olarak değiştirilmektedir.

Bu, PermGen'in yığın alanının sınırlı boyutu nedeniyle oluşan uygulamanın yetersiz bellek sorununu önler. Metauzay belleği çöp toplanabilir ve artık kullanılmayan sınıflar, metaspace maksimum boyutuna ulaştığında otomatik olarak temizlenir.

Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok