Flyweight-Pattern verhält sich unerwartet

Carol

Mitglied
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
 

Anhänge

  • flyweight.jar
    2,7 KB · Aufrufe: 14

Carol

Mitglied
Hallo,

indem ich Runtime.getRuntime().freeMemory() vor und nach der betrachteten Operation aufrufe. Das liefert mir jeweils den reservierten, aber noch freien Speicher. Anschließend ermittle ich den Unterschied.

Carol
 

Marco13

Top Contributor
Wie verläßlich und genau freeMemory() ist, weiß ich im Moment zwar nicht, aber ich würde ehrlich gesagt keinen cent drauf verwetten, dass der dort zurückgegebene Wert irgendeine Aussagekraft hat. (Das ist vielleicht "zu drastisch" formuliert, aber man sollte sich wirklich nicht darauf verlassen). Lass das ganze mal in der jVisualVM laufen (ist beim JDK dabei), damit kriegt man genauere Informationen - auch wofür der Speicher tatsächlich verwendet wird.
 
M

maki

Gast
freeMemory() ist gut um zu verwirren, macht nämlich genau das was der Name sagt: gibt den freien Speicher zurück.
Falls die VM den Speicher erhöht (limit Xmx), zeigt free Memory plötzlich mehr freien Speicher an, obwohl meist mehr Speicher belegt ist, sonst hätte die VM ihn wohl nicht erhöht.

Wenn du messen willst, nimm einen Profiler wie zB. VisualVM.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Verständnisproblem: Flyweight Softwareentwicklung 0
B Haskell pattern matching in if else Anweisung umschreiben Softwareentwicklung 3
E Frage zu Dekorator-Pattern Softwareentwicklung 2
M Visito/Besucher Design-Pattern/Strukturmuster Softwareentwicklung 4
H2SO3- design pattern: code in model classes Softwareentwicklung 5
G Design Pattern gesucht! Softwareentwicklung 4
D Design Pattern Softwareentwicklung 6
slawaweis Factory-Builder Pattern? Softwareentwicklung 6
B konfigurierbare Objekte - Singelton und Factory Pattern Softwareentwicklung 3
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
U Decorator Pattern in der Java API Softwareentwicklung 6
M Proxy Pattern - Verständnisfrage Softwareentwicklung 2
0 Unklarheiten beim State Pattern Softwareentwicklung 2
N Composite pattern Softwareentwicklung 2
N Pattern Softwareentwicklung 2
L Builder Pattern Softwareentwicklung 6
1 Factory-Pattern: Bitte um Tipps zur Anwendung Softwareentwicklung 3
L Pattern Softwareentwicklung 3
J DAO Pattern bei komplexen Datenbankzugriffen Softwareentwicklung 2
M IllegalStateException - Problem mit GUI und Observer pattern Softwareentwicklung 4
G Pattern für Datenbank Anwendung Softwareentwicklung 22
A Iterato-Pattern und Innere Klassen Softwareentwicklung 9
F Unterschied Command und Strategy pattern Softwareentwicklung 4
F Wann Observer Pattern nehmen und Vorteile davon? Softwareentwicklung 5
H Frage ueber Prototype Pattern? Softwareentwicklung 2
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
G Warum/Wann mehrere Modells beim MVC-Pattern verwenden ? Softwareentwicklung 7
timomeinen DAO Pattern - Relationen mit DTO abbilden Softwareentwicklung 9
D Singleton pattern Softwareentwicklung 19
M decoration pattern Softwareentwicklung 2

Ähnliche Java Themen

Neue Themen


Oben