网站流量到底怎样赚钱的,自己做的网站如何在网络上展示,网站需要网监备案,微信小程序开发者工具怎么使用前置知识#xff1a;
在HotSpot虚拟机中#xff0c;对象在内存中存储可分为三块区域#xff1a;
对象头#xff1a;有MarkWord和Klass Word组成实例数据#xff1a;里面主要是成员变量对齐填充#xff1a;不是8的整数倍#xff0c;则填充
CAS: Compare and Swap是Jav…前置知识
在HotSpot虚拟机中对象在内存中存储可分为三块区域
对象头有MarkWord和Klass Word组成实例数据里面主要是成员变量对齐填充不是8的整数倍则填充
CAS: Compare and Swap是Java中的一种重要的并发控制机制属于乐观锁范畴自旋锁重试机制就算别的线程修改了可以重新来一遍。CAS操作包含三个操作数内存位置V、预期原值A和新值B。其基本原理是先读取内存中的值然后比较该值是否等于期望值如果相等则将内存中的值更新为新值否则不做任何操作。这个比较和更新的操作是原子性的因此可以在多线程环境下保证数据的一致性和完整性。底层一般为native类型由C或C实现。
正文如下 java中sychronized关键字悲观锁有3种锁类型
轻量级锁对应不同线程交替执行持有锁线程加锁的时间段不同也就是说没有竞争轻量级锁修改了对象头的锁标志相对重量级锁性能提升了很多每次都是CAS操作保证了原子性。每个线程的栈帧都会包含一个Lock Record的结构内部可以存储锁定对象的Mark Word让Lock Record中的Object reference指向锁对象并尝试用CAS操作来将该对象的Mark Word更新为指向Lock Record的指针。这样当对象被轻量级锁定时其Mark Word实际上指向的是Lock Record。简而言之Lock Record是Java轻量级锁机制中的一个组成部分用于在锁定对象时记录相关信息从而实现线程安全的并发控制。偏向锁对应一段很长时间内只被一个线程使用锁在第一次获取锁时会有一个CAS操作之后线程再获取锁只需判断mark word是否是自己的线程id即可而不是执行开销较大的CAS命令。重量级锁适用于多个线程竞争比较激烈的情况底层用Monitor实现里面涉及到用户态和内核态的切换进程的上下文切换实现成本较高性能比较低。
需要注意的是这些锁状态并不是直接暴露给Java程序员的而是JVM内部根据线程竞争情况和优化策略自动调整的。一般Java程序员通常只需关注synchronized关键字的使用。