java并发前序

2018-05-13  本文已影响0人  天草二十六_简村人

需要了解的基础知识:

  1. 对象在堆内存中的存储区域包括哪几部分, 对象头是什么?
    2.锁的四种状态.
    3.HotSpot通过markOop类型实现Mark Word.

一. HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐填充。对象头又分为mark word标记字段和klass pointer类型指针.


对象的存储布局.png

Monitor 可以理解是一个同步工具或一种同步机制,通常被描述为一个对象。每一个java对象就有一把看不见的锁,称为内部锁或Monitor锁。
依赖于底层的操作系统的Mutex Lock 互斥锁来实现的线程同步。
Monitor是线程私有的数据结构。
每一个线程都有一个可用monitor record列表,同时还有一个全局的可用列表。
每一个被锁住的对象都会和一个monitor关联,同时monitor中有一个Owner字段存放拥有该锁的线程的唯一标识,表示该锁被这个线程占用。

二.锁的状态总共有四种:无锁状态、偏向锁、轻量级锁和重量级锁。
无锁:CAS
偏向锁:在大多数情况下,锁总是由同一个线程多次获得,不存在多线程竞争。在对象头mark
word里存储偏向的线程ID。偏向锁只有在遇到其他线程尝试竞争偏向锁的时候,持有锁
的线程才会释放锁。 偏向锁的撤销,需要等待全局安全点。
轻量级锁:其他线程会通过自旋的形式尝试获取,不会阻塞,从而提高性能。
重量级锁:其他线程被阻塞。

三、对象的内存分配流程:


对象分配流程.png
上一篇下一篇

猜你喜欢

热点阅读