Hallo,
mich plagt eine Frage zum Entwurfsmuster "Fliegengewicht" (Flyweight). Ich habe ein Beispiel programmiert, das eine leichtgewichtige und eine schwergewichtige Variante hinsichtlich Speicherbedarf und Laufzeit vergleicht.
Das Programm macht folgendes:
1) Schwergewichtige Variante: einen Wald aus schwergewichtigen Bäumen, die ihren Zustand selbst speichern, erzeugen.
2) Leichtgewichtige Variante: einen einzigen leichtgewichtigen Baum ohne eigenen Zustand erzeugen und die Zustände der Instanzen in einem Array in einem BaumManager speichern.
3) jeweils Speicher mit einer explizit angeforderten Garbage Collection aufräumen, je einen Wald gemäß Varianten 1) und 2) erzeugen und die Zustände der Reihe nach ausgeben. Laufzeit und Speicherbedarf messen.
Für Interessierte habe ich die Quellen als JAR-File angehängt.
Ich hätte nun erwartet, dass die leichtgewichtige Variante weniger Speicher braucht und aufgrund nicht so häufig notwendiger Garbage Collection auch schneller ist. Jedoch beobachte ich häufig das Gegenteil, manchmal braucht die schwergewichtige Variante angeblich sogar 0 Bytes Speicher und nur gelegentlich wird meine Erwartung bestätigt. Das kann ich mir nicht erklären.
Ist das Flyweight-Pattern nun doch nicht so effizient wie behauptet, ein Fehler in meiner Implementierung oder liegt das am Java-Laufzeitsystem (JRE 1.6 unter Linux, Windows und Mac)?
Danke im Voraus,
Carol
mich plagt eine Frage zum Entwurfsmuster "Fliegengewicht" (Flyweight). Ich habe ein Beispiel programmiert, das eine leichtgewichtige und eine schwergewichtige Variante hinsichtlich Speicherbedarf und Laufzeit vergleicht.
Das Programm macht folgendes:
1) Schwergewichtige Variante: einen Wald aus schwergewichtigen Bäumen, die ihren Zustand selbst speichern, erzeugen.
2) Leichtgewichtige Variante: einen einzigen leichtgewichtigen Baum ohne eigenen Zustand erzeugen und die Zustände der Instanzen in einem Array in einem BaumManager speichern.
3) jeweils Speicher mit einer explizit angeforderten Garbage Collection aufräumen, je einen Wald gemäß Varianten 1) und 2) erzeugen und die Zustände der Reihe nach ausgeben. Laufzeit und Speicherbedarf messen.
Für Interessierte habe ich die Quellen als JAR-File angehängt.
Ich hätte nun erwartet, dass die leichtgewichtige Variante weniger Speicher braucht und aufgrund nicht so häufig notwendiger Garbage Collection auch schneller ist. Jedoch beobachte ich häufig das Gegenteil, manchmal braucht die schwergewichtige Variante angeblich sogar 0 Bytes Speicher und nur gelegentlich wird meine Erwartung bestätigt. Das kann ich mir nicht erklären.
Ist das Flyweight-Pattern nun doch nicht so effizient wie behauptet, ein Fehler in meiner Implementierung oder liegt das am Java-Laufzeitsystem (JRE 1.6 unter Linux, Windows und Mac)?
Danke im Voraus,
Carol