14. JAVA. Memory Model | Технострим

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024
  • «Технотрек Mail.ru Group» при МФТИ.
    Курс «Разработка на Java».
    Лекция №14: Memory model.
    Лектор: Дмитрий Архангельский.
    Цель курса - создание рабочего приложения, получение необходимых навыков и опыта в области разработки программного обеспечения. По окончании курса студенты должны знать синтаксис и основные библиотеки языка Java, понимать объектно-ориентированный подход, уметь декомпозировать сложные задачи.
    Получаемые навыки:
    • основные конструкции языка, объекты и классы;
    • ввод и вывод в Java - консольный, файловый, сетевой;
    • интерфейсы и абстрактные классы, анонимные классы;
    • лямбда-функции;
    • сетевое взаимодействие, сокеты;
    • механизм исключений;
    • проверяемые и непроверяемые исключения;
    • потоки - жизненный цикл, прерывание;
    • критическая секция;
    • проблемы взаимодействия (дедлок);
    • механизм wait/notify, блокирующие очереди producer/consumer;
    • коллекции, выбор структуры данных, подходящей для задачи;
    • параметризованные коллекции;
    • параметризация в Java.
    Смотрите также:
    •Другие лекции этого курса: bit.ly/1QUmj1W
    •Курс «Основы мобильной разработки»: bit.ly/1LYYV6w
    • Курс «Основы веб-разработки»: bit.ly/1RWWKQb
    VK Team - это миллион возможностей проявить себя. Мы делаем современные и быстрые интернет-сервисы, доступные каждому. На этом канале делимся опытом компании VK, рассказываем о технологиях, наших образовательных проектах и жизни команды.
    😎 Сообщество ВКонтакте: vkteam
    👨‍🎓 VK Образование: education.vk.c...
    🏆 Чемпионаты: cups.online/
    👨‍💻 Карьера в VK: team.vk.company/

Комментарии • 30

  • @OlegPetrow-dp1vp
    @OlegPetrow-dp1vp Год назад +5

    Крутая лекция, спасибо!

  • @nikolairomanov6054
    @nikolairomanov6054 8 лет назад +31

    Разве возможен реордеринг в ситуации
    r2 = B
    B = 1
    ? (5:45)
    если бы в одном потоке выполнялся код
    A=1
    B=1
    r1 = A
    r2 = B
    То да - мы не могли бы сказать наверняка что произойдёт раньше - запись в r1 или в r2 и тогда поток
    Thread2 { if(r2==1) assert r1 == 1 } мог бы упасть.
    но первый случай даже с учетом абстракции выглядит странно

    • @asdfhajdkflhasdfjlhadfqer
      @asdfhajdkflhasdfjlhadfqer 8 лет назад +15

      Reordering в данном случае действительно выглядит странно. Можно предположить, что должно было быть
      t1 -> [r1 = A; B = 1]
      t2 -> [r2 = B; A = 1]

    • @user-uh8nb2vj4f
      @user-uh8nb2vj4f 6 лет назад +6

      Конечно не возможен, эти операции всегда будут в том порядке, в котором они идут. Вот если было бы:
      r2 = A
      B = 1
      тогда реордеринг мог бы быть

    • @kenshin45736
      @kenshin45736 6 лет назад +5

      Так вы дальше смотрели? Я дико проорал, когда он опроверг реордеринг в первом примере, объясняя hb на 13 минуте.

    • @ololyona
      @ololyona 5 лет назад +2

      @@kenshin45736 опечатался в примере наверное

  • @Flaer1985
    @Flaer1985 8 лет назад +12

    как-то коротко получилось. как-будто не хватает части ₽лекции

  • @NikolayMishin
    @NikolayMishin 7 лет назад +2

    Спасибо, одна из самых понятных лекций про java memory model!

  • @CyanideBtm
    @CyanideBtm 6 лет назад +5

    закон мура о процессорах и количестве транзисторов, а не о скорости доступа к памяти. The Free Lunch Is Over - о том, что закон мура перестаёт работать и основной буст будет за счёт параллелизма. там нет ни слова о памяти и скорости доступа к ней. такое ощущение, что автор не достаточно хорошо ознакомился с предметной областью.

  • @VDlasov
    @VDlasov 8 лет назад +17

    В примере Singleton нужно добавить ключевое слово "volatile" к переменной?
    "volatile static KeeperSingle instance;"

    • @asdfhajdkflhasdfjlhadfqer
      @asdfhajdkflhasdfjlhadfqer 8 лет назад

      И зачем ? Мне сложно придумать аргумент за добавление volatile.

    • @VDlasov
      @VDlasov 8 лет назад

      PreVet *При использовании многопоточности: я читал, что может не обновиться значение переменной. И слово volatile гарантирует порядок. Поэтому спросил.

    • @asdfhajdkflhasdfjlhadfqer
      @asdfhajdkflhasdfjlhadfqer 8 лет назад

      Синглетон подразумевает, что ссылка на экземпляр класса будет создана при первом запросе на получение синглетона и в дальнейшем не будет модифицироваться. Если кто-то решит ее закешировать, то никакие изменения не должны пройти мимо, т.к. грубо говоря, адрес объекта-синглетона не изменится, закешированные данные останутся в актуальном состоянии.
      По поводу порядка сложно что-то сказать из-за отсутствия конкретного примера использования. В любом случае, запрет на оптимизацию перестановок коснется не только Ваших критических участков.

    • @arturdumchev3055
      @arturdumchev3055 7 лет назад +5

      Да, нужно либо "volatile", либо "final" добавить, тут подробнее
      habrahabr.ru/post/129494/

    • @poroshok-ukhodi
      @poroshok-ukhodi 6 лет назад +1

      Нам всё равно нужна синхронизация в методе getInstance() потому что иначе экземпляр может два раза создастся. Насколько я понимаю, если есть синхронизация, то в этом случае volatile уже не нужен, так как синхронизация обеспечивает happens before. Я могу ошибаться

  • @hopaandroid3427
    @hopaandroid3427 8 лет назад +1

    Круто !

  • @haykmkrtchyan7093
    @haykmkrtchyan7093 4 года назад +3

    Так и не объяснили до конца Double check)
    Если кому-то интересно, в последном примере где закончился видео, это назывется Double check - вот видео о нем - ruclips.net/video/5eTQKyK-rGs/видео.html

    • @kornext
      @kornext 4 года назад

      Спасибо! Пригодилось.

  • @random_nick_for_comments
    @random_nick_for_comments 8 лет назад +9

    какая-то глупость в примере с реордерингом и никто не задал на лекции вопрос. Ну и синглтон в конце лекции не пашет. Как было упомянуто раньше нужен волатайл. Но всё равно было интересно, спасибо

    • @sergeykurk
      @sergeykurk 7 лет назад +1

      тоже не понял, сначала говорится, что реордеринг в одном потоке не возможен, если 1 переменная участвует, потом оказывается возможен

  • @avpmk
    @avpmk Год назад

    17:00 Как-раз можно операции после volatile write печат печат пегмати переставить выше. Наоборот, да, нельзя.

    • @avpmk
      @avpmk Год назад

      А ну он дальше об этом сказал 20:56

  • @user-hj1zu8mu8m
    @user-hj1zu8mu8m 5 лет назад +2

    куча опечаток ошибок в подсчетах

  • @user-bd1df4vw2s
    @user-bd1df4vw2s Год назад +2

    Ужасная противоречивая лекция в примере с реордерингом. Жирный минус.

  • @user-sr9kt4tp8n
    @user-sr9kt4tp8n Год назад +2

    Скомкано, что-то пропустил и не стал объяснять, лекция не очень.

  • @constantsvariables866
    @constantsvariables866 4 года назад +8

    Бред в лекции сам себе противоречит. Сначала говорит что все операции до и после volatile-записи не могу перемещаться вверх и вниз соответственно (рисуя на доске), потом говорит что у него A=43 (на слайдах) может улететь куда угодно . Спасибо что ломаете мозг, из-за вас любое желание учиться пропадает.Хорошо хоть по зеленым квадратикам на слайдах (которые не ваши и к изменению которых ваши руки не дотянулись) понятно что куда может улететь.

    • @ivanzhukov4767
      @ivanzhukov4767 4 года назад +3

      ruclips.net/video/iB2N8aqwtxc/видео.html Вот оригинал, где можно увидеть как должно быть. В итоге там должно было быть сказано не про reordering, а то, что в рамках гонки потоков, второй поток может увидеть новое значение 43 или старое 42

  • @duckdeduct522
    @duckdeduct522 11 месяцев назад +1

    Вы чего, про какие то высшие материи с синглтоном и реордингом?!
    Тут каменный век..математики....аналитики
    3:00
    L2 медленнее L1 в 14 раз (7 / 0.5) - здесь слегка приуменьшил
    L3 медленнее L1 в 200 раз (100/ 0.5) - зато здесь до овер увеличил.
    Доверяйте свои денюжки таким счетоводам,.
    Тетка в задрыпанном сельпо магазе на счетах сознательно и то меньше вас обЪегорит, чем такие бессознательные, бескорыстные, но тупые.