Το Shenandoah και το ZGC είναι δύο προηγμένοι συλλέκτες απορριμμάτων που έχουν σχεδιαστεί για να παρέχουν χαμηλής καθυστέρησης και αποτελεσματική συλλογή απορριμμάτων για εφαρμογές Java. Ακολουθούν ορισμένα βασικά οφέλη από τη χρήση αυτών των συλλεκτών:
Shenandoah GC:
1. Χαμηλοί χρόνοι παύσης: Το Shenandoah GC έχει σχεδιαστεί για να ελαχιστοποιεί τους χρόνους παύσης εκτελώντας τις περισσότερες εργασίες συλλογής σκουπιδιών ταυτόχρονα με την εφαρμογή. Αυτό διασφαλίζει ότι η εφαρμογή παραμένει αποκριτική και αποδίδει καλά ακόμη και με μεγάλη χρήση μνήμης[1][3].
2. Ταυτόχρονη συμπύκνωση: Το Shenandoah GC εκτελεί ταυτόχρονη συμπύκνωση, πράγμα που σημαίνει ότι συμπυκνώνει το σωρό ενώ εκτελείται η εφαρμογή. Αυτό μειώνει την ανάγκη για πλήρεις παύσεις συλλογής σκουπιδιών και διασφαλίζει ότι ο σωρός παραμένει συμπαγής και αποτελεσματικός[1][3].
3. Ανεξάρτητο από το μέγεθος του σωρού: Οι χρόνοι παύσης του Shenandoah GC είναι ανεξάρτητοι από το μέγεθος του σωρού. Αυτό σημαίνει ότι μπορεί να χειριστεί μεγάλους σωρούς χωρίς σημαντικές παύσεις, καθιστώντας το κατάλληλο για εφαρμογές που απαιτούν μεγάλες εκχωρήσεις μνήμης[1][3].
4. Υψηλή απόδοση: Το Shenandoah GC έχει σχεδιαστεί για να παρέχει υψηλή απόδοση ελαχιστοποιώντας το χρόνο που δαπανάται για τη συλλογή σκουπιδιών. Αυτό διασφαλίζει ότι η εφαρμογή μπορεί να συνεχίσει να εκτελείται αποτελεσματικά ακόμη και με μεγάλη χρήση μνήμης[1][3].
ZGC:
1. Χαμηλή καθυστέρηση: Το ZGC έχει σχεδιαστεί για να παρέχει εξαιρετικά χαμηλό λανθάνοντα χρόνο ελαχιστοποιώντας το χρόνο που δαπανάται για τη συλλογή σκουπιδιών. Αυτό επιτυγχάνεται εκτελώντας τις περισσότερες εργασίες συλλογής σκουπιδιών ταυτόχρονα με την εφαρμογή και χρησιμοποιώντας μια προσέγγιση μιας γενιάς που βασίζεται στην περιοχή[2].
2. NUMA-Aware: Το ZGC έχει σχεδιαστεί για να έχει επίγνωση NUMA, πράγμα που σημαίνει ότι μπορεί να χειριστεί αποτελεσματικά μεγάλους σωρούς και πολλούς πυρήνες CPU. Αυτό διασφαλίζει ότι ο συλλέκτης απορριμμάτων μπορεί να εκμεταλλευτεί τους διαθέσιμους πόρους υλικού[2].
3. Υψηλή απόδοση: Το ZGC έχει σχεδιαστεί για να παρέχει υψηλή απόδοση ελαχιστοποιώντας το χρόνο που δαπανάται για τη συλλογή σκουπιδιών. Αυτό διασφαλίζει ότι η εφαρμογή μπορεί να συνεχίσει να λειτουργεί αποτελεσματικά ακόμη και υπό μεγάλη χρήση μνήμης[2].
4. Πειραματική λειτουργία: Το ZGC είναι μια πειραματική δυνατότητα που απαιτεί συγκεκριμένες επιλογές γραμμής εντολών για να ενεργοποιηθεί. Είναι κατάλληλο για εφαρμογές που απαιτούν πολύ σύντομους χρόνους παύσης και μπορούν να χειριστούν μεγάλες εκχωρήσεις μνήμης[2].
Συνοπτικά, τόσο το Shenandoah όσο και το ZGC έχουν σχεδιαστεί για να παρέχουν χαμηλής καθυστέρησης και αποτελεσματική συλλογή σκουπιδιών για εφαρμογές Java. Είναι κατάλληλα για εφαρμογές που απαιτούν υψηλή απόδοση και μπορούν να χειριστούν μεγάλες εκχωρήσεις μνήμης.
Αναφορές:[1] https://clojure-goes-fast.com/blog/shenandoah-in-production/
[2] https://developers.redhat.com/articles/2021/11/02/how-choose-best-java-garbage-collector
[3] https://www.reddit.com/r/feedthebeast/comments/r24zg4/upgrade_your_java_to_one_that_has_the_shenandoah/
[4] https://stackoverflow.com/questions/64252590/how-does-clr-gc-compare-to-latest-zgc-and-shenandoah-gc-on-jvm
[5] https://www.uber.com/blog/jvm-tuning-garbage-collection/