2012-05-15 8 views
6

Ich bin im Begriff, eine Anwendung auf einem Live-Server zu implementieren und jetzt bin ich an dem Teil, wo ich Heap und Permgen Größen für die jvm festlegen müssen. Ich habe viele Artikel gesehen und alle von ihnen sagen, "die minimale Größe des Heapspeichers auf (einige Anzahl)" und "legen Sie die maximale Größe des Heapspeichers auf (einige Anzahl)", aber keiner dieser Artikel sagt wirklich warum Die minimale Heap-Größe muss festgelegt werden. Ich verstehe den Grund, die maximale Größe des Heapspeichers festzulegen, aber nicht das Minimum. Ich wäre dankbar, wenn Sie etwas Licht in diese Sache bringen würden.Muss ich Java Minimum Heap Größe wirklich definieren

+0

Nun, warum würden Sie eine untere Grenze für irgendetwas setzen? Weil Ihr Programm möglicherweise einen bestimmten Betrag erfordert. Missverstehe ich die Frage? Meinst du, dass die Einstellung min tatsächlich benötigt wird? – keyser

+2

mögliches Duplikat von [Was ist der Grund, eine minimale Java-Heap-Größe festzulegen?] (Http://stackoverflow.com/questions/8085949/whats-the-reason-to-set-a-minimal-java-heap-size) – assylias

Antwort

6

Der Heap in Java ist der allgemeine Speicherzuordnungsbereich. Nehmen wir an, dass wir die minimale Heap-Größe auf 1000 Byte setzen (das ist eine absurd niedrige Zahl). Jetzt sagen wir, dass ich ein Objekt in meinem Programm instanziiere, das Text enthält, der zweitausend Zeichen lang ist. Ich kann dieses Objekt nicht speichern, ohne zuerst meine Heap-Größe zu erweitern. Jetzt ist vermutlich mein maximaler Heap-Parameter groß genug, um dies zuzulassen - aber das ist der Grund, um die maximale Heap-Größe zu setzen.

Angenommen, mein Server hat 4G RAM, und ich habe die minimale Heap-Größe darauf eingestellt. (Eine absurd große Zahl.) Wenn keine anderen Programme Speicher belegen, würde das funktionieren. Wenn ich jedoch einen zweiten Prozess mit meinem Java-Programm starten würde, wäre es nicht in der Lage, genügend Speicher zuzuweisen und zu beenden.

Die minimale Größe macht zwei Dinge für Sie; Erstens macht es Speicher schnell verfügbar, um einen schnellen Start zu ermöglichen. Zweitens können Sie Ihren jvm so einstellen, dass Sie einige Invarianten haben, mit denen Sie Vorhersagen treffen können, wie viele Prozesse Sie ausführen können. Wenn Ihre minimale Heap-Größe zu groß ist, verschwenden Sie wahrscheinlich Speicher für einen Prozess, der nie so viel benötigt, wodurch die Kapazität Ihres Systems begrenzt wird. Wenn Sie es zu klein einstellen, dauert das Starten von Programmen sehr lange, was sich negativ auf die Prozessleistung auswirkt.

1

Wenn Sie eine minimale Heap-Größe festlegen, kann Java etwas Speicherplatz reservieren, was die Startzeit verbessert.

1

Das explizite Festlegen der Mindestgröße (über der Standardvorgabe) hilft bei der Zuordnungsfragmentierung auf Betriebssystemebene und der Startzeitleistung.

Der Java-Heap wird durch vom Betriebssystem zugewiesenen Speicher unterstützt, je größer der anfängliche Block, desto weniger Neuzuordnung und Fragmentierung.

Wenn das Minimum auf das Maximum oder fast auf das Maximum eingestellt wird, werden diese Situationen vollständig beseitigt.