2012-08-24 12 views
8

Meine Frage ist, wie der Titel, und ich habe einige Kenntnisse durch Suche:Warum benötigt die JVM weniger Speicher als -Xms?

  1. Linux-Speicher How to measure actual memory usage of an application or process?

    geteilt
  2. JVM wird die Größe des Speichers in Xms gefassten reservieren What does the -Xms JVM mean in reference to heap memory?

Aber immer noch nicht wissen, warum, können einige auf etwas Hilfe bieten?

Hier ist mein Testlauf auf Ubuntu12.04 (64bit) | JDK 1.7.0_04. und oben zeigt unten:

PID USER  PR NI VIRT RES  SHR S %CPU %MEM TIME+ COMMAND 
4067 brian  20 0 5316m **262m** 7496 S 0 3.3 0:00.30 java -**Xms4096m** -Xmx4096m Test 
4066 brian  20 0 3182m **256m** 7496 S 0 3.3 0:00.30 java -**Xms2048m** -Xmx2048m Test 
4065 brian  20 0 2114m **252m** 7492 S 0 3.2 0:00.30 java -**Xms1024m** -Xmx1024m Test 
4064 brian  20 0 1314m **76m** 7584 S 0 1.0 0:00.20 java -**Xms256m** -Xmx256m Test 
4063 brian  20 0 1180m **51m** 7608 S 0 0.7 0:00.21 java -**Xms128m** -Xmx128m Test 

Antwort

5

Sie befinden sich in der resident Speicher suchen - das heißt, die physikalische RAM verbraucht. Weitere Informationen finden Sie unter here.

Der virtuelle Speicher ist jedoch der von Ihrer Anwendung belegte Speicher einschließlich des ausgelagerten Speichers (auf Platte). Sie werden sehen, dass es eine engere Übereinstimmung mit dem virtuellen Speicher und Ihren -Xms Einstellungen gibt.

Weitere Informationen finden Sie unter this ServerFault answer.

+0

nur um zu fragen, "warum Swap verwendet, auch wenn meine Erinnerung reichlich vorhanden sind". und habe die Antwort von der URL, die du angehängt hast ... Danke! –

+0

Wann wird der RES Speicher xms wachsen? Ich habe einen Fortschritt, der xms und xmx = 6g, und nach dem Bootstrap, RES ist 4g, nach einem Tag, es ist 5,9 g, aber wenn ich den Haufen dump, es ist nur 3,9 g. Wird jvm weiterhin Speicher verbrauchen, bis xms benötigt wird, obwohl die verwendeten Objekte im Speicher nicht so viel benötigen? – Jaskey

3

Wenn Ihre JVM startet, reserviert sie beim Start die maximale Heap-Größe als einen fortlaufenden Block virtuellen Speichers. Es werden jedoch nur die tatsächlich verwendeten Seiten zu residenten Seiten (tatsächlicher Hauptspeicher)

Wenn Sie die Mindestgröße festlegen, wird die JVM nicht gezwungen, so viel Speicher zu verwenden, wenn sie nicht benötigt wird. Stattdessen wird nur wenig Aufwand betrieben, um den Speicher bis zu diesem Punkt zu reduzieren (möglicherweise sehen Sie noch einige kleinere Sammlungen). In den meisten Anwendungen wird die Mindestgröße fast sofort erreicht, aber ein "Hallo Welt" -Programm verwendet den gleichen Speicher, egal wie groß Sie setzen die Mindestgröße zu sein.

+0

also meinst du das, wenn ich xms = xmx = 6g, die meiste zeit die gc nicht ausgelöst selbst ich habe nur 4g erreichbare objekte? – Jaskey

Verwandte Themen