美文网首页
java并发前序

java并发前序

作者: 天草二十六_简村人 | 来源:发表于2018-05-13 14:44 被阅读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

    相关文章

      网友评论

          本文标题:java并发前序

          本文链接:https://www.haomeiwen.com/subject/tqdldftx.html