Сразу после предыдущегоЗдравствуйте, расскажите о своем понимании Synchronized? (один), эта статья, чтобы поговорить о реализации
synchronized
где ключевой замок.
3. Блокировка схемы хранения
synchronized
Всегда связан с объектом. Если метод статический, ассоциированным объектом является класс; если метод нестатический, ассоциированным объектом является экземпляр. Если это кодовый блок, то указанный объект. Очевидно, блокировка записывается в объект. Итак, возникает вопрос,synchronized
К чему относится замок? В простом понимании замок — это общий ресурс, который записывает, кто им владеет, каково его текущее состояние и так далее. Давайте сначала проанализируем, как объекты хранятся в памяти.
существуетHotspot JVM
середина,Java Object
Схема хранения объектов в памяти разделена на три области, а именно: заголовок объекта, демонстрационные данные и заполнение объекта. Как показано на рисунке, схема хранения массивов и объектов очень похожа, за исключением того, что заголовок объекта больше, чем длина массива, потому что массив должен хранить свою собственную длину, которая составляет 4 байта.
Как видно из рисунка, заголовок объекта включает в себя две части, а именно тег объекта и метаинформацию класса (указатель типа). тег объекта, т.е.Markword
объект храненияhashCode
, GC
Информация и замки. Метаинформация класса хранит «указатели на информацию об объекте класса». в 32 битJVM
, заголовок объекта занимает 8 байт, а 64-битныйJVM
Занимает 16 байт.
Как показано выше, этоMarkword
класс в 32-битнойJVM
план хранения для различных ситуаций,Markword
Хранящиеся в нем данные будут изменяться при изменении бита флага блокировки, и примерно сохраненные изменения делятся на пять ситуаций. На рисунке мы можем увидеть процесс перехода от блокировки без блокировки -> смещенная блокировка -> облегченная блокировка -> хранилище тяжеловесных блокировок, что представляет собой процесс укрупнения блокировок.
Итак, вопрос в том, могут ли все объекты реализовывать блокировки? Ответ положительный.
- Сначала у нас есть для
Java
Существует общее понимание того, что все объекты являются производными отObject
, каждый объект хранится в памяти, как показано на нашем рисунке, есть заголовок объекта, а заголовок объекта имеетMarkword
Тег объекта. Важно отметить, что хранилище объектов включает в себяMarkword
Реализация маркировки объектовnative
Да, обаC++
Объекты, реализованные языком. - Когда поток получает блокировку, он фактически получает объект монитора, который является объектом синхронизации.
Java Object
содержит этот объект. Аналогично, этот объект такжеnative
из.
Длина длинная, чтобы продолжить чтение, пожалуйста, нажмитеЗдравствуйте, расскажите о своем понимании Synchronized? (три)
Брат, не паникуй! Не стесняйтесь оставлять лайки, обсуждать и комментировать. Добро пожаловать в колонку интервьюНе паникуйте, когда сталкиваетесь | Параллельное программирование на Java, Не беспокойтесь о повышении зарплаты во время собеседования. Также добро пожаловать, чтобы следовать за мной, я должен быть лучшим человеком.