SlideShare a Scribd company logo
1 of 48
Download to read offline
JMM in Android
Максим Ефимов
Android team leader, Google developer expert
0
О чем будем говорить?
• Зачем понадобилась JMM
• Happens-before
• Causality
• Dalvik MM vs JMM
• Dalvik bytecode vs JVM bytecode
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
• Один поток читает данные
• Второй поток пишет данные
• Эти два действия не синхронизированы
Итоги & QA - I
10
• Reordering оптимизирует код в одном потоке
• Reordering ломает семантику многопоточного кода
• Нужен порядок между действиями в разных потоках
• Без синхронизации ломается семантика
Вопросы?
Базовые принципы
Java memory model
11
«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 философия
12
Порядок выполнения может быть любой, кроме
запрещенных порядков
Что есть в JMM?
13
• Sequential consistency
• Happens before
• Causality
finals, word tearing…
Sequential consistency
14
Action 1.1
Action 1.2
Action 2.1
Action 2.2
Action 2.3Action 1.2
Action 1.1
Action 1.2
Action 2.1
Action 2.2
Action 2.3Action 1.2
Вариант №1
Вариант №2
Happens before I
15
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
16
read write
HB
one more write read
HB
write
HB
read writeМожет видеть
+
=
Happens before III
17
N action in thread N+1 action in thread
HB
HB пример
18
Monitor.Lock()
x = 1
Monitor.Unlock() Monitor.Lock()
b = xx = 3
Monitor.Unlock()
Поток 1 Поток 2
HB
x = 2
b = ?
a = x a = ?
HB достаточно?
19
A==B==0
r1=A
if(r1 != 0)

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

A=1
Ожидаем (r1, r2) = ?
HB недостаточно
20
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
21
• Все действия группируются на коммиты
• Коммиты выстраиваются в строгий порядок
• Действие не может попасть в коммит, если это станет
причиной состояния гонки
Causality - пример
22
A==B==0
r1=A
B=1
r2=B

A=r2
A==B==0
B = 1
r2 = B
A = r2
r1 = A
A==B==0
r2 = B
A = r2
r1 = A
B = 1
Итоги & QA - II
23
JMM
• Разрешено все, что не запрещено
• Happens before
• Causality
Вопросы?
JMM for DVM?
24
JMM ≠ DMM
JVM vs DVM
25
Stack Register
Картинки из статьи https://markfaction.wordpress.com/2012/07/15/stack-based-vs-register-based-virtual-machine-architecture-and-the-dalvik-vm/
Memory model @ Dalvik
26
DMM
x86 ARM
Memory barriers
27
• readread
• storestore
• readstore
• storeread
Гарантия порядка
x86 vs ARM
28
• readread
• storestore
• readstore
• storeread
• readread
• storestore
• readstore
• storeread
ARM x86
No barriers I
29
A==B==false
A=true

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

r2=A
if(!r2)
crit()
No barriers II
30
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
31
A==B==0
A=41

B=1
loop_until(B==1)

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

r1=A
A=41

B=1
ARM
ARM address dependency
33
[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
34
[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
35
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]
Итоги & QA - III
36
DVM Memory model
• Есть большая зависимость от платформы
• Есть адресная зависимость
Вопросы?
Synchronized example
37
public int fooNoSync(int a) {

int b;

b = a + 10;

return b;

}
Bytecode
38
public foo(I)I
L0
LINENUMBER 34 L0
ILOAD 1
BIPUSH 10
IADD
ISTORE 2
L1
LINENUMBER 35 L1
ILOAD 2
IRETURN
L2
LOCALVARIABLE this
Lgenerator/android/TestJava;
L0 L2 0
LOCALVARIABLE a I L0 L2 1
LOCALVARIABLE b I L1 L2 2
MAXSTACK = 2
MAXLOCALS = 3
.method public foo(I)I
.registers 3
.param p1, "a" # I
.prologue
.line 27
add-int/lit8 v0, p1, 0xa
.line 29
.local v0, "b":I
return v0
.end method
JVM DVM
int a
int b
return b
b = a + 10
int a
int b
return b
b = a + 10
Synchronized
39
public synchronized int foo(int a) {

int b;

b = a + 10;

return b;

}
public int foo(int a) {

synchronized (this) {

int b;

b = a + 10;

return b;
}

}
Bytecode synchronized method
40
public synchronized foo(I)I
L0
LINENUMBER 34 L0
ILOAD 1
BIPUSH 10
IADD
ISTORE 2
L1
LINENUMBER 35 L1
ILOAD 2
IRETURN
L2
LOCALVARIABLE this Lgenerator/
android/TestJava; L0 L2 0
LOCALVARIABLE a I L0 L2 1
LOCALVARIABLE b I L1 L2 2
MAXSTACK = 2
MAXLOCALS = 3
.method public declared-synchronized
foo(I)I

.registers 3

.param p1, "a" # I



.prologue

.line 21

monitor-enter p0



add-int/lit8 v0, p1, 0xa



.line 22

.local v0, "b":I

monitor-exit p0



return v0

.end method
JVM DVM
b = a + 10
Synchronized block
41
public foo(I)I
TRYCATCHBLOCK L0 L1 L2 null
TRYCATCHBLOCK L2 L3 L2 null
L4
LINENUMBER 10 L4
ALOAD 0
DUP
ASTORE 2
MONITORENTER
L0
//business logic
L5
LINENUMBER 13 L5
ILOAD 3
ALOAD 2
MONITOREXIT
L1
IRETURN
L2
LINENUMBER 14 L2
FRAME FULL [generator/android/TestJava I java/lang/
Object] [java/lang/Throwable]
ASTORE 4
ALOAD 2
MONITOREXIT
L3
ALOAD 4
ATHROW
L6
LOCALVARIABLE b I L5 L2 3
LOCALVARIABLE this Lgenerator/android/TestJava; L4 L6
0
LOCALVARIABLE a I L4 L6 1
MAXSTACK = 2
MAXLOCALS = 5
.method public foo(I)I

//initialization

monitor-enter p0



//business logic
:try_start_3

monitor-exit p0



return v0



.line 16

:catchall_5

move-exception v1



monitor-exit p0

:try_end_7

.catchall
{:try_start_3 .. :try_end_7} :catchall_5



throw v1

.end method
JVM DVM
Synchronized block – проще говоря
42
Monitor.enter()
Throwable stored = null
try{
businessLogic()
} catch(Throwable e){
stored = e
}
Monitor.exit()
if(stored != null)
throw stored
return
JVM DVM
DVM synchronized method div
43
.method public final declared-synchronized fooDangerous(I)I

.registers 4

.param p1, "a" # I



.prologue

.line 27

monitor-enter p0



:try_start_1

div-int/lit8 v0, p1, 0xa

:try_end_3

.catchall {:try_start_1 .. :try_end_3} :catchall_5



.line 28

.local v0, "b":I

monitor-exit p0



return v0



.line 27

.end local v0 # "b":I

:catchall_5

move-exception v1



monitor-exit p0



throw v1

.end method
.method public declared-synchronized
foo(I)I

.registers 3

.param p1, "a" # I



.prologue

.line 21

monitor-enter p0



add-int/lit8 v0, p1, 0xa



.line 22

.local v0, "b":I

monitor-exit p0



return v0

.end method
b = a / 10b = a + 10
DMV synchronized method try-catch
44
• Вызов метода
• Создание объекта
• Деление целых чисел
• Бросок исключения
• Каст
• Изменение поля класса
• Загрузка класса
Итоги & QA - IV
45
• Байткод dalvik отличается от JVM
• Не все флаги методов работают так же
• Есть оптимизация в зависимости от опкодов
DVM bytecode
Links
46
• 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

What's hot

64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считатьTatyanazaxarova
 
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...corehard_by
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типовcorehard_by
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsIosif Itkin
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++Andrey Karpov
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковMskDotNet Community
 
Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTP_ymn
 
Erlang: прагматичный рассказ про прагматичный язык
Erlang: прагматичный рассказ про прагматичный язык Erlang: прагматичный рассказ про прагматичный язык
Erlang: прагматичный рассказ про прагматичный язык Vasil Remeniuk
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3it-people
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
 

What's hot (16)

64-битный конь, который умеет считать
64-битный конь, который умеет считать64-битный конь, который умеет считать
64-битный конь, который умеет считать
 
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...
Жилье комфорт-класса для акторов и хендлеров. Максим Хижинский. CoreHard Spri...
 
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
 
хитрости выведения типов
хитрости выведения типовхитрости выведения типов
хитрости выведения типов
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
TMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov DevexpertsTMPA-2013 Tsytelov Trifanov Devexperts
TMPA-2013 Tsytelov Trifanov Devexperts
 
Эффективный C++
Эффективный C++Эффективный C++
Эффективный C++
 
Step cpp022
Step cpp022Step cpp022
Step cpp022
 
Step cpp0201
Step cpp0201Step cpp0201
Step cpp0201
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
 
Краткое введение в Erlang/OTP
Краткое введение в Erlang/OTPКраткое введение в Erlang/OTP
Краткое введение в Erlang/OTP
 
Erlang: прагматичный рассказ про прагматичный язык
Erlang: прагматичный рассказ про прагматичный язык Erlang: прагматичный рассказ про прагматичный язык
Erlang: прагматичный рассказ про прагматичный язык
 
ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Евгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализацияЕвгений Зуев, С++ в России: Стандарт языка и его реализация
Евгений Зуев, С++ в России: Стандарт языка и его реализация
 

Viewers also liked

«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...Mail.ru Group
 
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, RedmadrobotMail.ru Group
 
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYYMail.ru Group
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяYuri Shmakov
 
Moxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоватьсяMoxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоватьсяYuri Shmakov
 
Le service relais by easy relay
Le service relais by easy relayLe service relais by easy relay
Le service relais by easy relayEasyRelay
 
2016 06-11 Данил Перевалов. Создание простых анимаций на андроид
2016 06-11 Данил Перевалов. Создание простых анимаций на андроид2016 06-11 Данил Перевалов. Создание простых анимаций на андроид
2016 06-11 Данил Перевалов. Создание простых анимаций на андроидОмские ИТ-субботники
 
Taller siagie 2016
Taller siagie  2016Taller siagie  2016
Taller siagie 2016BEA LOPEZ
 
170301 dena dialogue forum fb
170301 dena dialogue forum fb170301 dena dialogue forum fb
170301 dena dialogue forum fbFrank Bolten
 
SÍNTOMAS DE LA TUBERCULOSIS
SÍNTOMAS DE LA TUBERCULOSISSÍNTOMAS DE LA TUBERCULOSIS
SÍNTOMAS DE LA TUBERCULOSISGINA CABRERA
 
S.s. midterm capstone cover sheet spring 2017
S.s. midterm capstone cover sheet spring 2017S.s. midterm capstone cover sheet spring 2017
S.s. midterm capstone cover sheet spring 2017Timothy Welsh
 

Viewers also liked (17)

«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
 
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
«Взломать за 60 секунд», Артем Кулаков, Redmadrobot
 
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
«Как я научился не волноваться и полюбил Android-MVP», Никита Бартишок, ABBYY
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
Moxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоватьсяMoxy. Из чего состоит и как этим пользоваться
Moxy. Из чего состоит и как этим пользоваться
 
Presentation3
Presentation3Presentation3
Presentation3
 
Le service relais by easy relay
Le service relais by easy relayLe service relais by easy relay
Le service relais by easy relay
 
Information overload
Information overloadInformation overload
Information overload
 
Ozymandias
OzymandiasOzymandias
Ozymandias
 
2016 06-11 Данил Перевалов. Создание простых анимаций на андроид
2016 06-11 Данил Перевалов. Создание простых анимаций на андроид2016 06-11 Данил Перевалов. Создание простых анимаций на андроид
2016 06-11 Данил Перевалов. Создание простых анимаций на андроид
 
Taller siagie 2016
Taller siagie  2016Taller siagie  2016
Taller siagie 2016
 
170301 dena dialogue forum fb
170301 dena dialogue forum fb170301 dena dialogue forum fb
170301 dena dialogue forum fb
 
Presentation
PresentationPresentation
Presentation
 
SÍNTOMAS DE LA TUBERCULOSIS
SÍNTOMAS DE LA TUBERCULOSISSÍNTOMAS DE LA TUBERCULOSIS
SÍNTOMAS DE LA TUBERCULOSIS
 
S.s. midterm capstone cover sheet spring 2017
S.s. midterm capstone cover sheet spring 2017S.s. midterm capstone cover sheet spring 2017
S.s. midterm capstone cover sheet spring 2017
 
Qué hace que una investigación sea ética
Qué hace que una investigación sea éticaQué hace que una investigación sea ética
Qué hace que una investigación sea ética
 
Cómo elaborar una hoja de información para recabar el consentimiento informado
Cómo elaborar una hoja de información para recabar el consentimiento informadoCómo elaborar una hoja de información para recabar el consentimiento informado
Cómo elaborar una hoja de información para recabar el consentimiento informado
 

Similar to «JMM в Android», Максим Ефимов, Redmadrobot

Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийAndrey Akinshin
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Mikhail Kurnosov
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠  CoreHa...Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠  CoreHa...
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...corehard_by
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20DefconRussia
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...corehard_by
 
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторыОмские ИТ-субботники
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кодаAndrey Karpov
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода Pavel Tsukanov
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
 
1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)Smolensk Computer Science Club
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметикуAndrey Akinshin
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кодаTatyanazaxarova
 

Similar to «JMM в Android», Максим Ефимов, Redmadrobot (20)

Поговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложенийПоговорим о микрооптимизациях .NET-приложений
Поговорим о микрооптимизациях .NET-приложений
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
Лекция 2: Оптимизация ветвлений и циклов (Branch prediction and loops optimiz...
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠  CoreHa...Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠  CoreHa...
Исключения C++ через призму компиляторных оптимизаций. Роман Русяев ➠ CoreHa...
 
static - defcon russia 20
static  - defcon russia 20static  - defcon russia 20
static - defcon russia 20
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...
 
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
2016-12-03 02 Алексей Городецкий. Как пишут компиляторы
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMДмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVM
 
1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)1 встреча — Параллельное программирование (А. Свириденков)
1 встреча — Параллельное программирование (А. Свириденков)
 
Продолжаем говорить про арифметику
Продолжаем говорить про арифметикуПродолжаем говорить про арифметику
Продолжаем говорить про арифметику
 
Статический анализ Си++ кода
Статический анализ Си++ кодаСтатический анализ Си++ кода
Статический анализ Си++ кода
 

More from Mail.ru Group

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Mail.ru Group
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...Mail.ru Group
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинMail.ru Group
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Mail.ru Group
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовMail.ru Group
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваMail.ru Group
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...Mail.ru Group
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...Mail.ru Group
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidiaMail.ru Group
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоMail.ru Group
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковMail.ru Group
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковMail.ru Group
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Mail.ru Group
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиMail.ru Group
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Mail.ru Group
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Mail.ru Group
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Mail.ru Group
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Mail.ru Group
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Mail.ru Group
 

More from Mail.ru Group (20)

Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
Автоматизация без тест-инженеров по автоматизации, Мария Терехина и Владислав...
 
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
BDD для фронтенда. Автоматизация тестирования с Cucumber, Cypress и Jenkins, ...
 
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир ДубровинДругая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
Другая сторона баг-баунти-программ: как это выглядит изнутри, Владимир Дубровин
 
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
Использование Fiddler и Charles при тестировании фронтенда проекта pulse.mail...
 
Управление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон ВикторовУправление инцидентами в Почте Mail.ru, Антон Викторов
Управление инцидентами в Почте Mail.ru, Антон Викторов
 
DAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга СвиридоваDAST в CI/CD, Ольга Свиридова
DAST в CI/CD, Ольга Свиридова
 
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...Почему вам стоит использовать свой велосипед и почему не стоит  Александр Бел...
Почему вам стоит использовать свой велосипед и почему не стоит Александр Бел...
 
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...CV в пайплайне распознавания ценников товаров: трюки и хитрости  Николай Масл...
CV в пайплайне распознавания ценников товаров: трюки и хитрости Николай Масл...
 
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidiaRAPIDS: ускоряем Pandas и scikit-learn на GPU  Павел Клеменков, NVidia
RAPIDS: ускоряем Pandas и scikit-learn на GPU Павел Клеменков, NVidia
 
WebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий ОстапенкоWebAuthn в реальной жизни, Анатолий Остапенко
WebAuthn в реальной жизни, Анатолий Остапенко
 
AMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей ПешковAMP для электронной почты, Сергей Пешков
AMP для электронной почты, Сергей Пешков
 
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила СтрелковКак мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
Как мы захотели TWA и сделали его без мобильных разработчиков, Данила Стрелков
 
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
Кейсы использования PWA для партнерских предложений в Delivery Club, Никита Б...
 
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.ТаксиМетапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
Метапрограммирование: строим конечный автомат, Сергей Федоров, Яндекс.Такси
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)Этика искусственного интеллекта, Александр Кармаев (AI Journey)
Этика искусственного интеллекта, Александр Кармаев (AI Journey)
 
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
Нейро-машинный перевод в вопросно-ответных системах, Федор Федоренко (AI Jour...
 
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
Конвергенция технологий как тренд развития искусственного интеллекта, Владими...
 
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
Обзор трендов рекомендательных систем от Пульса, Андрей Мурашев (AI Journey)
 
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
Мир глазами нейросетей, Данила Байгушев, Александр Сноркин ()
 

«JMM в Android», Максим Ефимов, Redmadrobot