Не паникуйте при встрече | Здравствуйте, расскажите о своем понимании Synchronized? (два)

Java опрос
Не паникуйте при встрече | Здравствуйте, расскажите о своем понимании Synchronized? (два)

Сразу после предыдущегоЗдравствуйте, расскажите о своем понимании Synchronized? (один), эта статья, чтобы поговорить о реализацииsynchronizedгде ключевой замок.

3. Блокировка схемы хранения

synchronizedВсегда связан с объектом. Если метод статический, ассоциированным объектом является класс; если метод нестатический, ассоциированным объектом является экземпляр. Если это кодовый блок, то указанный объект. Очевидно, блокировка записывается в объект. Итак, возникает вопрос,synchronizedК чему относится замок? В простом понимании замок — это общий ресурс, который записывает, кто им владеет, каково его текущее состояние и так далее. Давайте сначала проанализируем, как объекты хранятся в памяти.

существуетHotspot JVMсередина,Java ObjectСхема хранения объектов в памяти разделена на три области, а именно: заголовок объекта, демонстрационные данные и заполнение объекта. Как показано на рисунке, схема хранения массивов и объектов очень похожа, за исключением того, что заголовок объекта больше, чем длина массива, потому что массив должен хранить свою собственную длину, которая составляет 4 байта.

Java Object.png

Как видно из рисунка, заголовок объекта включает в себя две части, а именно тег объекта и метаинформацию класса (указатель типа). тег объекта, т.е.Markwordобъект храненияhashCode, GCИнформация и замки. Метаинформация класса хранит «указатели на информацию об объекте класса». в 32 битJVM , заголовок объекта занимает 8 байт, а 64-битныйJVM Занимает 16 байт.

markword.png

Как показано выше, этоMarkwordкласс в 32-битнойJVM план хранения для различных ситуаций,MarkwordХранящиеся в нем данные будут изменяться при изменении бита флага блокировки, и примерно сохраненные изменения делятся на пять ситуаций. На рисунке мы можем увидеть процесс перехода от блокировки без блокировки -> смещенная блокировка -> облегченная блокировка -> хранилище тяжеловесных блокировок, что представляет собой процесс укрупнения блокировок.

Итак, вопрос в том, могут ли все объекты реализовывать блокировки? Ответ положительный.

  • Сначала у нас есть дляJavaСуществует общее понимание того, что все объекты являются производными отObject, каждый объект хранится в памяти, как показано на нашем рисунке, есть заголовок объекта, а заголовок объекта имеетMarkwordТег объекта. Важно отметить, что хранилище объектов включает в себяMarkwordРеализация маркировки объектовnativeДа, обаC++Объекты, реализованные языком.
  • Когда поток получает блокировку, он фактически получает объект монитора, который является объектом синхронизации.Java Objectсодержит этот объект. Аналогично, этот объект такжеnativeиз.

Длина длинная, чтобы продолжить чтение, пожалуйста, нажмитеЗдравствуйте, расскажите о своем понимании Synchronized? (три)


Брат, не паникуй! Не стесняйтесь оставлять лайки, обсуждать и комментировать. Добро пожаловать в колонку интервьюНе паникуйте, когда сталкиваетесь | Параллельное программирование на Java, Не беспокойтесь о повышении зарплаты во время собеседования. Также добро пожаловать, чтобы следовать за мной, я должен быть лучшим человеком.