Κοινή χρήση τεχνολογίας

[Αλγόριθμος συλλογής απορριμμάτων GC και συλλέκτης]

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Συγγραφέας: ofLJli
Σύνδεσμος: https://juejin.cn/post/7003213289425633287?searchId=20240709085629749958B21D886D4E67D4
Πηγή: Rare Earth Nuggets
Τα πνευματικά δικαιώματα ανήκουν στον συγγραφέα. Για εμπορική επανέκδοση, επικοινωνήστε με τον συγγραφέα για εξουσιοδότηση Για μη εμπορική επανέκδοση, αναφέρετε την πηγή.


ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ

Οι κύριες δομές στο JVM είναι: η στοίβα εικονικής μηχανής, ο σωρός και η περιοχή μεθόδου. Το μέγεθος του πλαισίου στοίβας της στοίβας εικονικής μηχανής έχει καθοριστεί από τον μεταγλωττιστή Με το τέλος της μεθόδου ή της τεχνολογίας νήματος, η μνήμη της στοίβας εικονικής μηχανής ανακυκλώνεται επίσης. Ο σωρός Java και η περιοχή μεθόδου έχουν σημαντικές αβεβαιότητες. Η κατανομή και η ανακύκλωση αυτού του τμήματος της μνήμης είναι δυναμική.

Αυτό το άρθρο εστιάζει στα ακόλουθα τρία πράγματα που πρέπει να επιτύχει η GC:

  • Πότε να ανακυκλωθεί; (Συνθήκες που ενεργοποιούν το GC)
  • Αλγόριθμος συλλογής σκουπιδιών
  • Συλλέκτης σκουπιδιών

Πότε να ανακυκλωθεί

Σύμφωνα με δύο γενεαλογικές υποθέσεις:绝大多数的对象都是朝生夕死熬过越多次的GC回收的对象就越难回收 . Ο σωρός χωρίζεται σε γενιές: νέας γενιάς (Eden, From, To), παλιάς γενιάς και ανακύκλωση γενεών πραγματοποιείται επίσης κατά τη διάρκεια του GC.

image.png

Μικρό ΓΚ : Ανακυκλώστε τα αχρησιμοποίητα αντικείμενα στη νέα γενιά Το χαρακτηριστικό των περισσότερων αντικειμένων της νέας γενιάς είναι ότι ζουν και πεθαίνουν από τη μια μέρα στην άλλη. Οι χρόνοι ενεργοποίησης είναι:

  • Ο ανεπαρκής χώρος στην περιοχή Eden ενεργοποιεί το Minor GC Καθώς ο χώρος Eden είναι περιορισμένος σε μέγεθος, το Minor GC ενεργοποιείται πιο συχνά.标记-复制算法Ανακυκλώστε αυτήν την περιοχή (θα συζητηθεί αργότερα).

Ταγματάρχης ΓΚ : Ανακυκλώστε αχρησιμοποίητα αντικείμενα της παλιάς γενιάς.γενικής χρήσης标记-清除算法ή标记-整理算法Ανακυκλωνω.

Πλήρης GC : Ανακυκλώστε αχρησιμοποίητα αντικείμενα στην περιοχή σωρού και μεθόδου. Το εύρος ανακύκλωσης Full GC είναι σχετικά μεγάλο και ο μεγάλος χρόνος εκτέλεσης μπορεί να προκαλέσει καθυστερήσεις, επομένως ο αριθμός των Full GC θα πρέπει να μειωθεί όσο το δυνατόν περισσότερο. Οι χρόνοι ενεργοποίησης είναι περίπου οι εξής:

  • Ο ανεπαρκής χώρος στην παλιά γενιά προκαλείται από την είσοδο αντικειμένων νέας γενιάς στην παλιά γενιά, τα μεγάλα αντικείμενα που εισέρχονται απευθείας στην παλιά γενιά κ.λπ. Εάν αυτά τα αντικείμενα δεν μπορούν να αποθηκευτούν στον μέγιστο συνεχή χώρο της παλιάς γενιάς, θα πραγματοποιηθεί πλήρης ανακύκλωση GC .

  • Ανεπαρκής χώρος στην περιοχή μεθόδου Η περιοχή μεθόδου αποθηκεύει κυρίως πληροφορίες τύπου και σταθερές δεξαμενές Υπάρχει επίσης κίνδυνος ανεπαρκούς χώρου και θα πραγματοποιηθεί πλήρης ανακύκλωση.

  • Το System.gc() καλείται ρητά και θα ανακυκλωθεί από την Full GC.

Τρεις αλγόριθμοι συλλογής σκουπιδιών:

1. Αλγόριθμος Mark-and-sweep

Αρχή: χρήση可达性分析算法Δημιουργήστε μη διαθέσιμα αντικείμενασημάδικαι μετά εκτελέστε τοΣαφή . Μειονεκτήματα: Η απόδοση σήμανσης είναι χαμηλή όταν υπάρχουν πολλά αντικείμενα. Μετά την εκκαθάριση του αντικειμένου, θα συμβεί κατακερματισμός της μνήμης και η μνήμη θα είναι ασυνεχής. Σκοπός: Μερικοί συλλέκτες θα χρησιμοποιήσουν αυτόν τον αλγόριθμο στη συλλογή παλιάς γενιάς

2. Αλγόριθμος Mark-copy

Αρχή: Διαχωρίστε το χώρο της μνήμης στα δύο, ο μισός χρησιμοποιείται για αποθήκευση αντικειμένων και ο άλλος μισός είναι ελεύθερος.Εάν η περιοχή όπου αποθηκεύονται τα αντικείμενα είναι γεμάτη, χρησιμοποιήστε το可达性分析算法Μετακινήστε ζωντανά αντικείμενασημάδιβγείτε και μετάαντίγραφο Μεταβείτε σε μια άλλη κενή περιοχή και διαγράψτε όλες τις προηγούμενες περιοχές σε κενά συνεχόμενα κενά. Μειονέκτημα: Εάν υπάρχουν πολλά σωζόμενα αντικείμενα, θα απαιτηθεί μεγάλος όγκος αντιγραφής και ανάπτυξης μνήμης. Ο χώρος μνήμης μπορεί να χρησιμοποιήσει μόνο τα μισά από τα πλεονεκτήματα και να σπαταλήσει πόρους. Λειτουργία: Αυτός ο αλγόριθμος ανακύκλωσης χρησιμοποιείται γενικά για αντικείμενα που ζουν και πεθαίνουν στη νέα γενιά. Ωστόσο, ο αλγόριθμος αναπαραγωγής έχει βελτιστοποιηθεί στη νέα γενιά, αλλά αυτός ο αλγόριθμος προσθέτει έναν μηχανισμό εγγύησης κατανομής για να αποτρέψει την εκχώρηση πάρα πολλών αντικειμένων. Χρησιμοποιείται ένας αλγόριθμος ανακύκλωσης τύπου Appel:

image.png

3. Αλγόριθμος σήμανσης-συλλογής

Αρχή: Ακολουθεί η διαδικασία της σήμανσης标记-清除算法Το ίδιο, λοιπόν整理存Τα ζωντανά αντικείμενα μετακινούνται στο ένα άκρο και, στη συνέχεια, όλα τα αντικείμενα εκτός του ζωντανού ορίου清除 . Μειονεκτήματα: Η μετακίνηση αντικειμένων ενέχει κάποιο κίνδυνο. Πάρα πολλά αντικείμενα είναι αναποτελεσματικά Λειτουργία: Κυρίως σε μεγάλη ηλικία.

image.png

Συλλέκτης σκουπιδιών

Ο συλλέκτης απορριμμάτων που χρησιμοποιεί η GC χρησιμοποιείται για ανακύκλωση Με τη συνεχή ανάπτυξη, υπάρχουν ολοένα και περισσότεροι απορριμματοσυλλέκτες. συσκευή συλλογής.

Συλλέκτης μονής κλωστής

Οι συνδυασμοί των συλλεκτών με ένα σπείρωμα είναι: Σειριακός/Σειρικός Παλιός συλλέκτης. Δεν χρησιμοποιούν μόνο ένα νήμα συλλογής για να ολοκληρώσουν τη λειτουργία συλλογής, αλλά ενώ το νήμα συλλογής λειτουργεί, το νήμα χρήστη πρέπει να σταματήσει να περιμένει μέχρι να ολοκληρωθεί η συλλογή. Η εικόνα δείχνει το σχηματικό διάγραμμα του Serial/Serial Old συλλέκτη:

image.png Εάν οι πόροι μνήμης του πελάτη είναι περιορισμένοι, ο αριθμός των πυρήνων του επεξεργαστή είναι μικρός ή ο επεξεργαστής ενός πυρήνα, η απλότητα και η αποτελεσματικότητά του μπορούν να κάνουν τον συλλέκτη να ολοκληρώσει τη δουλειά του όσο το δυνατόν γρηγορότερα.

Παράλληλος συλλέκτης πολλαπλών σπειρωμάτων

Οι συλλέκτες πολλαπλών νημάτων περιλαμβάνουν: ParNew, Parallel Scavenge και Parallel Old, μεταξύ των οποίων το Parallel Scavenge/Parallel Old είναι ένας συνδυασμένος συλλέκτης. Αυτοί οι συλλέκτες πολλαπλών νημάτων προσθέτουν μόνο νήματα συλλογής σκουπιδιών και τα νήματα των χρηστών εξακολουθούν να παύουν να περιμένουν τη συλλογή απορριμμάτων.

image.png

parNew συλλέκτης: Είναι στην πραγματικότητα μια έκδοση πολλαπλών νημάτων του Serial Μπορεί να συνεργαστεί με τον σειριακό συλλέκτη και τον συλλέκτη CMS.

Συλλέκτης Parallel Scavenge: Γενικά χρησιμοποιείται σε συνδυασμό με Parallel Old Συλλέκτης.Σε σύγκριση με τον parNew συλλέκτη, δίνει μεγαλύτερη προσοχή吞吐量έλεγχος, η απόδοση είναιΟ χρόνος εκτέλεσης νήματος χρήστη αντιστοιχεί στο συνολικό χρόνο λειτουργίας της CPU, η απόδοση είναι φυσικά όσο μεγαλύτερη τόσο το καλύτερο.

Το Multi-threading γενικά χρησιμοποιεί τον διακομιστή, επειδή η εκτέλεση του multi-threading περιλαμβάνει τον χρόνο κατανάλωσης της περιστροφής του slice. Αλλά είναι πολύ καλό για πόρους και η πλευρά του διακομιστή των υπολογισμών ανάλυσης που δεν χρειάζεται να αλληλεπιδράσει με τον χρήστη μπορεί να αυξήσει την απόδοση εκτέλεσης.

ταυτόχρονος συλλέκτης

Οι ταυτόχρονοι συλλέκτες περιλαμβάνουν: Συλλέκτη CMS, ο οποίος είναι ένας συλλέκτης που στοχεύει να διατηρήσει τον χρόνο παύσης του συστήματος όσο το δυνατόν συντομότερο και να παρέχει καλύτερη εμπειρία χρήστη. Το νήμα συλλογής του μπορεί να εκτελεστεί ταυτόχρονα με το νήμα χρήστη. Το CMS έχει τρία标记(αρχική ένδειξη, παράλληλη ένδειξη, παρατήρηση) και μία φορά清理(Ταυτόχρονη εκκαθάριση), δύο από τις τρεις σημάνσεις απαιτούν να σταματήσει το μικρότερο νήμα χρήστη, μια μακρύτερη σήμανση που ταυτίζεται με το νήμα χρήστη και η διαγραφή που είναι ταυτόχρονη με το νήμα χρήστη.

image.png

αρχικό σημάδι: Σημειώστε το πρώτο αντικείμενο που σχετίζεται με το GC Roots, ο χρόνος είναι πολύ μικρός ταυτόχρονη σήμανση: Εκτελέστε την αλυσίδα αναφοράς των GC Roots (αλγόριθμος ανάλυσης προσβασιμότητας) ταυτόχρονα με το νήμα χρήστη, η οποία διαρκεί πολύ επανετικέτα : Αναζητήστε ξανά τη νέα αλυσίδα αναφοράς που δημιουργήθηκε από το νήμα χρήστη κατά τη διάρκεια της ταυτόχρονης φάσης σήμανσης. Λίγο περισσότερο από το αρχικό σημάδι.Ταυτόχρονα σαφές:χρήση标记-清除算法Καθαρίστε τα άχρηστα αντικείμενα.

Τρία σημαντικά μειονεκτήματα: 1: Ευαισθησία CPU, η ταυτόχρονη λειτουργία μπορεί να επηρεάσει τη λειτουργία των νημάτων χρήστη σε επεξεργαστές με μικρό αριθμό πυρήνων. 2: Κυμαινόμενα σκουπίδια: Τα σκουπίδια που δημιουργούνται κατά τη διάρκεια της ταυτόχρονης φάσης καθαρισμού μπορούν να περιμένουν μόνο την επόμενη συλλογή GC. Τρία: Κατακερματισμός μνήμης, σήμανση-καθαρισμός Τα προϊόντα Puja έχουν μεγάλο χώρο ασυνεχούς μνήμης.

περίληψη

Αυτό το άρθρο ξεκινά από那些内存需要回收什么时候回收如何回收Ως υλοποίηση, έχουν γραφτεί δύο αλγόριθμοι κρίσης επιβίωσης αντικειμένων, συνθήκες για την ανακύκλωση περιοχής κλάσης, μηχανισμός παραγωγής και χρονισμός συλλογής ανακύκλωσης, τρεις αλγόριθμοι συλλογής και κοινώς χρησιμοποιούμενοι συλλέκτες απορριμμάτων.