java memory model. quick introduction
TRANSCRIPT
![Page 1: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/1.jpg)
Java Memory ModelQuick introduction
Юрий Кисляк @ EIS Group
![Page 2: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/2.jpg)
![Page 3: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/3.jpg)
Agenda
- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
![Page 4: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/4.jpg)
Как выполняется наш код?
Как выполняется мой код?
Ожидание Реальность
![Page 5: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/5.jpg)
Как выполняется наш код?
Как выполняется мой код?
Ожидание Реальность
Program order (PO)
![Page 6: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/6.jpg)
Как выполняется наш код?
*example
Как выполняется мой код?
Ожидание Реальность
Program order (PO)
![Page 7: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/7.jpg)
![Page 8: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/8.jpg)
![Page 9: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/9.jpg)
![Page 10: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/10.jpg)
![Page 11: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/11.jpg)
Reordering: (sh)it happens...
![Page 12: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/12.jpg)
![Page 13: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/13.jpg)
![Page 14: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/14.jpg)
Кто виноват?
1. Compiler (javac, JIT)2. Runtime3. Hardware
![Page 15: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/15.jpg)
Что делать?
Memory ModelОтвечает на вопрос:
Какие данные я смогу увидеть в конкретной точке выполнения
программы?
![Page 16: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/16.jpg)
Что делать?
Memory ModelОтвечает на вопрос:
Какие данные я смогу увидеть в конкретной точке выполнения
программы? - Видимость- Порядок (допустимые оптимизации)
- Атомарность
![Page 17: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/17.jpg)
Атомарность
![Page 18: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/18.jpg)
Атомарность
![Page 19: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/19.jpg)
Атомарность
![Page 20: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/20.jpg)
Какие данные я смогу увидеть в конкретной точке выполнения
программы?
- Видимость- Атомарность- Порядок
![Page 21: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/21.jpg)
Java memory model
Before java 5.0: “Once upon a time…”
![Page 22: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/22.jpg)
Java memory model
Before java 5.0: “Once upon a time…”
After java 5.0: “JSR 133”
https://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf
![Page 23: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/23.jpg)
Agenda
- Program Order- Memory Model- Sequential consistency- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
![Page 24: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/24.jpg)
Sequentially consistent
1. В каждый момент времуни выполняется одна операция
2. Каждая операция видит результат всех прдыдущих
3. Порядок выполения согласован с порядком программы (program order)
![Page 25: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/25.jpg)
Sequentially consistent - непригодна
Data race
![Page 26: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/26.jpg)
Sequentially consistent - непригодна
1. Несколько потоков одновременно обращаются к переменной.
2. Один из потоков пишет.3. Нет синхронизации.
* не путать с race condition
Data race
![Page 27: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/27.jpg)
Agenda
- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
![Page 28: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/28.jpg)
Syncronization
![Page 29: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/29.jpg)
![Page 30: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/30.jpg)
JMM: relaxed model
● “Обычные”инструкцииупорядочены внутри своего потока
● Synchronization actionsупорядочены глобально между всеми потоками
![Page 31: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/31.jpg)
JMM: relaxed model
● “Обычные”инструкцииупорядочены внутри своего потока
● Synchronization actionsупорядочены глобально между всеми потоками
![Page 32: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/32.jpg)
Synchronization order
* не запоминаем этот слайд
![Page 33: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/33.jpg)
Agenda
- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
![Page 34: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/34.jpg)
Synchronized-with (partial order)
● v-read(a) -SW-> [следующий в SO] v-write(a)● lock(m) -SW-> [следующий в SO] unlock(m)
![Page 35: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/35.jpg)
Synchronized-with (partial order)
● v-read(a) -SW-> [следующий в SO] v-write(a)● lock(m) -SW-> [следующий в SO] unlock(m)
![Page 36: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/36.jpg)
Happens-before (partial order)
HB = {PO,SW}+ (транзитивное замыкание)
![Page 37: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/37.jpg)
Happens-before (partial order)
HB = {PO,SW}+ (транзитивное замыкание)
![Page 38: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/38.jpg)
Happens-before (partial order)
HB = {PO,SW}+ (транзитивное замыкание)
![Page 39: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/39.jpg)
Happens-before Visibility
![Page 40: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/40.jpg)
Happens-before Visibility
![Page 41: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/41.jpg)
![Page 42: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/42.jpg)
![Page 43: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/43.jpg)
SW
![Page 44: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/44.jpg)
SW
![Page 45: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/45.jpg)
SWu=7;
u != 7 &&
![Page 46: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/46.jpg)
SW
![Page 47: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/47.jpg)
SW
![Page 48: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/48.jpg)
SW
![Page 49: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/49.jpg)
Agenda
- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
![Page 50: Java Memory Model. Quick introduction](https://reader034.vdocuments.net/reader034/viewer/2022042701/55ce6be9bb61eba57e8b4620/html5/thumbnails/50.jpg)
Agenda
- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before
Ta-da!