[CSDN editörünün notu] Altın üç gümüş dördün işe alım sezonu salgından çok fazla etkilenmeyecek. Bayt seferberliğinin resmi duyurusuna göre, departman bu yıl Wuhan'daki işe alım ölçeğini genişletmeye karar verdi, yaklaşık 2.000 iş sağladı ve yerel yetenek istihdamını teşvik etti. İnternette uzaktan katılan ByteDance çalışanları da göründü ve dizüstü bilgisayarlarıyla ilgili haberleri şirkete gitmeden önce aldılar. İçiniz rahat olsun, bu bir reklam değil, sadece salgının Çin'in işgücü talebini engellemek bir yana, Çin şirketlerinin gelişimini engellemeyeceğini göstermek için. Ve büyük bir Java işi için röportaj yapmak istiyorsanız, bu makale "yüz deneyiminiz" olabilir.
Yazar | _Chen Haha
Sorumlu Editör | Hu Weiwei
Üretildi | CSDN (ID: CSDNnews)
Bu yazıda Java çöp toplama, nasıl çalıştığı ve önemini inceleyeceğiz.
Java çöp toplama tanımı
Java çöp toplama, Java programlarının otomatik bellek yönetimini gerçekleştirdiği bir işlemdir. Java programları bayt kodu olarak derlenir ve Java Sanal Makinesi (kısaca JVM) üzerinde çalıştırılabilir. Bir Java programı JVM'de çalıştığında, programa ayrılmış belleğin bir parçası olan yığın üzerinde nesneler oluşturulur. Sonunda, belirli nesnelere artık ihtiyaç duyulmayacaktır. Çöp toplayıcı bu kullanılmayan nesneleri bulur ve belleği boşaltmak için siler.
Java çöp toplama nasıl çalışır?
Java çöp toplama otomatik bir işlemdir. Programcının silinecek nesneleri açıkça işaretlemesi gerekmez. Çöp toplama uygulaması JVM'de bulunur. Her JVM çöp toplama uygulayabilir, ancak bu çok mutludur. Tek şart, JVM spesifikasyonuna uymasıdır. Birçok JVM olmasına rağmen, Oracle'ın HotSpot'u en yaygın olanıdır. Bir dizi güçlü ve olgun çöp toplama seçeneği sağlar.
HotSpot'un çeşitli kullanım durumları için optimize edilmiş birden fazla çöp toplayıcısı olmasına rağmen, tüm çöp toplayıcıları aynı temel süreci izler. İlk adım, başvurulmayan nesneleri tanımlamak ve çöp toplama için işaretlemektir. İkinci adım, işaretli nesneyi silmektir. (İsteğe bağlı) Nesne çöp toplayıcı tarafından silindikten sonra belleği sıkıştırabilirsiniz, böylece kalan nesneler yığının başlangıcında bitişik bloklar halinde olur. Sıkıştırma işlemi, mevcut nesnelere tahsis edilen bellek bloklarından sonra sıralı olarak yeni nesnelere bellek ayırmayı kolaylaştırır.
HotSpot'un tüm çöp toplayıcıları, nesneleri yaşa göre sınıflandıran nesilsel bir çöp toplama stratejisi uygular. Nesil çöp toplamanın arkasındaki temel ilke, çoğu nesnenin kısa ömürlü olması ve oluşturulduktan kısa bir süre sonra çöplerin toplanabilmesidir.
Yığın üç bölüme ayrılmıştır:
Genç nesil: Yeni oluşturulan nesneler genç nesil ile başlar. Genç nesil, Eden alanına ve tüm Survivor alanlarına bölünür. Eden alanındaki tüm yeni nesneler çalışmaya başlar. Çöp toplama döngülerinden biri sona erdikten sonra, nesneler Eden'den kaldırılır. Young Generation'dan nesne toplarken, bu küçük bir çöp toplama olayıdır.
Eski nesil: Uzun ömürlü nesneler sonunda genç nesilden eski nesile geçer. Bu, önceki nesilden nesneler çöp olarak toplandığında önemli bir çöp toplama olayıdır.
Kalıcı nesil: Meta veriler (sınıflar ve yöntemler gibi) kalıcı üretimde depolanır. Artık kullanılmayan sınıflar, kalıcı nesilden toplanan çöp olabilir.
Tam çöp toplama olayı sırasında, nesildeki kullanılmayan tüm nesneler çöp olarak toplanacaktır.
HotSpot'ta dört çöp toplayıcı bulunur:
Seri: Tüm çöp toplama olayları tek bir iş parçacığında seri olarak gerçekleştirilir. Her çöp toplamadan sonra sıkıştırma gerçekleştirin.
Paralel: İkincil atık toplama için birden çok iş parçacığı kullanılır. Tek iş parçacığı, büyük çöp toplama ve eski tarz sıkıştırma için kullanılır. Ek olarak, Paralel Eski değişkeni, ana çöp toplama ve Eski Nesil sıkıştırma için birden çok iş parçacığı kullanır.
CMS (Eşzamanlı İşaret Taraması): Paralel olarak aynı algoritmayı kullanarak, ikincil çöp toplama için birden çok iş parçacığı kullanılır. Paralel Eski gibi büyük çöp toplama çok iş parçacıklıdır, ancak CMS "dünyayı durdur" olaylarını en aza indirmek için uygulama işlemiyle aynı anda çalışır (yani, çöp toplayıcı çalışırken uygulamayı durdurur). Sıkıştırma yapılmaz.
G1 (Önce Çöp): En son çöp toplayıcı, CMS'nin yerini alacak şekilde tasarlanmıştır. CMS gibi paralel ve eşzamanlıdır, ancak eski çöp toplayıcılara kıyasla oldukça farklı çalışır.
Java çöp toplamanın faydaları
Java çöp toplamanın en büyük yararı, önemli bellek kaynaklarını serbest bırakmak için kullanılmayan nesnelerin veya erişilemeyen nesnelerin silinmesi ile otomatik olarak başa çıkabilmesidir. Çöp toplama olmadan dillerde çalışan programcılar (C ve C ++ gibi) kodlarında manuel bellek yönetimi uygulamalıdır.
Ek çalışma gerekmesine rağmen, bazı programcılar hala, esas olarak kontrol ve performans hususları için çöp toplama yerine manuel bellek yönetimini savunmaktadır. Bellek yönetimi yöntemleriyle ilgili tartışmalar devam etse de, çöp toplama artık birçok popüler programlama dilinin standart bir parçasıdır. Çöp toplayıcının performansı olumsuz etkileyeceği programlar için Java, çöp toplayıcının verimliliğini artırmak için birçok seçenek sunar.
Java çöp toplama en iyi uygulamaları
Birçok basit uygulama için Java çöp toplama, programcıların bilinçli olarak düşünmesi gereken bir şey değildir. Ancak, Java becerilerini geliştirmek isteyen programcılar için Java çöp toplamanın nasıl çalıştığını ve nasıl ayarlanacağını anlamak çok önemlidir.
Çöp toplamanın temel mekanizmasına ek olarak, Java'da çöp toplamayı anlamak için en önemli noktalardan biri deterministik olmaması ve çalışma zamanında çöp toplamanın ne zaman yapılacağını tahmin etmenin imkansız olmasıdır. Çöp toplayıcıyı çalıştırmak için System.gc veya Runtime.gc yöntemlerini kullanmak için kodunuza bir ipucu ekleyebilirsiniz, ancak çöp toplayıcının gerçekten çalışacağını garanti edemezler.
Java çöp toplamasını ayarlamanın en iyi yolu, JVM'de bir bayrak ayarlamaktır. Bayrak, kullanılacak çöp toplayıcıyı (örneğin, Seri, G1 vb.), Yığının ilk ve maksimum boyutunu, yığın segmentinin boyutunu (örneğin, Genç Nesil, Eski Nesil) vb. Ayarlayabilir. Ayarlanan uygulamanın doğası, kurulum için iyi bir başlangıç kılavuzudur. Örneğin, paralel çöp toplayıcılar çok etkilidir, ancak çoğu zaman "dünya durdurma" olaylarına neden olarak onları arka uç işleme için daha uygun hale getirir, bu durumda çöp toplama uzun süre duraklatılabilir.
Öte yandan, CMS çöp toplayıcı duraklamaları en aza indirecek şekilde tasarlandığından, yanıt vermenin önemli olduğu GUI uygulamaları için idealdir. Diğer ince ayarlar, yığın veya yığın boyutunu değiştirerek ve jstat gibi araçlar kullanarak çöp toplama verimliliğini ölçerek yapılabilir.
Orijinal bağlantı:
https://blog.csdn.net/qq_39390545/article/details/104457216