2012-04-04 9 views
1

Ich bin Benchmarking eines Server-Prozesses, in Java und es scheint, dass Hotspot nicht viele GCs macht, aber wenn es tut, schlägt seine Leistung massiv.Hotspot erzwingen, um häufige GCs zu erstellen?

Kann ich den Hotspot zwingen, häufiger kleinere GCs als einige wenige lange GCs zu erstellen?

Antwort

0

Sie können die JVM sagen eine Garbage Collection programmatisch durch zu tun: System.gc(). Bitte beachten Sie, dass das Javadoc sagt, dass dies nur ein Vorschlag ist. Sie können versuchen, dies aufzurufen, bevor Sie in einen kritischen Abschnitt gelangen, in dem Sie die GC-Leistungseinbußen vermeiden möchten.

+0

Die Sache ist, dass es buchstäblich ein Vorschlag ist. Du sagst: "Hey, Garbage Collector, könntest du bitte eine Reinigung geben?" Es ist völlig erlaubt zu antworten "Lolnope!" – Lucas

1

Interferring mit, wenn der GC aufgerufen wird, ist in der Regel eine schlechte Idee. Ein besserer Ansatz wäre es, die Größen von Eden, Survivor und alten Speicherplatz zu optimieren, wenn Sie Probleme mit der Leistung des GC haben.

Wenn ein voller Sweep gemacht werden muss, ist es egal wie oft es aufgerufen wurde, die Geschwindigkeit wird immer relativ langsam sein, die einzigen schnellen GC Calls sind die in eden und survivor space.

So könnte eden und survivor space Ihr Problem lösen, aber leider ist eine gute Speicherprofilierung ziemlich zeitaufwändig und komplex durchzuführen.

http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html (Link von anderer Antwort gestohlen) gibt auch die Optionen zur Konfiguration, falls erforderlich. -XX: NewRatio = 2 oder -XX: NewRatio = 3 könnte deine Geschwindigkeit erhöhen, aber es könnte auch langsamer werden. Leider ist das sehr abhängig von der Anwendung.

0

Sie können erhöhen, wie oft der GC durchgeführt wird, indem Sie die Werte für junge/neue Größen verringern oder GC häufiger aufrufen. Das bedeutet nicht, dass Sie für eine kürzere Zeit pausieren, nur dass es oft passieren wird.

Der beste Weg, um die Auswirkungen von GC zu reduzieren, ist Speicher-Profil Ihre Anwendung und reduzieren Sie die Menge an Müll, die Sie produzieren. Dies beschleunigt nicht nur Ihren Code, sondern reduziert auch, wie oft und wie lange jedes GC stattfindet.

Im extremeren Fall können Sie reduzieren, wie oft der GC auf weniger als einmal pro Tag auftritt, und es als Problem insgesamt entfernen.

Verwandte Themen