Frage

Javafx (1.2.x und 1.3.x) scheint keine Müllsammlung für mindestens Knoten und Szenen zuzulassen. Ein Knotenobjekt wird nach der Entfernung aus der Szene nicht befreit (es gibt keinen anderen expliziten Hinweis darauf).

Hier geht ein Beispiel:

var buttonB:Button =
   Button {
       text: "i'm just hanging here"
   }

var buttonC:Button =
   Button {
       text: "hit me to leak memory"
       action: function() {
           buttonB.managed = false;
           delete buttonB from mainBox.content;
           buttonB.skin = null;
           buttonB = null;
           java.lang.System.gc();
       }
   }

def mainBox:HBox =
   HBox {
       hpos: HPos.CENTER
       nodeVPos: VPos.CENTER
       layoutInfo: LayoutInfo {
        width: 800 height: 600
       }
       content: [buttonC, buttonB]
   }

Buttonb wird niemals befreit. Das Setzen von Haut in Null hilft irgendwie (in visualVM verschwinden die meisten Verweise auf die Schaltfläche), behebt jedoch das Problem nicht. Ich habe auch versucht, alle Mitglieder mit JavaFX -Reflexion ohne Glück aufzuheben.

Ist es möglich, ButtonB für GC zu berechnen und wie es geht?

Wird das Problem in Javafx 2.0 bestehen?

War es hilfreich?

Lösung

Ich fand (durch VisualVM -Inspektion), dass Javafx 1.3 hält Weichweite zu gepufferten Bildern (die wahrscheinlich gerenderte Versionen von Knoten darstellen) für entfernt wurden. Für mich war dies eine Art Speicherleck, da die weichen Referenzen abhängig von der Menge des freien Speichers gelöscht werden. Dies ist kein Speicherleck (outofMemoryException wird dadurch niemals passieren), aber für mich war dies Grund, ein sehr ineffizientes Müllsammeln zu verursachen.

Sie können verwenden XX:SoftRefLRUPolicyMSPerMB=<N> Um die zeitlichen Weichweite zu verkürzen, ist dies jedoch in einer möglichen (aber unwahrscheinlichen) Leistungsstrafe. Es legt die Anzahl der Millisekunden pro freier MB fest, dass ein Objekt aufbewahrt wird. Standard ist 1000 ms.

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