成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java 虛擬機(jī)對鎖優(yōu)化所做的努力

云計(jì)算 虛擬化
作為一款公用平臺(tái),JDK 本身也為并發(fā)程序的性能絞盡腦汁,在 JDK 內(nèi)部也想盡一切辦法提供并發(fā)時(shí)的系統(tǒng)吞吐量。這里,我將向大家簡單介紹幾種 JDK 內(nèi)部的 "鎖" 優(yōu)化策略。

 作為一款公用平臺(tái),JDK 本身也為并發(fā)程序的性能絞盡腦汁,在 JDK 內(nèi)部也想盡一切辦法提供并發(fā)時(shí)的系統(tǒng)吞吐量。這里,我將向大家簡單介紹幾種 JDK 內(nèi)部的 "鎖" 優(yōu)化策略。

1、 鎖偏向

鎖偏向是一種針對加鎖操作的優(yōu)化手段。

如果一個(gè)線程獲得了鎖,那么鎖就進(jìn)入偏向模式。當(dāng)這個(gè)線程再次請求鎖時(shí),無須再做任何同步操作。這樣就節(jié)省了大量有關(guān)鎖申請的操作,從而提高了程序性能。

因此,對于幾乎沒有鎖競爭的場合,偏向鎖有比較紅啊的優(yōu)化效果,因?yàn)檫B續(xù)多次極有可能是同一個(gè)線程請求相同的鎖。而對于鎖競爭比較激烈的場合,其效果不佳。因?yàn)樵诟偁幖ち业膱龊希钣锌赡艿那闆r是每次都是不同的線程來請求相同的鎖。點(diǎn)擊這里了解幾種常見的鎖。

[[243266]]

2、 輕量級(jí)鎖

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

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

3、 自選鎖

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

因此虛擬機(jī)讓當(dāng)前線程做個(gè)空循環(huán),在經(jīng)過若干次循環(huán)后,如果可以得到鎖,那么就順利進(jìn)入臨界區(qū)。如果還不能得到鎖,才會(huì)真實(shí)地將線程在操作系統(tǒng)層面掛起。

4、 鎖消除

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

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

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

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

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

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

責(zé)任編輯:武曉燕 來源: Java技術(shù)棧
相關(guān)推薦

2011-12-28 13:38:00

JavaJVM

2023-01-26 00:06:05

JAVA虛擬機(jī)優(yōu)化

2009-09-09 08:05:51

優(yōu)化VMware Se

2017-08-15 15:36:41

VMwareLinux虛擬機(jī)

2012-05-18 10:22:23

2018-06-19 15:39:21

HeapJava虛擬機(jī)

2011-06-22 13:35:55

JVM

2020-01-17 10:52:37

無服務(wù)器容器技術(shù)

2013-07-17 09:32:58

2009-03-20 09:46:52

服務(wù)器虛擬化虛擬機(jī)管理

2021-01-26 09:30:32

加密虛擬機(jī)攻擊

2023-12-14 10:35:22

虛擬機(jī)程序

2009-06-12 16:02:58

裝載Java虛擬機(jī)

2010-07-26 09:02:38

2020-06-03 19:07:49

Java虛擬機(jī)JVM

2010-09-17 15:12:57

JVMJava虛擬機(jī)

2010-09-25 15:13:40

JVMJava虛擬機(jī)

2019-03-05 14:59:42

Java虛擬機(jī)加載類

2009-06-22 14:04:00

2024-02-28 11:33:01

云服務(wù)開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日韩美女一区二区三区在线观看 | 国产免费福利小视频 | 日韩一区中文字幕 | 精品福利在线 | 69热视频在线观看 | 国产99久久精品一区二区永久免费 | 亚洲一区三区在线观看 | 日韩中文在线 | 成人毛片一区二区三区 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 日本一二三区高清 | 一级片在线免费看 | 久久久精品网 | 免费视频中文字幕 | 一级特黄视频 | 亚洲综合成人网 | 男人天堂网址 | 欧美久久精品一级黑人c片 91免费在线视频 | 日韩精品一区二区三区中文在线 | 久久国内精品 | 九九久久国产 | 日本欧美在线观看视频 | 国产极品91 | 国产精品久久久久久久久久免费看 | 国产精品无码久久久久 | 精品在线观看入口 | 午夜在线| 色婷婷久久久久swag精品 | 国产九九九| 97高清国语自产拍 | 日韩在线不卡视频 | 亚洲一区二区在线免费观看 | 亚洲天堂成人在线视频 | 亚洲国产精品视频一区 | 国产精品久久久久久妇女6080 | 日韩超碰 | 欧美精品一区二区三区在线播放 | 亚洲成人一区 | 成av在线 | 亚洲精品久久久久久久不卡四虎 | 日韩网站在线观看 |