Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> Προγραμματισμός Java

HashMap : Πώς να αφαιρέσει την αιτία της διαρροής μνήμης

Οι τυποποιημένες βιβλιοθήκες για τη γλώσσα προγραμματισμού Java παρέχει την κλάση HashMap . Ένα HashMap είναι μια χαρτογράφηση από τα κλειδιά για τις τιμές , όπου τα κλειδιά και τις αξίες μπορεί να ανήκει σε οποιαδήποτε δεδομένη κλάση Java . Μεταξύ άλλων ενεργειών , HashMap παρέχει μια μέθοδο για να βρείτε την τιμή που αντιστοιχεί σε ένα συγκεκριμένο κλειδί και να προσθέσετε και να διαγράψετε ( κλειδί, τιμή) ζεύγη από το HashMap . HashMaps είναι μια κοινή πηγή της μνήμης διαρροή λάθη σε προγράμματα Java : Οι περιπτώσεις κάποια τάξη σωστή διαχείριση από τον κώδικα , αλλά ένα σφάλμα προγραμματισμού τους αποτρέπει από το να διαγραφούν από το HashMap όταν δεν χρειάζονται πλέον . Επειδή υπάρχει τουλάχιστον μία εξαιρετική αναφορά σε αυτές τις ορφανά αντικείμενα , συλλέκτη σκουπιδιών Java δεν μπορεί να διεκδικήσει εκ νέου τη μνήμη τους , έτσι ώστε ο χρόνος εκτέλεσης Java τρέχει τελικά έξω από τη μνήμη σωρού . Οδηγίες
Η

1 Εκτελέστε την εφαρμογή Java με το εργαλείο profiler ( hprof ) ενεργοποιείται και προφίλ σωρό υλοτομία . Ο ακριβής τρόπος για να γίνει αυτό εξαρτάται από το λειτουργικό σύστημα. Για παράδειγμα , στο Linux , ξεκινήστε την αίτηση ως εξής :

java - Xrunhprof : αρχείο = MyLog.txt , συσσωρεύω = sites MyApp

Αντικαταστήστε MyApp από το όνομα της εφαρμογής Java σας . Αυτή η επίκληση ξεκινά τη Java Virtual Machine ( JVM ) στη λειτουργία προφίλ ? . Το JVM γράφει την έξοδο του profiler να καταθέσει MyLog.txt 2

Κάντε τη διαδικασία αίτησης σας κάποια φόρτο εργασίας , έτσι ώστε τα αντικείμενα ( σε ειδικότερα , HashMaps ) διατίθενται και απορρίπτονται . Πάρτε ένα στιγμιότυπο της κατάστασης του σωρού . Για παράδειγμα , στο Linux , η profiler δημιουργεί ένα στιγμιότυπο της κατάστασης του σωρού όταν εκτελείτε :

kill -3 jvmPID

Αντικαταστήστε jvmPID με το αναγνωριστικό διαδικασίας της εμφάνισης JVM που εκτελεί την εφαρμογή σας . Hprof προσθέτει ένα στιγμιότυπο του σωρού με τα τρέχοντα περιεχόμενα του αρχείου MyLog.txt .
Εικόνων 3

Κάντε τη διαδικασία αίτησης σας περίπου το ίδιο ποσό του φόρτου εργασίας , έτσι ώστε οι περισσότερες δημιουργούνται αντικείμενα και τα σκουπίδια που συλλέγονται . Πάρτε ένα άλλο στιγμιότυπο της κατάστασης του σωρού , όπως στο βήμα 2 .
Η 4

Συγκρίνετε τις δύο στιγμιότυπα στα βήματα 2 και 3 . Ειδικότερα , κοιτάξτε τις γραμμές μεταξύ « SITES BEGIN" και " ΧΩΡΟΙ END ". Προσδιορίζουν τις τάξεις των οποίων τα αντικείμενα έχουν αυξηθεί οι περισσότεροι σε αριθμό μεταξύ των δύο στιγμιότυπα ? Αυτοί είναι οι μόνοι υπεύθυνοι για διαρροές μνήμης , καθώς το φορτίο σε επεξεργασία από την εφαρμογή σας ήταν χονδρικά σταθερός στις δύο στιγμιότυπα
5

Εξετάστε . τα στιγμιότυπα για να προσδιορίσει τα μέρη του κώδικα κατανομής αντικείμενα που δεν παίρνουν ελευθερωθεί όταν χρειάζεται . Γι 'αυτό , να επικεντρωθούμε στις γραμμές που ξεκινούν με « TRACE » που έχουν « » εκδήλωση για την ακόλουθη γραμμή στιγμιότυπο , για κάθε μία από τις κατηγορίες που προσδιορίζονται στο Βήμα 4 .
Η 6

Συμπεριλάβετε το λείπουν διαγραφές των αναφορών για τις κατηγορίες πρόβλημα για τα τμήματα του κώδικά σας που αναγνωρίζονται στο Βήμα 5 . Οι διαρροές μνήμης συμβεί πια .
Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα