2012-03-24 4 views
2

Ich vermute, das ist nicht möglich ... aber hier geht. Mein Verständnis ist, dass eden Raum billiger zu sammeln ist als alter Raum, vor allem, wenn Sie beginnen, in sehr großen Haufen zu kommen. Große Heaps neigen dazu, mit lang laufenden Anwendungen (Server-Apps) zu kommen und Server-Apps wollen oft eine Art von Caches verwenden. Caches mit einer Art Räumung (LRU) neigen dazu, einige Annahmen zu besiegen, die GC macht (temporäre Objekte sterben schnell). Durch Cache-Räumungen werden alte Gene schneller aufgefüllt, als Sie möchten, und Sie haben eine teurere alte Gen-Sammlung.JVM GC degote Objekt zu eden Raum?

Nun scheint es, als könnte diese Art von Ding vermieden werden, wenn Java eine Möglichkeit bietet, eine Referenz als kurz vor dem Sterben zu markieren (Stichwort löschen)? Der Unterschied zwischen diesem und C++ ist, dass die Verwendung optional ist. Und das Löschen löscht das Objekt nicht wirklich, sondern ist ein Hinweis für den GC, dass es das Objekt zurück in den Eden-Raum zurückstufen soll (wo es leichter gesammelt werden kann). Ich vermute, dass diese Funktion nicht existiert, aber warum nicht (gibt es einen Grund, dass es eine schlechte Idee ist)?

+0

+1 weil ich wie GC-Fragen. Sie sind hart. –

Antwort

1

Eigentlich ist der Eden Space die Speicherzone, in der Objekte neu erstellt werden. Sobald ein Objekt den eden-Raum verlässt, kann es nicht wieder dort platziert werden, dann ist die GC-Implementierung von Java so undurchsichtig, dass normalerweise nicht viel zu tun ist.

Es würde einige Einschränkungen in jedem Fall brechen, der Eden-Raum ist leicht Müll gesammelt in dem Sinne, dass die Pflege der Entfernung von Gegenständen, die eine kurze Lebensdauer haben. Wenn ein Objekt genug Zeit überlebt hat, dann muss es anderswo bewegt werden, es wäre wie der Versuch, gegen die vom GC selbst auferlegten Regeln zu gehen, was in Java nie leicht zu erreichen ist.

+0

nicht sicher, ich stimme zu, aber nenne es dann etwas anderes. mache einen Fegefeuerraum, der Objektverweisen gewidmet ist, die wahrscheinlich tot sind. Indem Sie die Objektreferenz aus der alten Generation verschieben, reduzieren Sie die alte Gengröße und schaffen einen relativ kleinen Platz, der leicht gesammelt werden kann. In einem Fall, in dem alte Generation 20GB oder was auch immer sagt, ist das Vermeiden des vollen GC ein wenig Mühe wert! – Kevin