Serial GC

Koleksi sampah nambah efisiensi memori ing Jawa kanthi mbusak obyek sing ora dirujuk saka tumpukan lan nggawe papan kanggo obyek sing mentas digawe.

Mesin virtual Jawa nduweni wolung jinis pengepul sampah. Ayo nimbang saben wong kanthi rinci.

Serial GC minangka implementasi GC sing paling gampang. Iki ditrapake kanggo aplikasi cilik sing mlaku ing lingkungan siji-threaded. Kabeh acara nglumpukake sampah dieksekusi kanthi urutan ing benang sing padha. Pemadatan ditindakake sawise saben koleksi sampah.

Serial GC

Nglakokake kolektor nyebabake acara "mandeg donya", ing ngendi kabeh aplikasi ditundha. Amarga kabeh aplikasi beku sajrone nglumpukake sampah, sampeyan ora kudu nggunakake iki ing urip nyata yen sampeyan pengin tetep telat sabisa.

Argumentasi JVM kanggo nggunakake kolektor sampah serial yaiku -XX:+UseSerialGC .

Paralel GC

Pengumpul sampah paralel dirancang kanggo aplikasi kanthi set data medium nganti gedhe sing nganggo hardware multithreaded utawa multiprocessor. Iki minangka implementasi GC standar lan uga dikenal minangka kolektor throughput.

Sawetara utas ditujokake kanggo koleksi sampah cilik ing generasi enom. Utas mung sibuk karo koleksi sampah utama ing generasi lawas.

Paralel GC

Mlaku GC paralel uga nyebabake donya "mandheg" lan aplikasi macet. Prilaku iki luwih cocok kanggo lingkungan multi-threaded ing ngendi akeh tugas kudu rampung lan ngaso dawa bisa ditampa, kayata nalika mbukak proyek kumpulan.

Argumentasi JVM kanggo nggunakake kolektor sampah paralel yaiku -XX:+UseParallelGC .

CMS GC

Uga dikenal kanggo kita minangka pemilih paralel sing sithik .

Ing kene, kanggo koleksi sampah cilik, sawetara benang melu, iki kedadeyan liwat algoritma sing padha karo kolektor paralel. Koleksi uwuh utama multi-Utas, kaya GC paralel lawas, nanging CMS mlaku bebarengan karo pangolahan aplikasi kanggo nyilikake acara "mandeg donya".

CMS GC

Amarga iki, kolektor CMS nggunakake CPU luwih akeh tinimbang kolektor liyane. Yen sampeyan duwe kemampuan kanggo nyedhiakke CPU liyane kanggo nambah kinerja, banjur CMS luwih apik kanggo kolektor paralel prasaja. CMS GC ora kompak.

Argumentasi JVM kanggo nggunakake paralel mark-sweep garbage collector yaiku -XX:+UseConcMarkSweepGC .

G1 (Sampah pisanan) GC

G1GC disusun minangka panggantos kanggo CMS lan dikembangake kanggo aplikasi multi-threaded sing ditondoi kanthi ukuran tumpukan gedhe (luwih saka 4 GB). Iku podo karo lan competitive kaya CMS, nanging ing hood dianggo beda banget saka kolektor uwuh lawas.

Senajan G1 uga makaryakke ing basis generasi, iku ora duwe spasi kapisah kanggo generasi enom lan lawas. Nanging, saben generasi minangka sakumpulan wilayah, ngidini keluwesan ngganti ukuran generasi enom.

G1 mbagi tumpukan dadi sakumpulan wilayah sing ukurane padha (gumantung saka ukuran tumpukan) lan mindai dadi pirang-pirang benang. Wilayah sajrone eksekusi program bisa bola-bali dadi tuwa lan enom.

Sawise tahap markup rampung, G1 ngerti wilayah endi sing paling akeh sampah. Yen pangguna kasengsem kanggo nyilikake ngaso, G1 mung bisa milih sawetara wilayah. Yen wektu ngaso ora penting kanggo pangguna, utawa yen watesan wektu ngaso disetel menyang dhuwur, G1 bakal ngliwati wilayah liyane.

Wiwit G1 GC ngenali wilayah sing paling akeh sampah lan nindakake pangumpulan sampah ing wilayah kasebut luwih dhisik, mula diarani "Sampah Pisanan".

Saliyane ing wilayah Eden, Survivors lan Old Memory, ana rong jinis liyane ing G1GC.

  • Humongous (Ageng) - kanggo obyek ukuran gedhe (luwih saka 50% saka ukuran tumpukan).
  • Kasedhiya - Spasi sing ora digunakake utawa ora kasedhiya.

Argumentasi JVM kanggo nggunakake pengumpul sampah G1 yaiku -XX:+UseG1GC .

Shenandoah (Shandara)

Shenandoah punika GC anyar dirilis minangka bagéan saka JDK 12. Kauntungan utama saka Shenandoah liwat G1 iku paling saka siklus koleksi sampah wis rampung bebarengan karo Utas aplikasi. G1 mung bisa ngevakuasi wilayah numpuk nalika aplikasi dilereni soko tugas, nalika Shenandoah mindhah obyek ing wektu sing padha karo aplikasi.

Shenandoah bisa kompak obyek urip, ngresiki uwuh, lan mbebasake RAM meh sanalika free memori ketemu. Wiwit kabeh iki kedadeyan bebarengan, tanpa nundha aplikasi kasebut, Shenandoah luwih intensif CPU.

Argumen JVM kanggo pengumpul sampah Shenandoah: -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC .

ZGC

ZGC minangka GC liyane sing dirilis minangka bagéan saka JDK 11 lan ditingkatake ing JDK 12.

Iki ditrapake kanggo aplikasi sing mbutuhake kacepetan lan latensi sing sithik (jeda kurang saka 10 ms) lan/utawa nggunakake tumpukan sing gedhe banget (sawetara terabyte).

Tujuan utama ZGC yaiku latensi rendah, skalabilitas, lan gampang digunakake. Kanggo nindakake iki, ngidini aplikasi Java terus mlaku sanajan kasunyatane operasi pengumpulan sampah lagi ditindakake. Kanthi gawan, ZGC ngeculake memori sing ora digunakake lan bali menyang sistem operasi.

Mangkono, ZGC ndadekke dandan pinunjul saka GCs tradisional liyane dening nyediakake wektu mati banget kurang (biasane ing 2ms).

Tujuan utama ZGC 

Argumentasi JVM kanggo nggunakake kolektor sampah ZGC yaiku -XX:+UnlockExperimentalVMOptions -XX:+UseZGC .