<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一、基礎概念

      1、重進入

        當一個線程請求已被其他線程占有的鎖時,請求線程會被阻塞。

        但當一個線程請求被自己占有的鎖時,請求會成功。即可重進入

      2、volatile和鎖

        鎖可以保證可見性和原子性;

        volatile只能保證可見性;

        四大屏障;

      3、CAS

      3.1 CAS并發原語體現在Java中就是sun.misc.Unsafe類的各個方法。調用Unsafe中的CAS方法,JVM會幫我們實現出CAS匯編指令。這是一種完全依賴于硬件的功能,通過它實現了原子操作。

        由于CAS是一種系統原語,原語的執行必須是連續的,且不允許中斷,也就是說CAS是一條CPU的原子指令,不會造成數據不一致的問題。

      3.2 原子引用 AtomicReference

       3.3 手寫自旋鎖

       3.4 CAS缺點

        1、循環時間長開銷大

        2、ABA問題----AtomicStampedReference

       4、Monitor

      hotspot中,monitor采用ObjectMonitor實現。

      每一個對象都天生帶著ObjectMonitor,每一個被鎖住的對象都會和Monitor關聯起來

       5、原子類

      1、分類:基本原子類、數組原子類、

      引用原子類:AtomicReference,AtomicStampedReference,AtomicMarkableReference

      原子更新對象屬性:AtomicIntegerFieldUpdater,AtomicLongFieldUpdater,AtomicReferenceFieldUpdater

       

      必須使用int類型,否則報錯

       

       AtomicReferenceFieldUpdater

       2、LongAdder和LongAccumulator

      LongAdder比AtomicLong在大吞吐量時性能顯著,減少樂觀鎖次數;

      LongAdder只適用于累加,只能從0開始;

       LongAdder 繼承 Striped64 繼承 Number

      LongAdder總體思想:分散熱點,將value值分散到一個Cell數組中,不同線程會命中到數組的不同槽中,各個線程只對自己槽中的值進行CAS操作。如果要獲取真正的Long值,只需將各個槽中的值累加返回。

      初始化cell數組:

       擴容

       

       6、ThreadLocal

      6.1 初步解釋

       ThreadLocal提供線程局部變量,這些變量與正常的變量不同,因為每一個線程在訪問ThreadLocal實例的時候,都有自己的、獨立初始化的變量副本。ThreadLocal實例通常是類中的私有靜態字段,使用他的目的是希望將狀態與線程關聯起來

       6.2 使用注意

      使用完成后調用remove(),刪除此線程局部變量的當前線程值。

      6.3 源碼分析

      1、Thread,ThreadLocal,ThreadLocalMap的關系

      2、get方法

      首先獲取當前線程的成員變量threadLocals,即一個ThreadLocalMap,若map為null,則進行初始化;

      初始化的過程,即創建一個ThreadLocalMap,賦值給當前線程的threadLocals。

       6.4 內存泄漏問題

      1、內存泄漏:不再會被使用的對象或變量占用的內存不能被回收

      2、強引用(Reference):對于強引用對象,就算出現了OOM,也不會對該對象進行回收

        強引用是我們最常見的普通對象引用。

      3、軟引用(SoftReference):對于只有軟引用的對象,當系統內存充足時不會回收,系統內存不足時會回收。

      4、弱引用(WeakReference):對于只有弱引用的對象,只要垃圾回收器一運行,不管jvm的內存是否足夠,都會被回收。

      5、虛引用(PhantomReference):

        虛引用形同虛設,如果一個對象僅持有虛引用,那么它和沒有任何引用一樣,在任何時候都可能被回收,不能單獨使用也不能通過它訪問對象,虛引用必須和引用隊列(ReferenceQueue)結合使用。被回收后會放到引用隊列中,可以執行后續的操作,如事后清理操作。

        虛引用的主要作用是跟蹤對象被垃圾回收的狀態,僅僅只是提供了一種確保對象被finalize后,做某些事情的通知機制。get方法總是返回null

      6、為什么用弱引用

      如上圖所示,因ThreadLocalMap中存放的當前ThreadLocal的引用,而ThreadLocalMap是Thread的成員變量,當棧幀中的強引用取消時,弱引用可被回收,可大大減小內存泄漏的防線。

      7、總結

       

       7、對象內存布局

      1、對象內存布局初識

        對象在堆內存中的存儲布局可以劃分為三個部分:對象頭、實例數據、對齊填充(整體保證大小為8個字節的倍數)

        對象頭:對象標記(Mark Word),類元信息(又叫類型指針)

       2、對象頭-MarkWord

      包含哈希碼(如obj.hashcode()),GC標記,GC次數,同步鎖標記,偏向鎖持有者等,默認存儲HashCode,分代年齡和鎖標志位等信息。

      64位系統中,MarkWord占8字節

      3、對象頭-類元信息(類型指針)

      每次new對象時的模板,指向方法區的類元信息

      64位系統中,類元信息占8個字節

      4、實例數據

       

       

       

       

       

       

       

       

       

       

       

       

       

       

        

       

      posted on 2020-06-24 16:54  dysdhd  閱讀(112)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 精品一区二区中文字幕| 国产精品自拍一二三四区| 国产精品十八禁一区二区| 国产精品理论片在线观看| 日韩国产中文字幕精品| 国产精品va在线观看无码不卡| 国产精品无码a∨麻豆| 性色av 一区二区三区| 亚洲男女羞羞无遮挡久久丫| 中文字幕日本一区二区在线观看| 人妻少妇精品中文字幕| 少妇性bbb搡bbb爽爽爽欧美| 日夜啪啪一区二区三区| 亚洲AV日韩精品久久久久| 人妻丰满熟妇av无码区不卡| 高清偷拍一区二区三区| 成人国产精品一区二区网站公司| 国产午夜美女福利短视频| 国产情侣激情在线对白| 无码欧亚熟妇人妻AV在线外遇| 边吃奶边添下面好爽| 亚洲av影院一区二区三区| 国产激情一区二区三区在线| 国产亚洲精品第一综合另类无码无遮挡又大又爽又黄的视频 | av无码av无码专区| 中文字幕精品亚洲字幕成| 18禁成人免费无码网站| 国产精品亚洲а∨天堂2021 | 97免费在线观看视频| 欧洲无码一区二区三区在线观看| 色av综合av综合无码网站| 亚洲精品国产精品国在线| 欧美日韩v| 蜜桃在线一区二区三区| 视频区 国产 图片区 小说区| 色五月丁香六月欧美综合| 99人中文字幕亚洲区三| 日本亚洲一区二区精品| 99精品国产综合久久久久五月天| 波多野结衣av无码| 中文字幕日韩精品亚洲一区|