Frage

Diese Frage ist in ihrem Umfang beschränkt auf HotSpot Generationen . Gibt es eine Möglichkeit herauszufinden, programmatisch in der die Erzeugung einer bestimmten Instanz Leben. Daten wie zum Beispiel:

  • Ob jung oder alt Generation?
  • Wenn junge, die Überlebende Raum?
  • Innerhalb TLAB? Welcher Thread?

Jede Technik (ex, BTRACE , JVMTI ) funktioniert so lange, wie ich so etwas tun kann:

Object x = new Object();
HotSpotGenerationInfo info = HotSpotGenerationUtil.getInfo(x);

Beggars dürfen nicht wählerisch sein, sondern im Idealfall könnte ich auch lernen, wenn die Instanz von Interesse von einer Generation zur anderen verschoben wurde im Moment passiert es (dh Ereignisrückruf basiert - nicht interessiert in der Verzögerung & Overhead implizit in Polling).

Nicht in den Antworten interessiert, dass nur „nein“ sagen, ohne Begründung :)

War es hilfreich?

Lösung

Soweit ich weiß, kann man nicht direkt Abfrage, die Speicher-Pool ein Objekt zur Zeit in lebt. Allerdings Objekte durch eine Garbage Collection läuft auf einen anderen Speicherpool gefördert werden, und Sie können die Anzahl der Major / Minor gc abfragen läuft seit VM starten JMX verwenden. Wenn Sie zusätzlich zur Kenntnis dieser Zähler nehmen, wenn das Objekt erstellt wird, können Sie rekonstruieren, ob eine GC gibt da und das war das in das Objekt Leben bündeln.

Andere Tipps

Es gibt eine zusätzliche Komplikation auf die „die Anzahl der GCs zählen, da das Objekt erstellt wurde“ Ansatz - es braucht nicht berücksichtigt vorzeitige Objekt Förderung .

Wenn die Survivor Spaces grundsätzlich zu klein sind, und Speicherdruck von Eden (dh die Rate der Objekte zumindest überleben einmal) hoch ist, dann wird tenured gefördert werden Objekte, bevor sie die volle tenuring Schwelle getroffen.

In realen Beispielen, gesunde Anwendungen haben in der Regel nicht-Null-Prozentsatz der vorzeitigen Förderung. In der Tat ist eine 0% vorzeitige Promotion Rate ein wirklich schlechtes Zeichen - es sagt, dass Ihre Survivor Spaces sind viel, viel zu groß und Sie viel Speicherplatz verschwenden

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top