Алексей Шипилёв — Близкие Контакты JMM-степени

preview_player
Показать описание
Ближайшая конференция — JPoint 2025, 3–4 апреля (Москва + трансляция).
— —
. . . . Алексей Шипилёв — Близкие Контакты JMM-степени
Java-конференция Joker 2016, Санкт-Петербург, 14-15.10.2016

Со времён «Прагматики Java Memory Model» прошло больше двух лет. Но даже у изучавших прошлый доклад специалистов остались странные предубеждения, не подкреплённые спецификацией. В этом докладе мы попытаемся разобрать и развенчать часть этих предубеждений: про всемогущие барьеры, про реордеринги, про недосинхронизацию и другое недовелосипедостроение.

Доклад основан на уже опубликованной статье, и будет включать себя наиболее вкусные примеры. Доклад не будет останавливаться на базовых принципах модели и поэтому требует понимания JMM как минимум на уровне «Прагматики JMM».

Рекомендации по теме
Комментарии
Автор

Пол года учу Java, но просмотр этого контента ввергло меня в состояние плоского

ОлНес
Автор

Да, мозги чуток поплавились. Но начинаешь всё понимать совсем скоро. Что бы понять полностью, надо пересмотреть, мне кажется))
Плюс, 25 кадр повлияет конкретнее)

Спасибо большое)

elenazelenaya
Автор

госпади. спасибо что я обычный веб-разраб
где нет никакой многопоточки
я смотрю на это с ужасом, просто готовясь к собесу..
лучше бы этого всего не знала вообще

ЕкатеринаКригер-ыв
Автор

Хороший доклад!
Чую что теперь собеседования надо проводить так:
- Знаешь про барьеры памяти?
- Нет
- Принят

Чую что следующий доклад должен быть про гонки, потому что раньше было понятно что это такое, а сейчас какое-то переосмысление понадобится, такое ощущение что эти "красные race" откуда-то из ниоткуда берутся и в общем-то говорят о том, что прочитать можете все что угодно. Потому что если насчет PO, SO, SW, HB ребер еще можно понять, то откуда вспыхивает RACE ребро как-то мало понятно, особенно в контексте формализма модели. Еще интересно, warning на "двойные чтение" есть в IDE? И опять же с PO непонятки, я так понимаю он охватывает actions только внутри одного потока (тогда PO-ов несколько), а inter-thread relations уже задаются через SO (ну и SW, HB как более развитые ребра), просто SO накладываются на PO, только вроде PO из разных потоков, т.е. как бы SO выстраивает некий глобальный (тотальный?) PO всей многопоточной программы (просто термин Program как-то не ясен, то ли речь про поток, то ли про всю многопоточную программу идет речь).

waffleboot
Автор

Судя по всему на слайде с барьерами IRIW опечатка, JMM запрещено выполнение (1, 0, 1, 0)

Goodloot
Автор

Блин, интересно пздц. Только нихрена не понятно )))

omnesio
Автор

Хоть бы объяснил, что за StoreStore, LoadStore, StoreLoad он пишет в квадратных скобках, параллельно коду.
Конечно, софт-навыки при приеме на работу важны. Но это все же лекция. И смысл лекции - предоставить информацию, понятную людям.

Чувак-сб
Автор

30:05 "Приколись! От JMM мозги спеклись!"
Один из любимых докладов.

khvastov.maksym
Автор

35:00 В какой вселенной val!=null, а потом val==null? Из какого места вытащено null?

PaulEfremoff
Автор

Цепочка на 28:46
Когда идет разбор предыдущей цепочки локов мы видим что идет запись в V, после которой идет запись в Supp
Далее мы продолжаем наш случай, котором имеет место ТОЛЬКО ЕСЛИ Supp !E
Исход один, но это законно вообще? Либо я не понял

oxotAzapivom
Автор

Я правильно понимаю, что на слайде (34:47) в строке
if (val != null) {
есть опечатка в булевой операции и нужно:
if (val == null) {
?
Спасибо

andreyzubkov
Автор

довольно запутана JMM на первый взгляд, на второй гораздо лучше :)

razmusdragovich
Автор

Последний пример не ясен.
Почему if (supp == EMPTY) можно, а if (supp == null) нельзя?
Если я правильно понял, то из-за того, что supp может быть null из-за того, что при инициализиции Lazy он не был final. А если supp будет null в первом случае, то тогда будет NPE на supp.get()?

masyaman
Автор

Ух ты ! Лекция по превращению людей в дерьмо !

TheGrubian