- ... Zwischenrepräsentation2.1
- Hier wurde der
Einfachheit halber Java als Zwischenrepräsentation gewählt. Ein
Compiler wird natürlich eine angemessenere interne Repräsentation
wählen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
Informations-2.2
- Statische Compiler könnten theoretisch auf ein
Profil des letzten Programmlaufs zurückgreifen -- eine beliebte
Technik von Herstellern von C-Compilern zur Erzielung hoher
SPEC-Benchmarks.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... werden2.3
- Die
Menge der lokalen Variablen läßt sich teilweise noch weiter
einschränken, beispielsweise wegen begrenzter
Sichtbarkeitsbereiche
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
Phase``)2.4
- Da der Algorithmus Zeiger verändert, kann er nicht
für die Implementierung einer konservativen Garbage Collection
verwendet werden. Dies gilt für alle kompaktierenden Algorithmen,
da sie zur Kompaktierung Objekte verschieben müssen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... werden2.5
- Es darf allerdings nicht übersehen werden, daß die
notwendige Synchronisierung die Komplexität des Entwurfs wiederum
erhöht.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
Ereignisvariable2.6
- Nach Hoares Definition kann ein Monitor
mehrere Ereignisvariablen enthalten, in Java genau eine.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... wurde2.7
- Auch Signalisierung kann nur verwendet
werden, wenn der Monitor erworben ist.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... Speicher2.8
- Diese Definition ist
vereinfachend: bei indirekten Speicherzugriffen stehen Operanden
oder Ziel einer Operation erst zur Laufzeit fest.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... kann2.9
- Nota bene: diese Problematik liegt jenseits
der von Cache-Kohärenz. Es geht darum, daß Speicheroperationen unter
Umständen gar nicht in Programmordnung ausgeführt werden.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
verhindern2.10
- Ein ,,Beobachter`` auf einem anderen Prozessor muß
zumeist auch auf Leserseite eine solche Barrier-Instruktion
verwenden, da ansonsten eine Leseoperation ,,zu früh`` ausgeführt
werden könnte.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... erhalten.2.11
- Dies ist keinesfalls hinreichend für
Thread-Sicherheit: die Anwendungssemantik erfordert oftmals
aufrufübergreifende Synchronisierungsklammern.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... Methodengröße3.1
- Dies ist setzt natürlich entsprechende
Compiler-Algorithmen voraus.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... einnehmen3.2
- Dies ist natürlich unter
Berücksichtigung von blockierten oder wartenden Threads zu sehen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... p.x)3.3
- Im aktuellen Maschinencode fallen diese Teile
teilweise wieder zusammen, z.B. wenn der Test implizit beim
Speicherzugriff durch Hardware-Mechanismen implementiert ist.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... JDBC3.4
- Java Database
Connectivity
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
muß4.1
- Eine eigene Liste für jede verwendete Objektgröße
führt zu einen erheblich höheren Speicher- und
Synchronisierungsbedarf. Genaueres hierzu findet sich bei
[Huelsbergen and Winterbottom, 1998]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... beschreiben4.2
- Aus
Sicht des Laufzeitsystems könnte man auch umgekehrt formulieren,
daß eine Garbage Collection nur an den Stellen stattfinden darf,
für die eine solche Tabelle existiert.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... Alter4.3
-
Das Alter eines Objektes wird im für generationale Algorithmen
zumeist als die Anzahl der GC-Zyklen, die ein Objekt überlebt hat,
definiert, da sich dieser Wert einfach im Objektkopf speichern und
aktualisieren läßt. Meßverfahren interpretieren im Sinne einer
besseren Vergleichbarkeit das Alter eines Objekts als die Menge des
inzwischen angelegten Speichers.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... bleiben4.4
- Das hier
zugrundeliegende Anwendungsmodell könnte beispielsweise das eines
dedizierten Anwendungsservers sein, der mehrere Applikationen in
einer virtuellen Maschine ausführt.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
an4.5
- Man beachte, daß die hier verwendete Terminologie für
Garbage Collection gebräuchlich ist, jedoch nicht mit der aus
Abschnit 2.3 korrespondiert. Während im
Allgemeinen zwischen potentieller und tatsächlicher Gleichzeitigkeit
unterschieden wird, verwendet man die Begriffe in diesem Kontext, um
zwischen Nebenläufigkeit in sich bzw. mit der Anwendung zu
differenzieren.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... müssen5.1
-
[Agesen, 1999] deutet eine potentielle deutliche Reduktion dieser
Zahl von inkonsistenten Threads an, vertieft dieses jedoch nicht
weiter.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... werden5.2
- Die VM-Spezifikation
[Lindholm and Yellin, 1996] diktiert zwar keine Blockstrukturierung
der Synchronisierungskonstrukte, erlaubt es einer VM jedoch,
eine solche Einschränkung zu machen!. Effektiv bedeutet dies,
daß die Synchronisierungskonstrukte geschachtelt sein müssen, will
man portablen Java-Bytecode erzeugen.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... header)5.3
- Siehe
5.4.1 zu header word displacement.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
Benchmark5.4
- JRockit [Appeal, 2000]/Volano [Volano, 2000]
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
MaschinenA1
- Dies ist nicht zuletzt eine Folge des beteiligten
Teams.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...
bringenA2
- Beispielsweise muß das Speichern einer Referenz und
die anschließende Markierung ihrer Karte aus Sicht des Garbage
Collectors atomar ausgeführt werden.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.