Inhaltsverzeichnis | 4 |
Vorwort | 12 |
A – Java-Memory-Modell | 14 |
Kapitel 1 – Einführung in das Java-Memory-Modell | 18 |
1.1 Atomare Zugriffe | 20 |
1.2 Sequential Consistency | 21 |
1.3 Sichtbarkeitsregeln für volatile-Variablen | 22 |
1.4 Sichtbarkeitsregeln für Synchronisation | 23 |
1.5 Zusammenfassung | 25 |
Kapitel 2 – Das Java-Memory-Modell im Überblick | 26 |
2.1 Das Java-Memory-Modell | 27 |
2.2 Sichtbarkeitsregeln im JMM | 29 |
2.3 Zusammenfassung | 33 |
Kapitel 3 – Die Kosten der Synchronisation | 34 |
3.1 Performanceeinbußen durch Synchronisation | 35 |
3.2 Skalierbarkeitseinbußen durch Synchronisation | 36 |
3.3 Sequenzialisierung bekämpfen | 41 |
3.4 Zusammenfassung | 44 |
Kapitel 4 – Details zu volatile-Variablen | 46 |
4.1 volatile als Alternative zur Synchronisation | 46 |
4.2 Missverständnis | 49 |
4.3 Kosten von volatile | 51 |
4.4 Speichereffekte von volatile auf andere Variablen | 52 |
4.5 volatile-Referenzvariablen | 55 |
4.6 Zusammenfassung | 59 |
Kapitel 5 – volatile und das Double-Check-Idiom | 60 |
5.1 Ausgangssituation | 60 |
5.2 Das Double-Check-Idiom | 61 |
5.3 Optimierung à la Bloch | 64 |
5.4 Single-Check-Idiome | 67 |
5.5 Zusammenfassung | 71 |
Kapitel 6 – Regeln für die Verwendung von volatile | 72 |
6.1 Effekte von Synchronisation | 72 |
6.2 Regeln für den Einsatz von volatile | 74 |
6.3 Beispiele für den erfolgreichen Einsatz von volatile | 76 |
6.4 Zusammenfassung | 83 |
Kapitel 7 – Die Initialisation-Safety-Garantie | 84 |
7.1 Das Racy-Single-Check-Idiom | 84 |
7.2 Anforderungen an unveränderliche | 87 |
7.3 Speichereffekte im Zusammenhang mit final-Feldern | 88 |
7.4 Unterschiede zu volatile | 97 |
7.5 final Variablen vs. final Felder | 97 |
7.6 Zusammenfassung | 99 |
Kapitel 8 – Über die Gefahren allzu aggressiver Optimierungen | 100 |
8.1 Racy-Single-Check und unveränderlichen Typen | 100 |
8.2 Genereller Verzicht auf Synchronisation/volatile bei unveränderlichen Typen? | 102 |
8.3 Race Conditions bei der Konstruktion von Objekten | 105 |
8.4 Zusammenfassung | 110 |
Kapitel 9 – Atomic Scalars | 112 |
9.1 Ein Thread-sicherer Zähler mit Synchronisation | 113 |
9.2 CAS - Compare and Swap | 114 |
9.3 Ein Thread-sicherer Zähler unter Verwendung von atomaren Variablen | 115 |
9.4 Zusammenfassung | 117 |
Kapitel 10 – Atomare Referenzvariablen | 118 |
10.1 Fallstudie zu atomaren Referenzen | 118 |
10.2 Atomare Referenzen - Übersicht | 126 |
10.3 Praxisrelevanz | 128 |
10.4 Zusammenfassung | 129 |
Kapitel 11 – CopyOnWrite ArrayList | 132 |
11.1 Was ist eine CopyOnWriteArrayList? | 132 |
11.2 Wie funktioniert eine CopyOnWriteArrayList? | 133 |
11.3 Wie funktioniert der Iterator von CopyOnWriteArrayList | 137 |
11.4 Eine andere Anwendung desselben Prinzips | 139 |
11.5 Zusammenfassung | 142 |
A – Verweise | 144 |
B – Memory Management und Garbage Collection | 146 |
Kapitel 12 – Generational Garbage Collection | 149 |
12.1 Generational Garbage Collection | 149 |
12.2 Die Heap-Aufteilung in einer Sun JVM | 152 |
12.3 Vor- und Nachteil der Generational Garbage Collection | 155 |
12.4 Zusammenfassung | 157 |
Kapitel 13 – Young Generation Garbage Collection | 158 |
13.1 Mark and Sweep | 158 |
13.2 Mark and Copy | 161 |
13.3 Parallele Allokation und TLABs | 172 |
13.4 Zusammenfassung | 173 |
Kapitel 14 – Old Generation Garbage Collection - Teil 1 | 174 |
14.1 Wozu braucht man auf der Old Generation einen anderen Algorithmus? | 175 |
14.2 Serial Mark and Compact | 177 |
14.3 Alternative Algorithmen für die Old Generation | 181 |
14.4 Parallel Mark and Compact | 183 |
14.5 Zusammenfassung | 186 |
Kapitel 15 – Old Generation Garbage Collection - Teil 2 | 188 |
15.1 Concurrent Mark and Sweep | 188 |
15.2 Parallele Threads in CMS | 192 |
15.3 Synchronisationsbedarf und Interaktion mit der Young Generation Garbage Collection | 193 |
15.4 Rückfall in die serielle Garbage Collection | 195 |
15.5 Vor- und Nachteil des CMS-Collectors | 196 |
Kapitel 16 – Garbage Collection Tuning - die Ziele | 198 |
16.1 Garbage-Collection-Tuning-Ziele | 198 |
16.2 Multi-Core/Multi-Prozessor-Architektur und Garbage Collection | 206 |
16.3 Zusammenfassung | 208 |
Kapitel 17 – Garbage Collection Tuning - die Details | 210 |
17.1 Auswahl des Garbage Collectors | 210 |
17.2 Anpassen der Collectors an die Objektpopulation der Applikation | 213 |
17.3 Zusammenfassung | 225 |
Kapitel 18 – Garbage-First (G1) Garbage Collector - Teil 1 | 228 |
18.1 Motivation | 228 |
18.2 Funktionale Übersicht | 230 |
18.3 Zusammenfassung | 235 |
18.4 Danksagung | 235 |
Kapitel 19 – Garbage-First (G1) Garbage Collector - Teil 2 | 236 |
19.1 Details der G1-Verwaltung | 237 |
19.2 Die Garbage-Collection-Pause | 241 |
19.3 G1 Collection Lifecycle | 245 |
19.4 Zusammenfassung | 247 |
B – Verweise | 248 |