91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java虛擬機對鎖優化方法是什么

發布時間:2021-11-30 14:04:53 來源:億速云 閱讀:114 作者:iii 欄目:大數據

本篇內容介紹了“Java虛擬機對鎖優化方法是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1、 鎖偏向

鎖偏向是一種針對加鎖操作的優化手段。

如果一個線程獲得了鎖,那么鎖就進入偏向模式。當這個線程再次請求鎖時,無須再做任何同步操作。這樣就節省了大量有關鎖申請的操作,從而提高了程序性能。

因此,對于幾乎沒有鎖競爭的場合,偏向鎖有比較紅啊的優化效果,因為連續多次極有可能是同一個線程請求相同的鎖。而對于鎖競爭比較激烈的場合,其效果不佳。因為在競爭激烈的場合,最有可能的情況是每次都是不同的線程來請求相同的鎖。點擊這里了解幾種常見的鎖。

2、 輕量級鎖

如果偏向鎖失敗,即上一個請求的鎖的線程和這個線程不是同一個。偏向鎖失敗意味者不能避免做同步操作。此時,虛擬機并不會立即掛起線程。他會使用一種成為輕量級鎖的優化手段。 

輕量級鎖的操作也很方便,它只是簡單地將對象頭部作為指針,指向蚩尤鎖的線程堆棧的內部,來判斷一個線程是否持有對象鎖。 如果線程獲得輕量級鎖成功,則可以順利進入臨界區。如果輕量級鎖失敗,則表示其他線程搶先爭奪了鎖,那么當前線程的鎖請求就會膨脹為重量級鎖。點擊這里了解幾種常見的鎖。

3、 自選鎖

鎖膨脹后,虛擬機為了避免線程真實地在操作系統層面掛起,虛擬機還會在做最后的努力–自選鎖。由于當前線程暫時無法獲得鎖,但是什么時候可以獲得鎖是一個未知數。也許在CPU幾個時鐘周期后,就可以得到鎖。如果這樣,簡單粗暴的掛起線程可能是一種得不償失的操作,因此系統會進行一次賭注:它會假設在不久的將來,線程可以得到這把鎖。

因此虛擬機讓當前線程做個空循環,在經過若干次循環后,如果可以得到鎖,那么就順利進入臨界區。如果還不能得到鎖,才會真實地將線程在操作系統層面掛起。

4、 鎖消除

鎖消除是一種更徹底的鎖優化。Java虛擬機在JIT編譯時,通過對運行上下文的掃描,去除不可能存在共享資源競爭的鎖。通過鎖消除,可以節省毫無意義的請求鎖時間。

下面這種這種情況,我們使用vector, 而vector內部使用了synchronize請求鎖。

public String []  createStrings(){
    Vector<String>  v= new Vector<String>();
    for(int i=0;i<100;i++){
        v.add(Integer.toString(i));
    }
    return v.toArray(new String[]{});
}

由于V只在函數 createStrnigs 中使用,因此它只是一個單純的局部變量。局部變量是在線程棧上分配的,屬于線程私有額數據,因此不可能被其他線程訪問。所以,在這種情況下,Vector內部所有加鎖同步都是沒有必要的。如果虛擬機檢測到這種情況,就會將這些無用的鎖操作去除。點擊這里了解幾種常見的鎖。

鎖消除涉及的一項關鍵技術為逃逸分析。所謂逃逸分析就是觀察某一個變量是否會逃出某一個作用域。在本例中,變量v顯然沒有逃出createString 函數之外。以此為基礎,虛擬機才可以大膽的將v內部的加鎖操作去除。如果createStrings 返回的不是String數組,而是v本身,那么就認為變量v逃逸出了當前函數,也就是說v有可能被其他線程訪問。如是這樣,虛擬機就不能消除v中的鎖操作。

逃逸分析必須在 -server 模式下進行,可以使用 -XX:DoEscapeAnalysis 參數打開逃逸分析,使用 -XX:+EliminateLocks 參數可以打開鎖消除。

“Java虛擬機對鎖優化方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

峨山| 平原县| 彭阳县| 高安市| 平昌县| 江安县| 仲巴县| 汉寿县| 湖口县| 平陆县| 会理县| 准格尔旗| 穆棱市| 平塘县| 桂阳县| 澳门| 丰城市| 客服| 宜黄县| 花垣县| 开远市| 关岭| 鄂尔多斯市| 太康县| 崇州市| 修文县| 镇原县| 丰都县| 琼海市| 防城港市| 龙州县| 榕江县| 黔西县| 兴安县| 桂阳县| 黑河市| 玉树县| 筠连县| 鄂伦春自治旗| 如东县| 浪卡子县|