精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我們一起聊聊synchronized慢在哪里

開發(fā) 前端
當(dāng)線程退出Monitor鎖,便會(huì)將Monitor鎖中的_count減1,清空_owner,jvm會(huì)隨機(jī)喚醒_EntryList集合中一個(gè)線程重新獲取Monitor鎖,這個(gè)隨機(jī)便突出了synchronized的不公平性。

前置思考

實(shí)現(xiàn)鎖應(yīng)該考慮的問題

  1. 如何獲取資源(鎖)?
  2. 獲取不到資源的線程如何處理?
  3. 如何釋放資源?
  4. 資源釋放后如何讓其他線程獲取資源?

由此可以得出實(shí)現(xiàn)一把鎖,應(yīng)該具備哪些邏輯

  • 鎖的標(biāo)識(shí)
    需要有個(gè)標(biāo)識(shí)或者狀態(tài)來表示鎖是否已經(jīng)被占用。
  • 線程搶鎖的邏輯
    多個(gè)線程如何搶鎖,如何才算搶到鎖,已經(jīng)搶到鎖的線程再次搶鎖如何處理等等。
  • 線程掛起的邏輯
    線程如果搶到鎖自然順利往下運(yùn)行了,而那些沒有搶到鎖的線程怎么處理呢?如果一直處于活躍狀態(tài),cpu肯定是吃不消,那就需要掛起。具體又如何掛起呢?
  • 線程存儲(chǔ)機(jī)制
    沒有搶到鎖的線程就掛起了,而且被掛起的線程可能有很多個(gè),這些線程總要放在某個(gè)地方保存起來等待喚醒,然而這么多被掛起的線程,要喚醒哪一個(gè)呢?這就需要一套保存機(jī)制來支撐喚醒邏輯。
  • 線程釋放鎖的邏輯
    線程在執(zhí)行完后就要釋放鎖,跟搶鎖邏輯是對(duì)應(yīng)的,其實(shí)也是操作鎖標(biāo)識(shí)。
  • 線程喚醒的邏輯
    鎖釋放后,就要去喚醒被阻塞的線程,這就要考慮喚醒誰,如何喚醒,喚醒后的線程做什么事情。

這是我們?cè)谔接慉QS時(shí)候的思考,這里也把它貼過來,是因?yàn)橥瑯邮擎i,基本的實(shí)現(xiàn)思路都是一樣的,也方便對(duì)比兩個(gè)鎖的操作,同樣帶著上面的思考,我們來看看synchronized是怎么處理的

從synchronized的使用入手

  1. synchronized可以修飾實(shí)例方法。
  2. synchronized可以修飾靜態(tài)方法。
  3. synchronized可以修飾實(shí)例方法的代碼塊。
  4. synchronized可以修飾靜態(tài)方法的代碼塊。

怎么使用不必多說,本篇就以修飾實(shí)例方法中的代碼塊為例來看下它的底層邏輯,如下為代碼塊代碼。

synchronized(this){
            
}

synchronized是jvm級(jí)別實(shí)現(xiàn)的,在java端只是一個(gè)關(guān)鍵字,它在編譯后會(huì)變?yōu)槿缦聢D的樣子,整個(gè)代碼塊前后被monitorenter 和 monitorexit包裹,也就是說synchronized關(guān)鍵字的在編譯后就變?yōu)樯厦鎯蓚€(gè)關(guān)鍵字。

圖片圖片

jvm運(yùn)行代碼的時(shí)候,當(dāng)遇到這兩個(gè)關(guān)鍵字時(shí)候就會(huì)做出相應(yīng)的處理。

其實(shí)很簡單,這兩個(gè)關(guān)鍵字無非是在邏輯前后分別進(jìn)行搶鎖和釋放鎖,與ReentrantLock的lock和unlock是一個(gè)道理。

monitorenter 和 monitorexit這兩個(gè)是jvm級(jí)別字節(jié)碼指令,不難想到j(luò)vm在運(yùn)行代碼的時(shí)候,遇到monitorenter關(guān)鍵字,一定會(huì)啟動(dòng)搶鎖的邏輯,包括搶鎖,入隊(duì),阻塞;而遇到monitorexit的時(shí)候一定會(huì)走釋放鎖邏輯,包括釋放鎖,喚醒阻塞線程。

前置了解

創(chuàng)建對(duì)象

通過synchronized代碼塊的用法我們就能知道java的synchronized使用是依賴一個(gè)對(duì)象的,所以我們下面先看下java中的對(duì)象是怎么創(chuàng)建的。

java中如何創(chuàng)建一個(gè)對(duì)象?java代碼會(huì)被編譯成字節(jié)碼然后被jvm運(yùn)行,jvm在遇到new關(guān)鍵字的時(shí)候就會(huì)啟動(dòng)對(duì)象的創(chuàng)建流程,對(duì)象的大致流程如下:

圖片圖片

默認(rèn)情況下jvm加載類是懶加載的,所以創(chuàng)建對(duì)象的第一步是判斷類是否已經(jīng)加載,如果沒有加載,需要先走類的加載流程。

接下來是分配內(nèi)存,一個(gè)對(duì)象在類加載的時(shí)候就可以知道所需要的內(nèi)存大小,此時(shí)就是在堆中劃分一塊區(qū)域出來作為對(duì)象的私密空間,具體如何分配和具體使用的垃圾回收器有關(guān),jvm篇再細(xì)講,在偌大的堆中怎么為一個(gè)對(duì)象劃分區(qū)間呢?這里的分配主要是兩種方法:指針碰撞和空閑列表,但是不管哪種劃分方法都會(huì)存在并發(fā)問題,此時(shí)jvm的解決方案是TLAB和cas配合失敗重試。

初始化零值這一步是給對(duì)象中的屬性賦零值,比如int類型默認(rèn)為0,這一步是避免屬性不賦值的情況下出現(xiàn)空指針異常。

每個(gè)對(duì)象都會(huì)有一個(gè)對(duì)象頭區(qū)域,這個(gè)區(qū)域包括Mark Word,元數(shù)據(jù)指針,數(shù)組長度三個(gè)部分,Mark Word用于保存對(duì)象的運(yùn)行時(shí)數(shù)據(jù),比如hashcode,分代年齡,鎖標(biāo)識(shí)等,元數(shù)據(jù)指針是當(dāng)前對(duì)象所屬類對(duì)象的地址,只有數(shù)組對(duì)象才會(huì)有數(shù)組長度。

最后初始化對(duì)象,這個(gè)時(shí)候一個(gè)完整的對(duì)象生成了。

一個(gè)完整對(duì)象的結(jié)構(gòu)如下:

圖片圖片

可以看到結(jié)構(gòu)中有一個(gè)對(duì)齊填充,對(duì)齊填充是為了滿足對(duì)象的大小為8字節(jié)的整數(shù)倍,只有8字節(jié)的整數(shù)倍才是最高效的存取方式。所以一個(gè)對(duì)象的大小總是8字節(jié)的整數(shù)倍。

對(duì)象頭

對(duì)象頭是對(duì)象中用于保存實(shí)例數(shù)據(jù)外的運(yùn)行時(shí)數(shù)據(jù)的區(qū)域。

我們知道java是面向?qū)ο蟮模趈ava的世界一切皆對(duì)象,所以整個(gè)jvm的設(shè)計(jì)都是圍繞對(duì)象,包括對(duì)象所屬類的加載,對(duì)象的創(chuàng)建,對(duì)象的保存,對(duì)象的銷毀,對(duì)象的回收,鎖的實(shí)現(xiàn),以及jvm的內(nèi)存結(jié)構(gòu)等等都要圍繞對(duì)象設(shè)計(jì),這就導(dǎo)致對(duì)象自身會(huì)有很多的運(yùn)行時(shí)數(shù)據(jù),比如垃圾回收依賴的分代年齡,代碼運(yùn)行過程中用于標(biāo)識(shí)對(duì)象唯一的hashcode,當(dāng)用作鎖對(duì)象的時(shí)候鎖的相關(guān)信息存儲(chǔ),記錄當(dāng)前對(duì)象所屬的類對(duì)象指針等等。

所以jvm設(shè)計(jì)了對(duì)象頭,對(duì)象頭包括Mark Word,MetaDate,數(shù)組長度三部分。

Monitor

jvm對(duì)于鎖的設(shè)計(jì)是監(jiān)視器鎖,當(dāng)對(duì)象作為鎖的時(shí)候,jvm會(huì)為該對(duì)象關(guān)聯(lián)一個(gè)Monitor對(duì)象(一一對(duì)應(yīng)),這個(gè)Monitor對(duì)象就是該對(duì)象攜帶的一個(gè)監(jiān)視器。

這個(gè)Monitor對(duì)象是jvm級(jí)別實(shí)現(xiàn)的,是一個(gè)jvm級(jí)別的對(duì)象,所以我們?cè)趈ava端開發(fā)的時(shí)候是看不到摸不到的,但卻是真實(shí)存在的。

Monitor對(duì)象結(jié)構(gòu)如下:

ObjectMonitor() {
    _header       = NULL;
    _count        = 0; // 記錄個(gè)數(shù)
    _waiters      = 0,
    _recursions   = 0;
    _object       = NULL;
    _owner        = NULL; // 占用資源的線程
    _WaitSet      = NULL; // 處于wait狀態(tài)的線程,會(huì)被加入到_WaitSet
    _WaitSetLock  = 0 ;
    _Responsible  = NULL ;
    _succ         = NULL ;
    _cxq          = NULL ;
    FreeNext      = NULL ;
    _EntryList    = NULL ; // 處于等待鎖block狀態(tài)的線程,會(huì)被加入到該列表
    _SpinFreq     = 0 ;
    _SpinClock    = 0 ;
    OwnerIsThread = 0 ;
  }

synchronized鎖在優(yōu)化前就是一個(gè)地地道道的重量級(jí)鎖,重量級(jí)鎖的實(shí)現(xiàn)其實(shí)就是依賴于多線程爭奪Monitor鎖的擁有權(quán),而Monitor鎖的實(shí)現(xiàn)則依賴于操作系統(tǒng)底層的互斥原語mutex,因此每一次獲取Monitor鎖的時(shí)候都會(huì)經(jīng)過用戶態(tài)到內(nèi)核態(tài)的切換,性能很低。這便是重量鎖的由來。

實(shí)現(xiàn)原理

上面做了一些相關(guān)知識(shí)的介紹,可能還比較碎片化,接下來我們就通過加鎖流程將所有信息都串聯(lián)起來。

1.5的鎖

在jdk1.6之前的鎖就是單純的Monitor鎖,所以性能是很差的,1.6開始對(duì)鎖做了優(yōu)化,性能才得到提升。

1.6的鎖

JVM內(nèi)置鎖在1.5之后版本做了如下重大的優(yōu)化,在做了優(yōu)化后,其性能顯著提高,基本與ReentrantLock保持同等性能。

  • 鎖粗化
  • 鎖消除
  • 鎖升級(jí):輕量級(jí)鎖 偏向鎖 適應(yīng)性自旋

接下來由淺入深講解優(yōu)化內(nèi)容

1. 鎖消除

鎖的消除,顧名思義就是將鎖去除,因?yàn)橛行﹫鼍跋骆i是可以去除的

public void sync()  {
        Sync sync=new Sync();
        synchronized(sync){

        }
}

如上這種情況,我們知道進(jìn)出一個(gè)方法就是當(dāng)前線程棧的入棧出棧,所以方法內(nèi)部只要不涉及共享資源操作就是線程安全的,如上這段代碼,sync對(duì)象聲明在方法內(nèi)部,其引用是局部變量,是線程獨(dú)享資源不是共享資源,是線程獨(dú)有資源,隨著出棧發(fā)生,對(duì)象也就銷毀了,因此此處是可以不用加鎖的,鎖消除優(yōu)化就是對(duì)這種情況進(jìn)行去除鎖的處理。

jvm如何進(jìn)行優(yōu)化的呢?jvm在JIT編譯時(shí)(可以簡單理解為當(dāng)某段代碼即將第一次被執(zhí)行時(shí)進(jìn)行編譯,又稱即時(shí)編譯),通過對(duì)運(yùn)行上下文的掃描,通過逃逸分析判斷方法中的是否存在共享資源,如果無共享資源則去除不存在共享資源競爭的鎖,從而節(jié)省請(qǐng)求鎖時(shí)間。

典型的案例是StringBuffer的使用,后續(xù)會(huì)講解。

通過上面我們知道鎖消除依賴逃逸分析,逃逸分析是可以通過jvm參數(shù)配置的,如下:

-XX:+DoEscapeAnalysis 開啟逃逸分析

-XX:+EliminateLocks 開啟鎖消除

逃逸分析可以簡單理解為分析資源是否能逃逸到其他方法或者其他線程中。

2. 鎖粗化

顧名思義,把小范圍的多個(gè)鎖變成大范圍少個(gè)鎖。

public Sync sync=new Sync();

public void sync()  {
        
        synchronized(sync){

        }
        synchronized(sync){

        }
        synchronized(sync){

        }
}

上面的代碼可以看出,一個(gè)邏輯被多次加同一把鎖,每一次上鎖都是會(huì)耗時(shí)的,所以完全可以把多個(gè)鎖合并為一個(gè)鎖,這樣只需要上一次鎖就可以了,大大節(jié)省了時(shí)間。

同樣jvm在即時(shí)編譯的時(shí)候會(huì)掃描判斷是否存在可以粗化的鎖行為。

3. 鎖膨脹

鎖膨脹又叫鎖升級(jí)。

鎖升級(jí)是鎖優(yōu)化后的鎖機(jī)制,這個(gè)機(jī)制中包含這樣幾個(gè)概念:偏向鎖,輕量級(jí)鎖,適應(yīng)性自旋,重量級(jí)鎖。

鎖升級(jí)是依靠對(duì)象頭的Mark Word來保存標(biāo)志信息的,接下來以32位操作系統(tǒng)來看下鎖升級(jí)過程中的對(duì)象頭中運(yùn)行時(shí)數(shù)據(jù)的變化。

圖片圖片

  • 無鎖狀態(tài) 當(dāng)沒有任何線程進(jìn)入的時(shí)候,此時(shí)處于無鎖狀態(tài),Mark Word中會(huì)有25bit的空間大小留給hashcode,4bit的空間大小留給對(duì)象的分代年齡信息,1bit的空間大小是標(biāo)識(shí)是否偏向(0否,1是),2bit的空間大小是鎖標(biāo)識(shí)位。

此時(shí)鎖標(biāo)志位為01,是否偏向?yàn)?,代表無鎖狀態(tài)。但是此時(shí)并不一定有hashcode,因?yàn)閔ashcode是代碼運(yùn)行過程中調(diào)用生成方法才生成的,如果運(yùn)行過程不調(diào)用就不會(huì)生成。

請(qǐng)注意,hashcode的生成是會(huì)影響鎖的升級(jí)過程的。

  • 偏向鎖狀態(tài)

當(dāng)?shù)谝粋€(gè)線程T1進(jìn)入代碼塊后的步驟(前提條件是全程無hashcode生成)

  1. 判斷是否處于偏向中(通過Mark Word中的是否偏向判斷)
  2. 此時(shí)未處于偏向中,當(dāng)前線程會(huì)將自己的線程id保存到Mark Word中,設(shè)置是否偏向?yàn)?,此時(shí)鎖標(biāo)志位依然是01

此時(shí)Mark Word為:23bit的線程id,4bit的分代年齡,是否偏向?yàn)?,鎖標(biāo)識(shí)位依然為01。

此時(shí)是偏向鎖狀態(tài),它其實(shí)是一種特殊的無鎖狀態(tài)。

上面的過程是建立在全程無hashcode生成的基礎(chǔ)上,我們知道了hashcode會(huì)占用25bit,線程id會(huì)占用23bit,如果過程有hashcode生成怎么辦,這里涉及到兩個(gè)問題。

第一個(gè)問題,T1進(jìn)入前就已經(jīng)生成了hashcode怎么處理?

jvm的做法是如果偏向前已經(jīng)生成hashcode,那么就放棄偏向,直接進(jìn)入輕量級(jí)鎖。

第二個(gè)問題,T1進(jìn)入后鎖狀態(tài)變?yōu)榱似蜴i,此時(shí)生成hashcode怎么處理?

jvm的做法是撤銷偏向,直接進(jìn)入重量級(jí)鎖。

所以我們?cè)谑褂面i的時(shí)候要特別注意hashcode生成給鎖升級(jí)帶來的影響。

  • 輕量級(jí)鎖狀態(tài)

當(dāng)?shù)诙€(gè)線程T2進(jìn)入代碼塊后

  1. 判斷是否處于偏向中(通過Mark Word中的是否偏向判斷)
  2. 如果處于偏向中,T2會(huì)以cas的方式試圖將Mark Word中的線程id替換為自己的線程id
  3. 如果T1已經(jīng)執(zhí)行完代碼塊,T2一定是可以替換成功的,此時(shí)鎖依然是偏向鎖狀態(tài)
  4. 如果T1沒有執(zhí)行完代碼塊,T2一定是替換不成功的,此時(shí)將進(jìn)入偏向鎖撤銷升級(jí)為輕量級(jí)鎖的過程
  5. 首先T1會(huì)進(jìn)入到安全點(diǎn),T1和T2會(huì)在自己的??臻g開辟一塊區(qū)域用于保存鎖記錄,同時(shí)復(fù)制一份Mark Word到這個(gè)鎖記錄中,同時(shí)cas的方式將自己棧空間這個(gè)鎖記錄的指針設(shè)置到Mark Word中去,因?yàn)門1持有偏向鎖,所以T1會(huì)優(yōu)先設(shè)置成功,此時(shí)Mark Word中有30bit的鎖記錄指針和2bit的鎖標(biāo)志位,此時(shí)的鎖標(biāo)志位為00代表輕量級(jí)鎖,鎖記錄指針指向當(dāng)前持有輕量級(jí)鎖的線程中??臻g的地址。T2沒有替換成功,將會(huì)進(jìn)入不斷輪詢失敗重試過程。

輕量級(jí)鎖是在資源競爭壓力不是很大的情況下,避免每個(gè)線程都去獲取鎖而造成用戶態(tài)到內(nèi)核態(tài)的切換,這個(gè)切換是比較耗時(shí)的,這樣就能提高性能,但是如果競爭壓力大的情況下輕量級(jí)鎖就不行了,因?yàn)閴毫Υ笠馕吨泻芏嗑€程在輪序失敗重試獲取輕量級(jí)鎖,短時(shí)間內(nèi)會(huì)造成cpu壓力飆升,甚至拖垮cpu,這個(gè)時(shí)候就必須升級(jí)為重量級(jí)鎖。

那么如何才算競爭壓力大,什么時(shí)候會(huì)升級(jí)為重量級(jí)鎖呢?

jvm默認(rèn)輪詢次數(shù)限制值為十次,超過十次獲取不到資源就代表競爭壓力比較大了,用戶也可以使用如下參數(shù)配置來自行更改這個(gè)次數(shù)

-XX:PreBlockSpin

但是有個(gè)問題,如果通過這個(gè)默認(rèn)值或者這個(gè)jvm參數(shù)配置限制數(shù)量,那意味著jvm全系統(tǒng)的鎖都要遵循,這個(gè)數(shù)字可能不適用于所有的鎖,因此jvm引入了自適應(yīng)的自旋。自適應(yīng)意味著自旋的時(shí)間不再是固定的了,而是由前一次在同一個(gè)鎖上的自旋時(shí)間及鎖的擁有者的狀態(tài)來決定的。如果在同一個(gè)鎖對(duì)象上,自旋等待剛剛成功獲得過鎖,并且持有鎖的線程正在運(yùn)行中,那么虛擬機(jī)就會(huì)認(rèn)為這次自旋也很有可能再次成功,進(jìn)而允許自旋等待持續(xù)相對(duì)更長的時(shí)間,比如持續(xù)100次忙循環(huán)。另一方面,如果對(duì)于某個(gè)鎖,自旋很少成功獲得過鎖,那在以后要獲取這個(gè)鎖時(shí)將有可能直接省略掉自旋過程,以避免浪費(fèi)處理器資源。有了自適應(yīng)自旋,隨著程序運(yùn)行時(shí)間的增長及性能監(jiān)控信息的不斷完善,虛擬機(jī)對(duì)程序鎖的狀況預(yù)測就會(huì)越來越精準(zhǔn),虛擬機(jī)就會(huì)變得越來越“聰明”了。

  1. 重量級(jí)鎖

重量級(jí)鎖就是Monitor鎖,也叫監(jiān)視器鎖,其實(shí)現(xiàn)是依靠操作底層的互斥原語Mutes Lock,因?yàn)槊恳淮潍@取Monitor鎖都需要用戶態(tài)到內(nèi)核態(tài)的切換,所以比較耗時(shí),也就是重量級(jí)鎖的由來。當(dāng)自旋的條件破壞后,比如自旋次數(shù)達(dá)到限制或者競爭的壓力越來越大,將不再自旋,輕量級(jí)鎖升級(jí)為重量級(jí)鎖,當(dāng)前對(duì)象頭中的Mark Word被復(fù)制一份到Monitor對(duì)象中,Mark Word中原來的輕量級(jí)鎖的鎖記錄指針被換成Monitor對(duì)象的指針,然后所有的線程會(huì)搶奪Monitor鎖的擁有權(quán),以cas方式將自己的線程id填充到Monitor對(duì)象的_owner字段,同時(shí)_count字段加1,當(dāng)然此時(shí)能夠cas成功的只會(huì)是原來持有輕量級(jí)鎖的線程,而那些沒有獲取到Monitor鎖的線程將會(huì)被阻塞并放入Monitor對(duì)象的_EntryList字段等待喚醒。

此時(shí)鎖的標(biāo)志位為10,表示重量級(jí)鎖。

當(dāng)線程退出Monitor鎖,便會(huì)將Monitor鎖中的_count減1,清空_owner,jvm會(huì)隨機(jī)喚醒_EntryList集合中一個(gè)線程重新獲取Monitor鎖,這個(gè)隨機(jī)便突出了synchronized的不公平性。

責(zé)任編輯:武曉燕 來源: 碼農(nóng)本農(nóng)
相關(guān)推薦

2023-06-30 08:18:51

敏捷開發(fā)模式

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數(shù)據(jù)安全API

2023-09-10 21:42:31

2024-02-20 21:34:16

循環(huán)GolangGo

2021-08-27 07:06:10

IOJava抽象

2024-07-26 09:47:28

2022-10-08 00:00:05

SQL機(jī)制結(jié)構(gòu)

2022-02-23 08:41:58

NATIPv4IPv6

2022-09-22 08:06:29

計(jì)算機(jī)平板微信

2024-11-28 09:57:50

C#事件發(fā)布器

2021-08-12 07:49:24

mysql

2023-07-24 09:41:08

自動(dòng)駕駛技術(shù)交通

2023-03-26 23:47:32

Go內(nèi)存模型

2023-07-27 07:46:51

SAFe團(tuán)隊(duì)測試

2022-06-26 09:40:55

Django框架服務(wù)

2023-12-28 09:55:08

隊(duì)列數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)

2022-10-28 07:27:17

Netty異步Future

2022-11-12 12:33:38

CSS預(yù)處理器Sass
點(diǎn)贊
收藏

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

蘑菇福利视频一区播放| 国产厕拍一区| 亚洲蜜臀av乱码久久精品| 亚洲自拍偷拍视频| 日韩污视频在线观看| 亚洲国产合集| 欧美一区二区视频在线观看2020| 日本欧美视频在线观看| 99re在线视频| 粉嫩欧美一区二区三区高清影视| 日本电影亚洲天堂| www青青草原| 国产日韩视频在线| 欧美成人精品高清在线播放| 热久久精品免费视频| 视频在线观看入口黄最新永久免费国产 | 粉嫩91精品久久久久久久99蜜桃 | 国产a级片免费看| 亚洲三级中文字幕| 国产一本一道久久香蕉| 日韩美女福利视频| 69精品久久久| 99久久夜色精品国产亚洲96| 亚洲激情久久久| 色婷婷综合在线观看| 午夜av成人| 黄色一区二区在线| 菠萝蜜视频在线观看入口| 国产一级网站视频在线| 99久久99久久综合| 国产精品久久久久久久久婷婷| 在线视频1卡二卡三卡| 亚洲欧美清纯在线制服| 久久久久久久一区二区三区| 午夜精品一区二区三级视频| 亚洲精品**不卡在线播he| 日韩精品一区二区三区在线| 一区二区三区 欧美| 中文字幕21页在线看| 婷婷综合另类小说色区| 视色,视色影院,视色影库,视色网| 成人欧美一区| 久久久久久久久久久黄色| 韩日午夜在线资源一区二区| 国产后入清纯学生妹| 极品少妇xxxx偷拍精品少妇| 国产精品视频男人的天堂| 天堂中文在线网| 国产亚洲在线| 98精品国产高清在线xxxx天堂| 久草资源在线视频| 欧美区国产区| 欧美日韩不卡合集视频| 黑人巨大精品一区二区在线| 久久久久午夜电影| 久久久精品国产| 成人一级黄色大片| 亚洲字幕久久| 欧美福利视频在线| 久一视频在线观看| 激情欧美丁香| 26uuu另类亚洲欧美日本一| 日韩精品国产一区二区| 国产精品亚洲欧美| 欧美最顶级的aⅴ艳星| 伊人中文字幕在线观看| 肉丝袜脚交视频一区二区| 国产精品成人av在线| 成人a v视频| 美女视频一区二区三区| 亚洲一区二区三区乱码aⅴ| 国产www免费观看| 福利91精品一区二区三区| 国产精品久久国产精品| 天堂91在线| 国产精品素人视频| 免费观看国产视频在线| 国产美女一区视频| 欧美视频免费在线| 色片在线免费观看| 日韩最新av| 日韩精品免费看| 国产在线观看h| 66视频精品| 久久免费国产视频| 波多野结衣影片| 国产精品自产自拍| 久久亚洲综合网| av二区在线| 亚洲免费在线看| 日韩精品―中文字幕| 性欧美videohd高精| 91麻豆精品国产自产在线| 国产日韩视频一区| 精品国内自产拍在线观看视频 | 国产一级中文字幕| 男女精品网站| 91视频99| 国产毛片在线看| 亚洲卡通动漫在线| 日本www高清视频| 国产激情综合| 亚洲人成人99网站| 久久久久久天堂| 免费黄网站欧美| 国内一区在线| 九七久久人人| 在线免费观看视频一区| 欧美图片自拍偷拍| 999国产精品999久久久久久| 97视频com| 999av视频| 国产日韩欧美麻豆| av7777777| 日韩区欧美区| 正在播放亚洲1区| 亚洲黄色一区二区| 国产福利一区二区三区视频在线| 欧美精品尤物在线| 里番在线播放| 在线不卡a资源高清| 好吊视频在线观看| 亚洲激情欧美| 亚洲一区二区三区xxx视频| www.在线视频.com| 一本到不卡精品视频在线观看| 日本人dh亚洲人ⅹxx| 91欧美大片| 国产精品视频成人| 国产露出视频在线观看| 图片区小说区区亚洲影院| 自拍视频第一页| 亚洲国产精品成人| 国产日韩欧美视频| 91欧美在线视频| 91激情在线视频| 中文精品在线观看| 91久久综合| 国产视频一区二区三区四区| 99在线视频影院| 日韩欧美色综合| 农村黄色一级片| 国产精品一级片在线观看| 大桥未久一区二区三区| 国产区一区二| 欧美成年人视频网站| 91久久精品国产91性色69| 国产精品乱人伦一区二区| 污版视频在线观看| 99久久婷婷国产综合精品电影√| 国产精品视频一区国模私拍 | 麻豆三级在线观看| 日韩av有码| 国产欧美va欧美va香蕉在| aiai在线| 精品污污网站免费看| 中国美女黄色一级片| 麻豆91在线播放免费| 亚洲三区在线| 国产亚洲字幕| 久久久噜久噜久久综合| 五月婷婷在线播放| 欧美视频中文字幕在线| a天堂中文字幕| 久久精品国产一区二区三| 一本色道久久综合亚洲精品婷婷| 一区二区三区无毛| 欧美日韩国产成人在线| 日韩中文字幕免费观看| 岛国av在线不卡| 欧美午夜激情影院| 国产91丝袜在线观看| 欧美,日韩,国产在线| 欧美精美视频| 成人久久久久久久| wwwww亚洲| 亚洲日本aⅴ片在线观看香蕉| 一级久久久久久| 亚洲欧美日本韩国| 亚洲国产精品无码久久久久高潮| 香蕉国产精品偷在线观看不卡| 日韩国产欧美精品| 麻豆精品国产| 91成人福利在线| 视频三区在线| 亚洲国产精品va在线| 超碰在线观看91| 亚洲欧美激情视频在线观看一区二区三区 | 亚洲欧美国产精品va在线观看| 国产成人麻豆免费观看| 一卡二卡三卡日韩欧美| 欧美熟妇精品黑人巨大一二三区| 久久精品久久综合| 男人的天堂狠狠干| 日韩电影一区| 国产原创精品| 亚洲精品一区av| 97成人精品区在线播放| 免费网站看v片在线a| 日韩激情av在线播放| 一区二区的视频| 精品久久久在线观看| 操她视频在线观看| 91麻豆swag| 久久99视频精品| 精品一区2区三区| 牛牛精品在线视频| 中文国产成人精品久久一| 亚洲AV无码国产精品午夜字幕| 欧美丝袜第一区| 国产一级二级三级| 国产精品麻豆99久久久久久| 中文字幕无码人妻少妇免费| 久久99精品久久久| 国语对白做受xxxxx在线中国 | 日韩中文一区二区三区| 国产精品tv| 91最新国产视频| 激情欧美一区二区三区黑长吊| 午夜精品久久久久久久久久久久久| 亚洲搞黄视频| 亚洲午夜激情免费视频| 女人18毛片一区二区三区| 91精品午夜视频| 中文字幕自拍偷拍| 色狠狠桃花综合| 视频一区二区三区四区五区| 亚洲一区二区欧美日韩| 日本少妇高清视频| 国产精品久久久久永久免费观看| 久久久久亚洲av无码a片| 99久久综合国产精品| 特级特黄刘亦菲aaa级| 韩国女主播成人在线观看| 免费涩涩18网站入口| 美女久久网站| 国产成人精品视频免费看| 亚洲区第一页| 秋霞无码一区二区| 韩日在线一区| 欧美又粗又长又爽做受| 欧美日韩精品| 日韩欧美猛交xxxxx无码| 亚洲综合自拍| 国产亚洲精品久久久久久久| 91精品精品| 中文字幕色呦呦| 欧美.日韩.国产.一区.二区| 91社在线播放| 亚洲一区欧美| av在线播放天堂| 99精品热视频只有精品10| 成人av一级片| 免费一区视频| 国产福利视频在线播放| 日韩中文欧美在线| 国产精品久久久毛片| 久久激情五月婷婷| 不用播放器的免费av| 国产精品一二三区| 超碰caoprom| 91网上在线视频| 99久久久无码国产精品衣服| 国产欧美1区2区3区| 欧美一区二区三区观看| 亚洲欧美另类久久久精品| 久草视频在线资源站| 调教+趴+乳夹+国产+精品| 成人公开免费视频| 欧美亚洲综合网| 国产精品视频第一页| 精品国产一区二区亚洲人成毛片| 日韩在线一区二区三区四区| 亚洲性日韩精品一区二区| 午夜毛片在线| 久久久久久国产三级电影| 亚洲精品中文字幕| 国产在线精品自拍| 国产精品亚洲一区二区在线观看| 97神马电影| 国产成人ay| 欧美交换配乱吟粗大25p| 99视频精品| 亚洲精品手机在线观看| 成人高清免费观看| 久久亚洲无码视频| 一区二区在线免费观看| 在线天堂中文字幕| 7777女厕盗摄久久久| 天堂网av在线播放| 日韩有码片在线观看| 国产va在线视频| 成人a在线视频| 国产主播性色av福利精品一区| 麻豆传媒一区二区| 亚洲欧美网站在线观看| 亚洲爆乳无码专区| 狠狠色丁香久久婷婷综合丁香| 亚洲一区二区在线免费| 亚洲欧洲日韩av| 日本黄色片视频| 欧美精品成人一区二区三区四区| 五月婷婷深深爱| 欧美日韩国产成人高清视频| 成人视屏在线观看| 超碰97人人在线| 日韩av二区| 人妻有码中文字幕| 国产99久久久国产精品免费看| 超薄肉色丝袜一二三| 精品国产福利视频| www日本高清视频| www.亚洲天堂| 日韩大片欧美大片| 国产专区一区二区| 欧美激情91| 伊人色在线观看| 国产午夜亚洲精品理论片色戒| 久久久久久欧美精品se一二三四 | 亚洲精品无amm毛片| 中文字幕亚洲情99在线| 97se综合| 噜噜噜噜噜久久久久久91| 韩国自拍一区| 亚洲欧洲日韩综合| 1024成人网色www| 亚洲熟妇无码久久精品| 亚洲午夜精品视频| 91av亚洲| 欧美中日韩一区二区三区| 国产欧美成人| 污片免费在线观看| 亚洲动漫第一页| 隣の若妻さん波多野结衣| 九九热精品在线| 亚洲精品一二三**| 无码人妻精品一区二区三区99v| 另类人妖一区二区av| 精品一区二区6| 在线观看国产一区二区| 你懂的在线播放| 日本视频久久久| 黄色不卡一区| 国产主播中文字幕| 中文天堂在线一区| 亚洲系列第一页| 日韩少妇与小伙激情| 日韩综合久久| 久久久无码中文字幕久...| 国产裸体歌舞团一区二区| 国产女人18水真多毛片18精品| 在线综合+亚洲+欧美中文字幕| 菠萝菠萝蜜在线视频免费观看| 亚洲aaa激情| 一区久久精品| 国产xxxxxxxxx| 在线视频中文字幕一区二区| jizz在线观看视频| 成人欧美一区二区三区黑人孕妇| 天天做天天爱天天综合网2021| 91亚洲免费视频| 亚洲精品成人少妇| 日韩在线观看视频一区| 国产91免费看片| 国产精品毛片久久| 亚洲一级片免费观看| 午夜精品一区在线观看| 青青操视频在线| 国产精品偷伦视频免费观看国产| 五月精品视频| 成人一区二区三区仙踪林| 精品国产91乱高清在线观看| 黄色网址在线播放| 成人精品在线观看| 亚洲精品激情| 波多野结衣办公室33分钟| 欧美日韩一区 二区 三区 久久精品| 黄色动漫在线| 就去色蜜桃综合| 精品一区二区三区免费视频| 久久午夜鲁丝片午夜精品| 亚洲欧美日韩一区在线| 国产精品3区| 欧美精品色婷婷五月综合| 综合电影一区二区三区| 香港三日本三级少妇66| 国产色综合天天综合网| 伊人成人在线视频| 美国黄色特级片| 亚洲成人网在线| 久久av日韩| 人妻熟妇乱又伦精品视频| 中文字幕日韩精品一区| 午夜性色福利影院| 成人淫片在线看| 天堂一区二区在线| 欧美激情精品久久| 中文字幕欧美精品在线| 韩国女主播一区二区三区| 超碰人人草人人|