Java Memory Model. Quick introduction.

50
Java Memory Model Quick introduction Юрий Кисляк @ EIS Group

Transcript of Java Memory Model. Quick introduction.

Page 1: Java Memory Model. Quick introduction.

Java Memory ModelQuick introduction

Юрий Кисляк @ EIS Group

Page 2: Java Memory Model. Quick introduction.
Page 3: Java Memory Model. Quick introduction.

Agenda

- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Page 4: Java Memory Model. Quick introduction.

Как выполняется наш код?

Как выполняется мой код?

Ожидание Реальность

Page 5: Java Memory Model. Quick introduction.

Как выполняется наш код?

Как выполняется мой код?

Ожидание Реальность

Program order (PO)

Page 6: Java Memory Model. Quick introduction.

Как выполняется наш код?

*example

Как выполняется мой код?

Ожидание Реальность

Program order (PO)

Page 7: Java Memory Model. Quick introduction.
Page 8: Java Memory Model. Quick introduction.
Page 9: Java Memory Model. Quick introduction.
Page 10: Java Memory Model. Quick introduction.
Page 11: Java Memory Model. Quick introduction.

Reordering: (sh)it happens...

Page 12: Java Memory Model. Quick introduction.
Page 13: Java Memory Model. Quick introduction.
Page 14: Java Memory Model. Quick introduction.

Кто виноват?

1. Compiler (javac, JIT)2. Runtime3. Hardware

Page 15: Java Memory Model. Quick introduction.

Что делать?

Memory ModelОтвечает на вопрос:

Какие данные я смогу увидеть в конкретной точке выполнения

программы?

Page 16: Java Memory Model. Quick introduction.

Что делать?

Memory ModelОтвечает на вопрос:

Какие данные я смогу увидеть в конкретной точке выполнения

программы? - Видимость- Порядок (допустимые оптимизации)

- Атомарность

Page 17: Java Memory Model. Quick introduction.

Атомарность

Page 18: Java Memory Model. Quick introduction.

Атомарность

Page 19: Java Memory Model. Quick introduction.

Атомарность

Page 20: Java Memory Model. Quick introduction.

Какие данные я смогу увидеть в конкретной точке выполнения

программы?

- Видимость- Атомарность- Порядок

Page 21: Java Memory Model. Quick introduction.

Java memory model

Before java 5.0: “Once upon a time…”

Page 22: Java Memory Model. Quick introduction.

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.

Agenda

- Program Order- Memory Model- Sequential consistency- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Page 24: Java Memory Model. Quick introduction.

Sequentially consistent

1. В каждый момент времуни выполняется одна операция

2. Каждая операция видит результат всех прдыдущих

3. Порядок выполения согласован с порядком программы (program order)

Page 25: Java Memory Model. Quick introduction.

Sequentially consistent - непригодна

Data race

Page 26: Java Memory Model. Quick introduction.

Sequentially consistent - непригодна

1. Несколько потоков одновременно обращаются к переменной.

2. Один из потоков пишет.3. Нет синхронизации.

* не путать с race condition

Data race

Page 27: Java Memory Model. Quick introduction.

Agenda

- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Page 28: Java Memory Model. Quick introduction.

Syncronization

Page 29: Java Memory Model. Quick introduction.
Page 30: Java Memory Model. Quick introduction.

JMM: relaxed model

● “Обычные”инструкцииупорядочены внутри своего потока

● Synchronization actionsупорядочены глобально между всеми потоками

Page 31: Java Memory Model. Quick introduction.

JMM: relaxed model

● “Обычные”инструкцииупорядочены внутри своего потока

● Synchronization actionsупорядочены глобально между всеми потоками

Page 32: Java Memory Model. Quick introduction.

Synchronization order

* не запоминаем этот слайд

Page 33: Java Memory Model. Quick introduction.

Agenda

- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Page 34: Java Memory Model. Quick introduction.

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.

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.

Happens-before (partial order)

HB = {PO,SW}+ (транзитивное замыкание)

Page 37: Java Memory Model. Quick introduction.

Happens-before (partial order)

HB = {PO,SW}+ (транзитивное замыкание)

Page 38: Java Memory Model. Quick introduction.

Happens-before (partial order)

HB = {PO,SW}+ (транзитивное замыкание)

Page 39: Java Memory Model. Quick introduction.

Happens-before Visibility

Page 40: Java Memory Model. Quick introduction.

Happens-before Visibility

Page 41: Java Memory Model. Quick introduction.
Page 42: Java Memory Model. Quick introduction.
Page 43: Java Memory Model. Quick introduction.

SW

Page 44: Java Memory Model. Quick introduction.

SW

Page 45: Java Memory Model. Quick introduction.

SWu=7;

u != 7 &&

Page 46: Java Memory Model. Quick introduction.

SW

Page 47: Java Memory Model. Quick introduction.

SW

Page 48: Java Memory Model. Quick introduction.

SW

Page 49: Java Memory Model. Quick introduction.

Agenda

- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Page 50: Java Memory Model. Quick introduction.

Agenda

- Program Order- Memory Model- Sequentially consistent- Synchronization Action- Synchronization Order- Synchronized With- Happens Before

Ta-da!