java對象模型 指令_JVM-Java內存模型-20200217(示例代碼)

 2023-10-20 阅读 19 评论 0

摘要:1:JMM其實是java虛擬機棧的一部分2:主內存和工作內存:都屬于Java虛擬機內存主內存:主要對應于JVM內存區域中的堆內存中的對象實例數據部分工作內存:主要對應于JVM內存區域中的虛擬機棧中的部分區域主內存與工作內存的數據交換操作的過程(通

1:JMM其實是java虛擬機棧的一部分

2:主內存和工作內存:都屬于Java虛擬機內存

20200321163532204354.png

主內存:主要對應于JVM內存區域中的堆內存中的對象實例數據部分

工作內存:主要對應于JVM內存區域中的虛擬機棧中的部分區域

主內存與工作內存的數據交換操作的過程(通過總線bus通信,涉及總線嗅探機制及緩存一致性知識、MESI通信協議):

涉及八個原子操作:lock(鎖定), unlock(解鎖), read(讀取), load(加載), use(使用), assign(賦值), store(存儲), write(寫入)

3:volatile 修飾的變量的特殊性

volatile 是虛擬機提供的最輕量級的同步機制;

被volatile修飾的變量將具備以下兩種特性:

1)可見性:一個變量修改了這個變量的值時,所有共享此變量的線程都會立即知道

2)禁止指令重排序優化(機器級別語言-匯編):內存屏障概念

注:final修飾的字段在構造器種初始化成功后,對其他線程也可見

4:java 內存模型的特征:

1)原子性:某些操作是原子的

2)可見性:一個變量修改了這個變量的值時,所有共享此變量的線程都會立即知道

3)有序性:先行發生原則提供部分保障--操作A在B之前發生,則A產生的影響能被B觀察到,影響包括修改了內存中共享變量的值、發送消息、調用方法等

Java內存模型提供了8種默認的先行發生關系:

1:程序次序規則? 2:管程鎖定規則? 3:volatile變量規則? 4:線程啟動規則? 5:線程終止規則? 6:線程終端規則? 7:對象終結規則 8:傳遞性

5:java線程安全實現方法:

1)互斥同步:互斥是方法,同步是目的--例如synchronized 和JUC并發包下的ReentrantLock?[ri?‘entr?nt]?(重入鎖)

ReentrantLock:等待可中斷、可實現公平鎖、以及鎖可以綁定多個條件,JDK1.6以后他們的性能基本一樣,更傾向于用synchronized實現。

2)非阻塞同步:樂觀的并發策略--CAS操作(JDK1.5之后的包sun.misc.Unsafe類,啟動類加載器(Bootstrap ClassLoader)加載的Class才能訪問它;ABA問題)

3)無同步方案:不涉及數據共享的代碼天生就是線程安全的--可重入代碼和線程本地存儲(java.lang.ThreadLocal類)

6:多線程鎖優化

1)自旋鎖與自適應鎖? ?2)消除鎖? 3)粗化鎖? ?4)輕量級鎖? ? ?5)偏向鎖

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/152386.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息