Εξηγήστε τη χρήση των παραμέτρων Xms
και Xmx
στις JVM. Ποιες είναι οι προεπιλεγμένες τιμές τους;
Η σημαία Xmx
καθορίζει τη μέγιστη δεξαμενή κατανομής μνήμης για μια εικονική μηχανή Java (JVM), ενώ η σημαία Xms
καθορίζει την αρχική δεξαμενή κατανομής μνήμης.
Αυτό σημαίνει ότι η JVM σας θα ξεκινήσει με την ποσότητα μνήμης Xms
και θα μπορεί να χρησιμοποιήσει το μέγιστο ποσό μνήμης Xmx
. Για παράδειγμα, η εκκίνηση μιας JVM όπως παρακάτω θα την εκκινήσει με 256 MB μνήμης και θα επιτρέψει στη διεργασία να χρησιμοποιήσει μέχρι 2048 MB μνήμης:
java -Xms256m -Xmx2048m
Η σημαία μνήμης μπορεί επίσης να καθοριστεί σε διαφορετικά μεγέθη, όπως kilobytes, megabytes κ.ο.κ.
-Xmx1024k
-Xmx512m
-Xmx8g
Η σημαία Xms
δεν έχει προεπιλεγμένη τιμή και η Xmx
έχει συνήθως προεπιλεγμένη τιμή 256 MB. Μια συνηθισμένη χρήση αυτών των σημαιών είναι όταν αντιμετωπίζετε ένα java.lang.OutOfMemoryError
.
Όταν χρησιμοποιείτε αυτές τις ρυθμίσεις, να έχετε κατά νου ότι αυτές οι ρυθμίσεις αφορούν τον σωρό της JVM's και ότι η JVM μπορεί/θα χρησιμοποιήσει περισσότερη μνήμη από το μέγεθος που έχει διατεθεί στον σωρό. Από την τεκμηρίωση της Oracle's:
Σημειώστε ότι η JVM χρησιμοποιεί περισσότερη μνήμη από τον σωρό. Για παράδειγμα, οι μέθοδοι Java, οι στοίβες νημάτων και οι εγγενείς χειρολαβές κατανέμονται σε μνήμη ξεχωριστή από το σωρό, καθώς και οι εσωτερικές δομές δεδομένων της JVM.
Εκτελέστε την εντολή java -X
και θα λάβετε μια λίστα με όλες τις επιλογές -X
:
C:\Users\Admin>java -X
-Xmixed mixed mode execution (default)
-Xint interpreted mode execution only
-Xbootclasspath:<directories and zip/jar files separated by ;>
set search path for bootstrap classes and resources
-Xbootclasspath/a:<directories and zip/jar files separated by ;>
append to end of bootstrap class path
-Xbootclasspath/p:<directories and zip/jar files separated by ;>
prepend in front of bootstrap class path
-Xdiag show additional diagnostic messages
-Xnoclassgc disable class garbage collection
-Xincgc enable incremental garbage collection
-Xloggc:<file> log GC status to a file with time stamps
-Xbatch disable background compilation
-Xms<size> set initial Java heap size.........................
-Xmx<size> set maximum Java heap size.........................
-Xss<size> set java thread stack size
-Xprof output cpu profiling data
-Xfuture enable strictest checks, anticipating future default
-Xrs reduce use of OS signals by Java/VM (see documentation)
-Xcheck:jni perform additional checks for JNI functions
-Xshare:off do not attempt to use shared class data
-Xshare:auto use shared class data if possible (default)
-Xshare:on require using shared class data, otherwise fail.
-XshowSettings show all settings and continue
-XshowSettings:all show all settings and continue
-XshowSettings:vm show all vm related settings and continue
-XshowSettings:properties show all property settings and continue
-XshowSettings:locale show all locale related settings and continue
Οι επιλογές -X είναι μη τυποποιημένες και μπορούν να αλλάξουν χωρίς προειδοποίηση.
Ελπίζω ότι αυτό θα σας βοηθήσει να κατανοήσετε τα Xms
, Xmx
καθώς και πολλά άλλα πράγματα που έχουν μεγάλη σημασία :)
Το ίδιο το ερώτημα έχει ήδη εξεταστεί παραπάνω. Απλά προσθέτουμε μέρος των προεπιλεγμένων τιμών.
Σύμφωνα με το http://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/optionX.html
Η προεπιλεγμένη τιμή του Xmx εξαρτάται από την πλατφόρμα και την ποσότητα μνήμης που είναι διαθέσιμη στο σύστημα.