İlk ve maksimum yığın boyutu

Atık Toplayıcı 'nın (GC) işlemlerinin anlaşılması, yığının verimli yönetimi için ilk ve en yüksek yığın boyutlarını ayarlamanıza yardımcı olur.

Atık Toplayıcı, aşağıdaki nedenlerden ötürü yığın boyutunu %40 ile %70 arasında bir doluluk tutacak şekilde uyarlar:
  • %70 'ten büyük bir yığın doluluğu, daha sık GC döngülerine neden olur ve bu da performansı düşürebilir. -Xminf seçeneğini ayarlayarak bu davranışı değiştirebilirsiniz.
  • %40 'tan az bir yığın doluluğu, seyrek GC döngüleri anlamına gelir. Ancak, bu döngüler gerekenden daha uzundur, bu da daha uzun duraklama sürelerine neden olur ve bu da performansı azaltabilir. -Xmaxf seçeneğini ayarlayarak bu davranışı değiştirebilirsiniz.
İlk ya da en büyük yığın boyutunu ayarlamazsanız, GC, yığını gerektiği şekilde genişletir ve küçültür. Ancak, yığın boyutunu -Xms ve -Xmx seçeneklerini kullanarak düzeltirseniz, GC, Java™ öbeğini genişletmez ya da küçültmez. Uygulama performansını optimize etmek ve %40-%70 aralığında tutmak için yığın boyutu üst sınırı ayarı, uygulamanın kullanım üst sınırından en az %43 daha büyük olmalıdır. Örneğin, bir uygulamanın maksimum doluluğu 70 MB ise, maksimum yığın boyutu 100 MB aşağıdaki hesaplamada gösterildiği gibi ayarlanmalıdır:
70 + (70 * 43/100)

Yığın boyutu alt ve üst sınırının aynı değere ayarlanması genellikle iyi bir fikir değildir; çünkü atık toplama, yığın doluncaya kadar geciktirilir. Bu nedenle, GC ilk kez çalıştığında işlem daha uzun sürebilir. Ayrıca, yığın parçalanmış olma olasılığı daha yüksektir ve bir yığın sıkıştırması gerektirir. Uygulamanızı, uygulamanızın gerektirdiği minimum yığın boyutuyla başlatın. GC başladığında, yığın küçük olduğu için sık ve verimli bir şekilde çalışır.

GC yeterince çöp bulamazsa, sıkıştırma çalıştırılır. GC yeterince atık bulursa ya da yığın genişletme için diğer koşullar karşılandıysa ( OpenJ9 kullanıcı belgelerinde Yığın ayırma konusuna bakın), GC yığını genişletir.

Bu nedenle, bir uygulama genellikle yığın doluncaya kadar çalışır. Daha sonra, ardışık çöp toplama döngüleri çöpü kurtarır. Yığın canlı nesnelerle dolduğunda, GC yığını sıkıştırır. Yeterli atık yine de kurtarılamazsa, GC yığını genişletir.

Daha önceki açıklamadan, GC ' nin yığını uygulamanın gereksinimleri arttıkça sıkıştırdığını görebilirsiniz; böylece yığın genişledikçe, özgün öbeğinin alt kısmında sıkıştırılmış nesneler kümesi ile genişler. Sıkıştırma, sıkıştırmanın gerekli olduğu saptandığında olası en küçük yığın boyutunda çalıştığından, bu işlem yığını yönetmenin verimli bir yoludur. Sıkıştırma, yığın büyüdükçe minimum yığın boyutu ile gerçekleştirilir. Bir uygulamanın ilk nesne kümesinin anahtar veya kök kümesi olma eğiliminde olduğuna dair bazı kanıtlar vardır, bu nedenle onları erken sıkıştırarak daha kısa ömürlü nesneler için yığın geri kalanını serbest bırakır.

Sonuç olarak, JVM ' nin yığın boyutu üst sınırında, uzun ömürlü tüm nesneler yığının alt kısmında sıkıştırılır. Sıkıştırma, sıkıştırma en düşük maliyetli evresindeydi. Yığını genişletmek için gereken işleme ve bellek kullanımı miktarı, çok büyük bir parçalı yığını toplama ve sıkıştırma maliyetine kıyasla neredeyse önemsiz.