... 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.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2001-02-28