SlideShare a Scribd company logo
1 of 30
Download to read offline
JMM in Android
Максим Ефимов
Android team leader, Google developer expert
0
О чем будем говорить?
• Зачем понадобилась JMM
• Happens-before
• ARM vs x86
1
Естественный порядок
2
int a, b;



void foo() {

int l1 = a;

int l2 = l1 + 10;

int l3 = b;

int l4 = l2 % 3;

}
3
Reordering
int a, b;



void foo() {

int l1 = a;

int l3 = b;
int l2 = l1 + 10;

int l4 = l2 % 3;

}
int a, b;



void foo() {

int l1 = a;

int l2 = l1 + 10;

int l3 = b;

int l4 = l2 % 3;

}
4
Reordering – ограничения
int a, b;



void foo() {

int l2 = l1 + 10;
int l1 = a;

int l3 = b;

int l4 = l2 % 3;

}
int a, b;



void foo() {

int l1 = a;

int l2 = l1 + 10;

int l3 = b;

int l4 = l2 % 3;

}
Reordering не меняет семантику кода в
одном потоке
Нотация записи
5
A==B==0
r1=A

B=1
r2=B

A=1
общее для обоих потоков
происходит в первом потоке происходит во втором потоке
r1=? r2=?
Reordering в многопоточности
6
A==B==0
r1=A

r2=B
B=1
A=1
Ожидаем (r1, r2)
(0, 0),(1, 1),(0, 1)
A==B==0
r1=A

r2=B
A=1
B=1
Получаем (r1, r2)
(0, 0),(1, 1),(0, 1),
(1, 0)
Семантика нарушается
Нужно больше порядка
7
Action 1.1
Action 1.2
Sync action 1
Sync action 2
Action 2.1
Action 2.2
Action 2.3Action 1.3
Action 1.4 Action 2.4
Поток 1 Поток 2
Порядок
между
потоками
Синхронизация
8
Monitor.Lock()
Action 1.2
Monitor.Unlock()
Monitor.Lock()
Action 2.1
Action 2.2
Action 2.3Action 1.3
Action 1.4 Monitor.Unlock()
Поток 1 Поток 2
Data race
9
• Один поток читает данные
• Второй поток пишет данные
• Эти два действия не синхронизированы
Java memory model
10
«A memory model describes, given a program and an
execution trace of that program, whether the execution
trace is a legal execution of the program.»
JSR 133
JMM философия
11
Порядок выполнения может быть любой, кроме
запрещенных порядков
Что есть в JMM?
12
• Sequential consistency
• Happens before
• Causality
finals, word tearing…
Happens before I
13
Monitor.unlock() Monitor.lock()
HB
volatile write volatile read
HB
Thread.start() 1st thread action
HB
last thread action Thread.terminate()
HB
Thread.interrupt() interrupt detected
HB
default write 1st access
HB
constructor finalizer
HB
Happens before II
14
read write
HB
one more write read
HB
write
HB
read writeМожет видеть
+
=
Happens before III
15
N action in thread N+1 action in thread
HB
HB пример
16
Monitor.Lock()
x = 1
Monitor.Unlock() Monitor.Lock()
b = xx = 3
Monitor.Unlock()
Поток 1 Поток 2
HB
x = 2
b = ?
a = x a = ?
HB достаточно?
17
A==B==0
r1=A
if(r1 != 0)

B=1
r2=B
if(r2 != 0)

A=1
Ожидаем (r1, r2) = ?
HB недостаточно
18
A==B==0
r1=A
if(r1 != 0)

B=1
r2=B
if(r2 != 0)

A=1
(r1, r2) = (0, 1)
r1=A
B=1
if(r1 == 0)

B=0
Causality
Memory model @ Dalvik
19
DMM
x86 ARM
x86 vs ARM
20
• readread
• storestore
• readstore
• storeread
• readread
• storestore
• readstore
• storeread
ARM x86
No barriers I
21
A==B==false
A=true

r1=B
if(!r1)
crit()
B=true

r2=A
if(!r2)
crit()
No barriers II
22
A==B==false
A=true

r1=B
if(!r1)
crit()
B=true

r2=A
if(!r2)
crit()
r1=B
A=true
if(!r1)
crit()
x86 vs ARM I
23
A==B==0
A=41

B=1
loop_until(B==1)

r1=A
x86 vs ARM II
24
A==B==0
B=1
A=41
loop_until(B==1)

r1=A
A=41

B=1
ARM
ARM address dependency
25
[A+8]==B==0
[A+8]=1
store/store
B=16
loop:
r0=B
if(r0==0) goto loop
r1 = 8
r2 = [A + r1]
ARM address dependency
26
[A+8]==B==0
[A+8]=1
store/store
B=16
loop:
r0=B
if(r0==0) goto loop
r1 = 8 + r0
r2 = [A + r1]
ARM AD limitation
27
A==B==0
A = 1 loop_until(A==1)
B = 16
loop:
r0=B
if(r0==0) goto loop
r1 = 8 + r0
r2 = [A + r1]
Links
28
• https://www.cs.umd.edu/~pugh/java/memoryModel/jsr133.pdf
JSR 133
• http://shipilev.net/blog/2014/jmm-pragmatics/
Очень крутое объяснение JMM
• http://developer.android.com/intl/ru/training/articles/smp.html
Гайд по MM в Android
• http://gee.cs.oswego.edu/dl/jmm/cookbook.html
JMM для авторов компиляторов
• http://jcip.net/
Отличная книга про JMM
Спасибо за внимание!
me@redmadrobot.com

More Related Content

More from SECON

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?SECON
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON
 

More from SECON (20)

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в production
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практике
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
 

SECON'2016. Ефимов Максим, JMM в Android