久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中ConcurrentHashMap底层实现原理(JDK1.8)源码分析2

發布時間:2024/1/18 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中ConcurrentHashMap底层实现原理(JDK1.8)源码分析2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://blog.csdn.net/programmer_at/article/details/79715177
https://blog.csdn.net/qq_41737716/category_8894817.html

空船理論

這個故事是出自莊子的《山木》中的“方舟濟河”,這是一篇極富道家哲學的寓言,一個人在乘船渡河的時候,前面一只船正要撞過來。
這個人喊了好幾聲沒有人回應,于是破口大罵前面開船的人不長眼。
結果撞上來的竟是一只空船,于是剛才怒氣沖沖的人,一下子怒火就消失得無影無蹤了。

其實你會發現,生氣與不生氣,取決撞來的船上有沒有人!
一個人“看不慣”的東西、人和事越多,這個人的境界也就越低,格局也就越小。
一個人如果總是以自我為中心,太把自己當回事,那么就很容易與別人起沖突。

前言

我們知道,在日常開發中使用的HashMap是線程不安全的,而線程安全類HashTable只是簡單的在方法上加鎖實現線程安全,效率低下,所以在線程安全的環境下我們通常會使用ConcurrentHashMap,但是又為何需要學習ConcurrentHashMap?用不就完事了?我認為學習其源碼有兩個好處:

Amdahl定律

此節定律描述均來自《Java并發編程實戰》一書

假設F是必須被串行執行的部分,N代表處理器數量,Speedup代表加速比,可以簡單理解為CPU使用率

此公式告訴我們,當N趨近無限大,加速比最大趨近于1/F,假設我們的程序有50%的部分需要串行執行,就算處理器數量無限多,最高的加速比只能是2(20%的使用率),如果程序中僅有10%的部分需要串行執行,最高的加速比可以達到9.2(92%的使用率),但我們的程序或多或少都一定會有串行執行的部分,所以F不可能為0,所以,就算有無限多的CPU,加速比也不可能達到10(100%的使用率),下面給一張圖來表示串行執行部分占比不同對利用率的影響:

由此我們可以看出,程序中的可伸縮性(提升外部資源即可提升并發性能的比率)是由程序中串行執行部分所影響的,而常見的串行執行有鎖競爭(上下文切換消耗、等待、串行)等等,這給了我們一個啟發,可以通過減少鎖競爭來優化并發性能,而ConcurrentHashMap則使用了鎖分段(減小鎖范圍)、CAS(樂觀鎖,減小上下文切換開銷,無阻塞)等等技術,下面來具體看看吧。

初始化數據結構時的線程安全

HashMap的底層數據結構這里簡單帶過一下,不做過多贅述:

大致是以一個Node對象數組來存放數據,Hash沖突時會形成Node鏈表,在鏈表長度超過8,Node數組超過64時會將鏈表結構轉換為紅黑樹,Node對象:

static class Node<K,V> implements Map.Entry<K,V> {final int hash;final K key;volatile V val;volatile Node<K,V> next;... }

值得注意的是,value和next指針使用了volatile來保證其可見性

在JDK1.8中,初始化ConcurrentHashMap的時候這個Node[]數組是還未初始化的,會等到第一次put方法調用時才初始化:

final V putVal(K key, V value, boolean onlyIfAbsent) {if (key == null || value == null) throw new NullPointerException();int hash = spread(key.hashCode());int binCount = 0;for (Node<K,V>[] tab = table;;) {Node<K,V> f; int n, i, fh;//判斷Node數組為空if (tab == null || (n = tab.length) == 0)//初始化Node數組tab = initTable();... }

此時是會有并發問題的,如果多個線程同時調用initTable初始化Node數組怎么辦?看看大師是如何處理的:

private final Node<K,V>[] initTable() {Node<K,V>[] tab; int sc;//每次循環都獲取最新的Node數組引用while ((tab = table) == null || tab.length == 0) {//sizeCtl是一個標記位,若為-1也就是小于0,代表有線程在進行初始化工作了if ((sc = sizeCtl) < 0)//讓出CPU時間片Thread.yield(); // lost initialization race; just spin//CAS操作,將本實例的sizeCtl變量設置為-1else if (U.compareAndSwapInt(this, SIZECTL, sc, -1)) {//如果CAS操作成功了,代表本線程將負責初始化工作try {//再檢查一遍數組是否為空if ((tab = table) == null || tab.length == 0) {//在初始化Map時,sizeCtl代表數組大小,默認16//所以此時n默認為16int n = (sc > 0) ? sc : DEFAULT_CAPACITY;@SuppressWarnings("unchecked")//Node數組Node<K,V>[] nt = (Node<K,V>[])new Node<?,?>[n];//將其賦值給table變量table = tab = nt;//通過位運算,n減去n二進制右移2位,相當于乘以0.75//例如16經過運算為12,與乘0.75一樣,只不過位運算更快sc = n - (n >>> 2);}} finally {//將計算后的sc(12)直接賦值給sizeCtl,表示達到12長度就擴容//由于這里只會有一個線程在執行,直接賦值即可,沒有線程安全問題//只需要保證可見性sizeCtl = sc;}break;}}return tab; }

table變量使用了volatile來保證每次獲取到的都是最新寫入的值

transient volatile Node<K,V>[] table;

總結

就算有多個線程同時進行put操作,在初始化數組時使用了樂觀鎖CAS操作來決定到底是哪個線程有資格進行初始化,其他線程均只能等待。

用到的并發技巧:

  • volatile變量(sizeCtl):它是一個標記位,用來告訴其他線程這個坑位有沒有人在,其線程間的可見性由volatile保證。
  • CAS操作:CAS操作保證了設置sizeCtl標記位的原子性,保證了只有一個線程能設置成功。

put操作的線程安全

final V putVal(K key, V value, boolean onlyIfAbsent) {if (key == null || value == null) throw new NullPointerException();//對key的hashCode進行散列int hash = spread(key.hashCode());int binCount = 0;//一個無限循環,直到put操作完成后退出循環for (Node<K,V>[] tab = table;;) {Node<K,V> f; int n, i, fh;//當Node數組為空時進行初始化if (tab == null || (n = tab.length) == 0)tab = initTable();//Unsafe類volatile的方式取出hashCode散列后通過與運算得出的Node數組下標值對應的Node對象//此時的Node對象若為空,則代表還未有線程對此Node進行插入操作else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {//直接CAS方式插入數據if (casTabAt(tab, i, null,new Node<K,V>(hash, key, value, null)))//插入成功,退出循環break; // no lock when adding to empty bin}//查看是否在擴容,先不看,擴容再介紹else if ((fh = f.hash) == MOVED)//幫助擴容tab = helpTransfer(tab, f);else {V oldVal = null;//對Node對象進行加鎖synchronized (f) {//二次確認此Node對象還是原來的那一個if (tabAt(tab, i) == f) {if (fh >= 0) {binCount = 1;//無限循環,直到完成putfor (Node<K,V> e = f;; ++binCount) {K ek;//和HashMap一樣,先比較hash,再比較equalsif (e.hash == hash &&((ek = e.key) == key ||(ek != null && key.equals(ek)))) {oldVal = e.val;if (!onlyIfAbsent)e.val = value;break;}Node<K,V> pred = e;if ((e = e.next) == null) {//和鏈表頭Node節點不沖突,就將其初始化為新Node作為上一個Node節點的next//形成鏈表結構pred.next = new Node<K,V>(hash, key,value, null);break;}}}... }

值得關注的是tabAt(tab, i)方法,其使用Unsafe類volatile的操作volatile式地查看值,保證每次獲取到的值都是最新的:

static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) {return (Node<K,V>)U.getObjectVolatile(tab, ((long)i << ASHIFT) + ABASE); }

雖然上面的table變量加了volatile,但也只能保證其引用的可見性,并不能確保其數組中的對象是否是最新的,所以需要Unsafe類volatile式地拿到最新的Node

總結


由于其減小了鎖的粒度,若Hash完美不沖突的情況下,可同時支持n個線程同時put操作,n為Node數組大小,在默認大小16下,可以支持最大同時16個線程無競爭同時操作且線程安全。當hash沖突嚴重時,Node鏈表越來越長,將導致嚴重的鎖競爭,此時會進行擴容,將Node進行再散列,下面會介紹擴容的線程安全性。總結一下用到的并發技巧:

  • 減小鎖粒度:將Node鏈表的頭節點作為鎖,若在默認大小16情況下,將有16把鎖,大大減小了鎖競爭(上下文切換),就像開頭所說,將串行的部分最大化縮小,在理想情況下線程的put操作都為并行操作。同時直接鎖住頭節點,保證了線程安全。
  • Unsafe的getObjectVolatile方法:此方法確保獲取到的值為最新
  • 擴容操作的線程安全

    在擴容時,ConcurrentHashMap支持多線程并發擴容,在擴容過程中同時支持get查數據,若有線程put數據,還會幫助一起擴容,這種無阻塞算法,將并行最大化的設計,堪稱一絕。

    先來看看擴容代碼實現:

    private final void transfer(Node<K,V>[] tab, Node<K,V>[] nextTab) {int n = tab.length, stride;//根據機器CPU核心數來計算,一條線程負責Node數組中多長的遷移量if ((stride = (NCPU > 1) ? (n >>> 3) / NCPU : n) < MIN_TRANSFER_STRIDE)//本線程分到的遷移量//假設為16(默認也為16)stride = MIN_TRANSFER_STRIDE; // subdivide range//nextTab若為空代表線程是第一個進行遷移的//初始化遷移后的新Node數組if (nextTab == null) { // initiatingtry {@SuppressWarnings("unchecked")//這里n為舊數組長度,左移一位相當于乘以2//例如原數組長度16,新數組長度則為32Node<K,V>[] nt = (Node<K,V>[])new Node<?,?>[n << 1];nextTab = nt;} catch (Throwable ex) { // try to cope with OOMEsizeCtl = Integer.MAX_VALUE;return;}//設置nextTable變量為新數組nextTable = nextTab;//假設為16transferIndex = n;}//假設為32int nextn = nextTab.length;//標示Node對象,此對象的hash變量為-1//在get或者put時若遇到此Node,則可以知道當前Node正在遷移//傳入nextTab對象ForwardingNode<K,V> fwd = new ForwardingNode<K,V>(nextTab);boolean advance = true;boolean finishing = false; // to ensure sweep before committing nextTabfor (int i = 0, bound = 0;;) {Node<K,V> f; int fh;while (advance) {int nextIndex, nextBound;//i為當前正在處理的Node數組下標,每次處理一個Node節點就會自減1if (--i >= bound || finishing)advance = false;//假設nextIndex=16else if ((nextIndex = transferIndex) <= 0) {i = -1;advance = false;}//由以上假設,nextBound就為0//且將nextIndex設置為0else if (U.compareAndSwapInt(this, TRANSFERINDEX, nextIndex,nextBound = (nextIndex > stride ?nextIndex - stride : 0))) {//bound=0bound = nextBound;//i=16-1=15i = nextIndex - 1;advance = false;}}if (i < 0 || i >= n || i + n >= nextn) {int sc;if (finishing) {nextTable = null;table = nextTab;sizeCtl = (n << 1) - (n >>> 1);return;}if (U.compareAndSwapInt(this, SIZECTL, sc = sizeCtl, sc - 1)) {if ((sc - 2) != resizeStamp(n) << RESIZE_STAMP_SHIFT)return;finishing = advance = true;i = n; // recheck before commit}}//此時i=15,取出Node數組下標為15的那個Node,若為空則不需要遷移//直接設置占位標示,代表此Node已處理完成else if ((f = tabAt(tab, i)) == null)advance = casTabAt(tab, i, null, fwd);//檢測此Node的hash是否為MOVED,MOVED是一個常量-1,也就是上面說的占位Node的hash//如果是占位Node,證明此節點已經處理過了,跳過i=15的處理,繼續循環else if ((fh = f.hash) == MOVED)advance = true; // already processedelse {//鎖住這個Nodesynchronized (f) {//確認Node是原先的Nodeif (tabAt(tab, i) == f) {//ln為lowNode,低位Node,hn為highNode,高位Node//這兩個概念下面以圖來說明Node<K,V> ln, hn;if (fh >= 0) {//此時fh與原來Node數組長度進行與運算//如果高X位為0,此時runBit=0//如果高X位為1,此時runBit=1int runBit = fh & n;Node<K,V> lastRun = f;for (Node<K,V> p = f.next; p != null; p = p.next) {//這里的Node,都是同一Node鏈表中的Node對象int b = p.hash & n;if (b != runBit) {runBit = b;lastRun = p;}}//正如上面所說,runBit=0,表示此Node為低位Nodeif (runBit == 0) {ln = lastRun;hn = null;}else {//Node為高位Nodehn = lastRun;ln = null;}for (Node<K,V> p = f; p != lastRun; p = p.next) {int ph = p.hash; K pk = p.key; V pv = p.val;//若hash和n與運算為0,證明為低位Node,原理同上if ((ph & n) == 0)ln = new Node<K,V>(ph, pk, pv, ln);//這里將高位Node與地位Node都各自組成了兩個鏈表elsehn = new Node<K,V>(ph, pk, pv, hn);}//將低位Node設置到新Node數組中,下標為原來的位置setTabAt(nextTab, i, ln);//將高位Node設置到新Node數組中,下標為原來的位置加上原Node數組長度setTabAt(nextTab, i + n, hn);//將此Node設置為占位Node,代表處理完成setTabAt(tab, i, fwd);//繼續循環advance = true;}....}}}} }

    這里說一下遷移時為什么要分一個ln(低位Node)、hn(高位Node),首先說一個現象:

    我們知道,在put值的時候,首先會計算hash值,再散列到指定的Node數組下標中:

    //根據key的hashCode再散列 int hash = spread(key.hashCode()); //使用(n - 1) & hash 運算,定位Node數組中下標值 (f = tabAt(tab, i = (n - 1) & hash);

    其中n為Node數組長度,這里假設為16。

    假設有一個key進來,它的散列之后的hash=9,那么它的下標值是多少呢?

    (16 - 1)和 9 進行與運算 -> 0000 1111 和 0000 1001 結果還是 0000 1001 = 9

    假設Node數組需要擴容,我們知道,擴容是將數組長度增加兩倍,也就是32,那么下標值會是多少呢?

    (32 - 1)和 9 進行與運算 -> 0001 1111 和 0000 1001 結果還是9

    此時,我們把散列之后的hash換成20,那么會有怎樣的變化呢?

    (16 - 1)和 20 進行與運算 -> 0000 1111 和 0001 0100 結果是 0000 0100 = 4 (32 - 1)和 20 進行與運算 -> 0001 1111 和 0001 0100 結果是 0001 0100 = 20

    此時細心的讀者應該可以發現,如果hash在高X位為1,(X為數組長度的二進制-1的最高位),則擴容時是需要變換在Node數組中的索引值的,不然就hash不到,丟失數據,所以這里在遷移的時候將高X位為1的Node分類為hn,將高X位為0的Node分類為ln。

    回到代碼中:

    for (Node<K,V> p = f; p != lastRun; p = p.next) {int ph = p.hash; K pk = p.key; V pv = p.val;if ((ph & n) == 0)ln = new Node<K,V>(ph, pk, pv, ln);elsehn = new Node<K,V>(ph, pk, pv, hn); }

    這個操作將高低位組成了兩條鏈表結構,由下圖所示:

    然后將其CAS操作放入新的Node數組中:

    setTabAt(nextTab, i, ln); setTabAt(nextTab, i + n, hn);

    其中,低位鏈表放入原下標處,而高位鏈表則需要加上原Node數組長度,其中為什么不多贅述,上面已經舉例說明了,這樣就可以保證高位Node在遷移到新Node數組中依然可以使用hash算法散列到對應下標的數組中去了。

    最后將原Node數組中對應下標Node對象設置為fwd標記Node,表示該節點遷移完成,到這里,一個節點的遷移就完成了,將進行下一個節點的遷移,也就是i-1=14下標的Node節點。

    擴容時的get操作

    假設Node下標為16的Node節點正在遷移,突然有一個線程進來調用get方法,正好key又散列到下標為16的節點,此時怎么辦?

    public V get(Object key) {Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;int h = spread(key.hashCode());if ((tab = table) != null && (n = tab.length) > 0 &&(e = tabAt(tab, (n - 1) & h)) != null) {if ((eh = e.hash) == h) {if ((ek = e.key) == key || (ek != null && key.equals(ek)))return e.val;}//假如Node節點的hash值小于0//則有可能是fwd節點else if (eh < 0)//調用節點對象的find方法查找值return (p = e.find(h, key)) != null ? p.val : null;while ((e = e.next) != null) {if (e.hash == h &&((ek = e.key) == key || (ek != null && key.equals(ek))))return e.val;}}return null; }

    重點看有注釋的那兩行,在get操作的源碼中,會判斷Node中的hash是否小于0,是否還記得我們的占位Node,其hash為MOVED,為常量值-1,所以此時判斷線程正在遷移,委托給fwd占位Node去查找值:

    //內部類 ForwardingNode中 Node<K,V> find(int h, Object k) {// loop to avoid arbitrarily deep recursion on forwarding nodes// 這里的查找,是去新Node數組中查找的// 下面的查找過程與HashMap查找無異,不多贅述outer: for (Node<K,V>[] tab = nextTable;;) {Node<K,V> e; int n;if (k == null || tab == null || (n = tab.length) == 0 ||(e = tabAt(tab, (n - 1) & h)) == null)return null;for (;;) {int eh; K ek;if ((eh = e.hash) == h &&((ek = e.key) == k || (ek != null && k.equals(ek))))return e;if (eh < 0) {if (e instanceof ForwardingNode) {tab = ((ForwardingNode<K,V>)e).nextTable;continue outer;}elsereturn e.find(h, k);}if ((e = e.next) == null)return null;}} }

    到這里應該可以恍然大悟了,之所以占位Node需要保存新Node數組的引用也是因為這個,它可以支持在遷移的過程中照樣不阻塞地查找值,可謂是精妙絕倫的設計。

    多線程協助擴容

    在put操作時,假設正在遷移,正好有一個線程進來,想要put值到遷移的Node上,怎么辦?

    final V putVal(K key, V value, boolean onlyIfAbsent) {if (key == null || value == null) throw new NullPointerException();int hash = spread(key.hashCode());int binCount = 0;for (Node<K,V>[] tab = table;;) {Node<K,V> f; int n, i, fh;if (tab == null || (n = tab.length) == 0)tab = initTable();else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {if (casTabAt(tab, i, null,new Node<K,V>(hash, key, value, null)))break; // no lock when adding to empty bin}//若此時發現了占位Node,證明此時HashMap正在遷移else if ((fh = f.hash) == MOVED)//進行協助遷移tab = helpTransfer(tab, f);... } final Node<K,V>[] helpTransfer(Node<K,V>[] tab, Node<K,V> f) {Node<K,V>[] nextTab; int sc;if (tab != null && (f instanceof ForwardingNode) &&(nextTab = ((ForwardingNode<K,V>)f).nextTable) != null) {int rs = resizeStamp(tab.length);while (nextTab == nextTable && table == tab &&(sc = sizeCtl) < 0) {if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||sc == rs + MAX_RESIZERS || transferIndex <= 0)break;//sizeCtl加一,標示多一個線程進來協助擴容if (U.compareAndSwapInt(this, SIZECTL, sc, sc + 1)) {//擴容transfer(tab, nextTab);break;}}return nextTab;}return table; }

    此方法涉及大量復雜的位運算,這里不多贅述,只是簡單的說幾句,此時sizeCtl變量用來標示HashMap正在擴容,當其準備擴容時,會將sizeCtl設置為一個負數,(例如數組長度為16時)其二進制表示為:

    1000 0000 0001 1011 0000 0000 0000 0010

    無符號位為1,表示負數。其中高16位代表數組長度的一個位算法標示(有點像epoch的作用,表示當前遷移朝代為數組長度X),低16位表示有幾個線程正在做遷移,剛開始為2,接下來自增1,線程遷移完會進行減1操作,也就是如果低十六位為2,代表有一個線程正在遷移,如果為3,代表2個線程正在遷移以此類推…

    只要數組長度足夠長,就可以同時容納足夠多的線程來一起擴容,最大化并行任務,提高性能。

    在什么情況下會進行擴容操作?

    • 在put值時,發現Node為占位Node(fwd)時,會協助擴容
    • 在新增節點后,檢測到鏈表長度大于8時

    treeifyBin方法會將鏈表轉換為紅黑樹,增加查找效率,但在這之前,會檢查數組長度,若小于64,則會優先做擴容操作:

    private final void treeifyBin(Node<K,V>[] tab, int index) {Node<K,V> b; int n, sc;if (tab != null) {//MIN_TREEIFY_CAPACITY=64//若數組長度小于64,則先擴容if ((n = tab.length) < MIN_TREEIFY_CAPACITY)//擴容tryPresize(n << 1);else if ((b = tabAt(tab, index)) != null && b.hash >= 0) {synchronized (b) {//...轉換為紅黑樹的操作}}} }

    在每次新增節點之后,都會調用addCount方法,檢測Node數組大小是否達到閾值:

    final V putVal(K key, V value, boolean onlyIfAbsent) {...//在下面一節會講到,此方法統計容器元素數量addCount(1L, binCount);return null; } private final void addCount(long x, int check) {CounterCell[] as; long b, s;if ((as = counterCells) != null ||!U.compareAndSwapLong(this, BASECOUNT, b = baseCount, s = b + x)) {//統計元素個數的操作...}if (check >= 0) {Node<K,V>[] tab, nt; int n, sc;//元素個數達到閾值,進行擴容while (s >= (long)(sc = sizeCtl) && (tab = table) != null &&(n = tab.length) < MAXIMUM_CAPACITY) {int rs = resizeStamp(n);//發現sizeCtl為負數,證明有線程正在遷移if (sc < 0) {if ((sc >>> RESIZE_STAMP_SHIFT) != rs || sc == rs + 1 ||sc == rs + MAX_RESIZERS || (nt = nextTable) == null ||transferIndex <= 0)break;if (U.compareAndSwapInt(this, SIZECTL, sc, sc + 1))transfer(tab, nt);}//不為負數,則為第一個遷移的線程else if (U.compareAndSwapInt(this, SIZECTL, sc,(rs << RESIZE_STAMP_SHIFT) + 2))transfer(tab, null);s = sumCount();}} }

    總結

    ConcurrentHashMap運用各類CAS操作,將擴容操作的并發性能實現最大化,在擴容過程中,就算有線程調用get查詢方法,也可以安全的查詢數據,若有線程進行put操作,還會協助擴容,利用sizeCtl標記位和各種volatile變量進行CAS操作達到多線程之間的通信、協助,在遷移過程中只鎖一個Node節點,即保證了線程安全,又提高了并發性能。

    統計容器大小的線程安全

    ConcurrentHashMap在每次put操作之后都會調用addCount方法,此方法用于統計容器大小且檢測容器大小是否達到閾值,若達到閾值需要進行擴容操作,這在上面也是有提到的。這一節重點討論容器大小的統計是如何做到線程安全且并發性能不低的。

    大部分的單機數據查詢優化方案都會降低并發性能,就像緩存的存儲,在多線程環境下將有并發問題,所以會產生并行或者一系列并發沖突鎖競爭的問題,降低了并發性能。類似的,熱點數據也有這樣的問題,在多線程并發的過程中,熱點數據(頻繁被訪問的變量)是在每一個線程中幾乎或多或少都會訪問到的數據,這將增加程序中的串行部分,回憶一下開頭所描述的,程序中的串行部分將影響并發的可伸縮性,使并發性能下降,這通常會成為并發程序性能的瓶頸。而在ConcurrentHashMap中,如何快速的統計容器大小更是一個很重要的議題,因為容器內部需要依靠容器大小來考慮是否需要擴容,而在客戶端而言需要調用此方法來知道容器有多少個元素,如果處理不好這種熱點數據,并發性能將因為這個短板整體性能下降。

    試想一下,如果是你,你會如何設計這種熱點數據?是加鎖,還是進行CAS操作?進入ConcurrentHashMap中,看看大師是如何巧妙的運用了并發技巧,提高熱點數據的并發性能。

    先用圖的方式來看看大致的實現思路:

    @sun.misc.Contended static final class CounterCell {volatile long value;CounterCell(long x) { value = x; } }

    這是一個粗略的實現,在設計中,使用了分而治之的思想,將每一個計數都分散到各個countCell對象里面(下面稱之為桶),使競爭最小化,又使用了CAS操作,就算有競爭,也可以對失敗了的線程進行其他的處理。樂觀鎖的實現方式與悲觀鎖不同之處就在于樂觀鎖可以對競爭失敗了的線程進行其他策略的處理,而悲觀鎖只能等待鎖釋放,所以這里使用CAS操作對競爭失敗的線程做了其他處理,很巧妙的運用了CAS樂觀鎖。

    下面看看具體的代碼實現吧:

    //計數,并檢查長度是否達到閾值 private final void addCount(long x, int check) {//計數桶CounterCell[] as; long b, s;//如果counterCells不為null,則代表已經初始化了,直接進入if語句塊//若競爭不嚴重,counterCells有可能還未初始化,為null,先嘗試CAS操作遞增baseCount值if ((as = counterCells) != null ||!U.compareAndSwapLong(this, BASECOUNT, b = baseCount, s = b + x)) {//進入此語句塊有兩種可能//1.counterCells被初始化完成了,不為null//2.CAS操作遞增baseCount值失敗了,說明有競爭CounterCell a; long v; int m;//標志是否存在競爭boolean uncontended = true;//1.先判斷計數桶是否還沒初始化,則as=null,進入語句塊//2.判斷計數桶長度是否為空或,若是進入語句塊//3.這里做了一個線程變量隨機數,與上桶大小-1,若桶的這個位置為空,進入語句塊//4.到這里說明桶已經初始化了,且隨機的這個位置不為空,嘗試CAS操作使桶加1,失敗進入語句塊if (as == null || (m = as.length - 1) < 0 ||(a = as[ThreadLocalRandom.getProbe() & m]) == null ||!(uncontended =U.compareAndSwapLong(a, CELLVALUE, v = a.value, v + x))) {fullAddCount(x, uncontended);return;}if (check <= 1)return;//統計容器大小s = sumCount();}... }

    假設當前線程為第一個put的線程

    先假設當前Map還未被put數據,則addCount一定沒有被調用過,當前線程第一個調用addCount方法,則此時countCell一定沒有被初始化,為null,則進行如下判斷:

    if ((as = counterCells) != null ||!U.compareAndSwapLong(this, BASECOUNT, b = baseCount, s = b + x))

    這里的if判斷一定會走第二個判斷,先CAS增加變量baseCount的值:

    private transient volatile long baseCount;

    這個值有什么用呢?我們看看統計容器大小的方法sumCount:

    final long sumCount() {//獲取計數桶CounterCell[] as = counterCells; CounterCell a;//獲取baseCount,賦值給sum總數long sum = baseCount;//若計數桶不為空,統計計數桶內的值if (as != null) {for (int i = 0; i < as.length; ++i) {//遍歷計數桶,將value值相加if ((a = as[i]) != null)sum += a.value;}}return sum; }

    這個方法的大體思路與我們開頭那張圖差不多,容器的大小其實是分為兩部分,開頭只說了計數桶的那部分,其實還有一個baseCount,在線程沒有競爭的情況下的統計值,換句話說,在增加容量的時候其實是先去做CAS遞增baseCount的。

    由此可見,統計容器大小其實是用了兩種思路:

  • CAS方式直接遞增:在線程競爭不大的時候,直接使用CAS操作遞增baseCount值即可,這里說的競爭不大指的是CAS操作不會失敗的情況
  • 分而治之桶計數:若出現了CAS操作失敗的情況,則證明此時有線程競爭了,計數方式從CAS方式轉變為分而治之的桶計數方式
  • 出現了線程競爭導致CAS失敗

    此時出現了競爭,則不會再用CAS方式來計數了,直接使用桶方式,從上面的addCount方法可以看出來,此時的countCell是為空的,最終一定會進入fullAddCount方法來進行初始化桶:

    private final void fullAddCount(long x, boolean wasUncontended) {int h;if ((h = ThreadLocalRandom.getProbe()) == 0) {ThreadLocalRandom.localInit(); // force initializationh = ThreadLocalRandom.getProbe();wasUncontended = true;}boolean collide = false; // True if last slot nonemptyfor (;;) {CounterCell[] as; CounterCell a; int n; long v;...//如果計數桶!=null,證明已經初始化,此時不走此語句塊if ((as = counterCells) != null && (n = as.length) > 0) {...}//進入此語句塊進行計數桶的初始化//CAS設置cellsBusy=1,表示現在計數桶Busy中...else if (cellsBusy == 0 && counterCells == as &&U.compareAndSwapInt(this, CELLSBUSY, 0, 1)) {//若有線程同時初始化計數桶,由于CAS操作只有一個線程進入這里boolean init = false;try { // Initialize table//再次確認計數桶為空if (counterCells == as) {//初始化一個長度為2的計數桶CounterCell[] rs = new CounterCell[2];//h為一個隨機數,與上1則代表結果為0、1中隨機的一個//也就是在0、1下標中隨便選一個計數桶,x=1,放入1的值代表增加1個容量rs[h & 1] = new CounterCell(x);//將初始化好的計數桶賦值給ConcurrentHashMapcounterCells = rs;init = true;}} finally {//最后將busy標識設置為0,表示不busy了cellsBusy = 0;}if (init)break;}//若有線程同時來初始化計數桶,則沒有搶到busy資格的線程就先來CAS遞增baseCountelse if (U.compareAndSwapLong(this, BASECOUNT, v = baseCount, v + x))break; // Fall back on using base}}

    到這里就完成了計數桶的初始化工作,在之后的計數都將會使用計數桶方式來統計總數

    計數桶擴容

    從上面的分析中我們知道,計數桶初始化之后長度為2,在競爭大的時候肯定是不夠用的,所以一定有計數桶的擴容操作,所以現在就有兩個問題了:

  • 什么條件下會進行計數桶的擴容?
  • 擴容操作是怎么樣的?
  • 假設此時是用計數桶方式進行計數:

    private final void addCount(long x, int check) {CounterCell[] as; long b, s;if ((as = counterCells) != null ||!U.compareAndSwapLong(this, BASECOUNT, b = baseCount, s = b + x)) {CounterCell a; long v; int m;boolean uncontended = true;//此時顯然會在計數桶數組中隨機選一個計數桶//然后使用CAS操作將此計數桶中的value+1if (as == null || (m = as.length - 1) < 0 ||(a = as[ThreadLocalRandom.getProbe() & m]) == null ||!(uncontended =U.compareAndSwapLong(a, CELLVALUE, v = a.value, v + x))) {//若CAS操作失敗,證明有競爭,進入fullAddCount方法fullAddCount(x, uncontended);return;}if (check <= 1)return;s = sumCount();}... }

    進入fullAddCount方法:

    private final void fullAddCount(long x, boolean wasUncontended) {int h;if ((h = ThreadLocalRandom.getProbe()) == 0) {ThreadLocalRandom.localInit(); // force initializationh = ThreadLocalRandom.getProbe();wasUncontended = true;}boolean collide = false; // True if last slot nonemptyfor (;;) {CounterCell[] as; CounterCell a; int n; long v;//計數桶初始化好了,一定是走這個if語句塊if ((as = counterCells) != null && (n = as.length) > 0) {//從計數桶數組隨機選一個計數桶,若為null表示該桶位還沒線程遞增過if ((a = as[(n - 1) & h]) == null) {//查看計數桶busy狀態是否被標識if (cellsBusy == 0) { // Try to attach new Cell//若不busy,直接new一個計數桶CounterCell r = new CounterCell(x); // Optimistic create//CAS操作,標示計數桶busy中if (cellsBusy == 0 &&U.compareAndSwapInt(this, CELLSBUSY, 0, 1)) {boolean created = false;try { // Recheck under lockCounterCell[] rs; int m, j;//在鎖下再檢查一次計數桶為nullif ((rs = counterCells) != null &&(m = rs.length) > 0 &&rs[j = (m - 1) & h] == null) {//將剛剛創建的計數桶賦值給對應位置rs[j] = r;created = true;}} finally {//標示不busy了cellsBusy = 0;}if (created)break;continue; // Slot is now non-empty}}collide = false;}else if (!wasUncontended) // CAS already known to failwasUncontended = true; // Continue after rehash//走到這里代表計數桶不為null,嘗試遞增計數桶else if (U.compareAndSwapLong(a, CELLVALUE, v = a.value, v + x))break;else if (counterCells != as || n >= NCPU)collide = false; // At max size or stale//若CAS操作失敗了,到了這里,會先進入一次,然后再走一次剛剛的for循環//若是第二次for循環,collide=true,則不會走進去else if (!collide)collide = true;//計數桶擴容,一個線程若走了兩次for循環,也就是進行了多次CAS操作遞增計數桶失敗了//則進行計數桶擴容,CAS標示計數桶busy中else if (cellsBusy == 0 &&U.compareAndSwapInt(this, CELLSBUSY, 0, 1)) {try {//確認計數桶還是同一個if (counterCells == as) {// Expand table unless stale//將長度擴大到2倍CounterCell[] rs = new CounterCell[n << 1];//遍歷舊計數桶,將引用直接搬過來for (int i = 0; i < n; ++i)rs[i] = as[i];//賦值counterCells = rs;}} finally {//取消busy狀態cellsBusy = 0;}collide = false;continue; // Retry with expanded table}h = ThreadLocalRandom.advanceProbe(h);}else if (cellsBusy == 0 && counterCells == as &&U.compareAndSwapInt(this, CELLSBUSY, 0, 1)) {//初始化計數桶...}else if (U.compareAndSwapLong(this, BASECOUNT, v = baseCount, v + x))break; // Fall back on using base} }

    看到這里,想必已經可以解決上面兩個問題了:

  • 什么條件下會進行計數桶的擴容?
    答:在CAS操作遞增計數桶失敗了3次之后,會進行擴容計數桶操作,注意此時同時進行了兩次隨機定位計數桶來進行CAS遞增的,所以此時可以保證大概率是因為計數桶不夠用了,才會進行計數桶擴容
  • 擴容操作是怎么樣的?
    答:計數桶長度增加到兩倍長度,數據直接遍歷遷移過來,由于計數桶不像HashMap數據結構那么復雜,有hash算法的影響,加上計數桶只是存放一個long類型的計數值而已,所以直接賦值引用即可。
  • 總結

    個人感覺,統計容器大小的線程安全與擴容ConcurrentHashMap這兩個算得上ConcurrentHashMap中最聰明的兩個并發設計了,閱讀此源碼的我看到這兩個操作的設計,都忍不住拍手叫絕,我想,這或許也是一個看源碼的樂趣吧,站在巨人的肩膀看巨人的思想。

    總結一下計數中用到的并發技巧:

  • 利用CAS遞增baseCount值來感知是否存在線程競爭,若競爭不大直接CAS遞增baseCount值即可,性能與直接baseCount++差別不大
  • 若存在線程競爭,則初始化計數桶,若此時初始化計數桶的過程中也存在競爭,多個線程同時初始化計數桶,則沒有搶到初始化資格的線程直接嘗試CAS遞增baseCount值的方式完成計數,最大化利用了線程的并行。此時使用計數桶計數,分而治之的方式來計數,此時兩個計數桶最大可提供兩個線程同時計數,同時使用CAS操作來感知線程競爭,若兩個桶情況下CAS操作還是頻繁失敗(失敗3次),則直接擴容計數桶,變為4個計數桶,支持最大同時4個線程并發計數,以此類推…同時使用位運算和隨機數的方式"負載均衡"一樣的將線程計數請求接近均勻的落在各個計數桶中。
  • get操作的線程安全

    對于get操作,其實沒有線程安全的問題,只有可見性的問題,只需要確保get的數據是線程之間可見的即可:

    public V get(Object key) {Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;int h = spread(key.hashCode());//此過程與HashMap的get操作無異,不多贅述if ((tab = table) != null && (n = tab.length) > 0 &&(e = tabAt(tab, (n - 1) & h)) != null) {if ((eh = e.hash) == h) {if ((ek = e.key) == key || (ek != null && key.equals(ek)))return e.val;}//當hash<0,有可能是在遷移,使用fwd占位Node去查找新table中的數據else if (eh < 0)return (p = e.find(h, key)) != null ? p.val : null;while ((e = e.next) != null) {if (e.hash == h &&((ek = e.key) == key || (ek != null && key.equals(ek))))return e.val;}}return null; }

    在get操作中除了增加了遷移的判斷以外,基本與HashMap的get操作無異,這里不多贅述,值得一提的是這里使用了tabAt方法Unsafe類volatile的方式去獲取Node數組中的Node,保證獲得到的Node是最新的

    static final <K,V> Node<K,V> tabAt(Node<K,V>[] tab, int i) {return (Node<K,V>)U.getObjectVolatile(tab, ((long)i << ASHIFT) + ABASE); }

    JDK1.7與1.8的不同實現

    JDK1.7的ConcurrentHashMap底層數據結構:

    其中1.7的實現也同樣采用了分段鎖的技術,只不過多個一個segment,一個segment里對應一個小HashMap,其中segment繼承了ReentrantLock,充當了鎖的角色,一把鎖鎖一個小HashMap(相當于多個Node),從1.8的實現來看, 鎖的粒度從多個Node級別又減小到一個Node級別,再度減小鎖競爭,減小程序同步的部分。

    總結

    不得不說,大師將CAS操作運用的淋漓盡致,相信理解了以上源碼的讀者也可以學習到大師所運用的并發技巧,不僅僅是在ConcurrentHashMap中,其實在大部分JUC的源碼中很多并發思想很值得我們去閱讀、學習。

    源碼分析

    構造函數

    public ConcurrentHashMap() {}public ConcurrentHashMap(int initialCapacity) {if (initialCapacity < 0)throw new IllegalArgumentException();int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?MAXIMUM_CAPACITY :tableSizeFor(initialCapacity + (initialCapacity >>> 1) + 1));this.sizeCtl = cap;}public ConcurrentHashMap(Map<? extends K, ? extends V> m) {this.sizeCtl = DEFAULT_CAPACITY;putAll(m);}public ConcurrentHashMap(int initialCapacity, float loadFactor) {this(initialCapacity, loadFactor, 1);}public ConcurrentHashMap(int initialCapacity,float loadFactor, int concurrencyLevel) {if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0)throw new IllegalArgumentException();if (initialCapacity < concurrencyLevel) // Use at least as many binsinitialCapacity = concurrencyLevel; // as estimated threadslong size = (long)(1.0 + (long)initialCapacity / loadFactor);int cap = (size >= (long)MAXIMUM_CAPACITY) ?MAXIMUM_CAPACITY : tableSizeFor((int)size);this.sizeCtl = cap;}

    靜態變量

    private static final int MAXIMUM_CAPACITY = 1 << 30;private static final int DEFAULT_CAPACITY = 16;static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;private static final int DEFAULT_CONCURRENCY_LEVEL = 16;private static final float LOAD_FACTOR = 0.75f;static final int TREEIFY_THRESHOLD = 8;static final int UNTREEIFY_THRESHOLD = 6;static final int MIN_TREEIFY_CAPACITY = 64;private static final int MIN_TRANSFER_STRIDE = 16;private static int RESIZE_STAMP_BITS = 16;private static final int MAX_RESIZERS = (1 << (32 - RESIZE_STAMP_BITS)) - 1;private static final int RESIZE_STAMP_SHIFT = 32 - RESIZE_STAMP_BITS;static final int MOVED = -1; // hash for forwarding nodesstatic final int TREEBIN = -2; // hash for roots of treesstatic final int RESERVED = -3; // hash for transient reservations

    成員變量

    /*** The array of bins. Lazily initialized upon first insertion.* Size is always a power of two. Accessed directly by iterators.*/transient volatile Node<K,V>[] table;/*** The next table to use; non-null only while resizing.*/private transient volatile Node<K,V>[] nextTable;/*** Base counter value, used mainly when there is no contention,* but also as a fallback during table initialization* races. Updated via CAS.*/private transient volatile long baseCount;/*** Table initialization and resizing control. When negative, the* table is being initialized or resized: -1 for initialization,* else -(1 + the number of active resizing threads). Otherwise,* when table is null, holds the initial table size to use upon* creation, or 0 for default. After initialization, holds the* next element count value upon which to resize the table.*/private transient volatile int sizeCtl;/*** The next table index (plus one) to split while resizing.*/private transient volatile int transferIndex;/*** Spinlock (locked via CAS) used when resizing and/or creating CounterCells.*/private transient volatile int cellsBusy;/*** Table of counter cells. When non-null, size is a power of 2.*/private transient volatile CounterCell[] counterCells;// viewsprivate transient KeySetView<K,V> keySet;private transient ValuesView<K,V> values;private transient EntrySetView<K,V> entrySet;

    方法

    public V put(K key, V value) {return putVal(key, value, false);}/** Implementation for put and putIfAbsent */final V putVal(K key, V value, boolean onlyIfAbsent) {if (key == null || value == null)throw new NullPointerException();int hash = spread(key.hashCode());int binCount = 0;for (Node<K, V>[] tab = table;;) {Node<K, V> f;int n, i, fh;if (tab == null || (n = tab.length) == 0)tab = initTable();else if ((f = tabAt(tab, i = (n - 1) & hash)) == null) {if (casTabAt(tab, i, null, new Node<K, V>(hash, key, value, null)))break; // no lock when adding to empty bin} else if ((fh = f.hash) == MOVED)tab = helpTransfer(tab, f);else {V oldVal = null;synchronized (f) {if (tabAt(tab, i) == f) {if (fh >= 0) {binCount = 1;for (Node<K, V> e = f;; ++binCount) {K ek;if (e.hash == hash && ((ek = e.key) == key || (ek != null && key.equals(ek)))) {oldVal = e.val;if (!onlyIfAbsent)e.val = value;break;}Node<K, V> pred = e;if ((e = e.next) == null) {pred.next = new Node<K, V>(hash, key, value, null);break;}}} else if (f instanceof TreeBin) {Node<K, V> p;binCount = 2;if ((p = ((TreeBin<K, V>) f).putTreeVal(hash, key, value)) != null) {oldVal = p.val;if (!onlyIfAbsent)p.val = value;}}}}if (binCount != 0) {if (binCount >= TREEIFY_THRESHOLD)treeifyBin(tab, i);if (oldVal != null)return oldVal;break;}}}addCount(1L, binCount);return null;} public V get(Object key) {Node<K,V>[] tab; Node<K,V> e, p; int n, eh; K ek;int h = spread(key.hashCode());if ((tab = table) != null && (n = tab.length) > 0 &&(e = tabAt(tab, (n - 1) & h)) != null) {if ((eh = e.hash) == h) {if ((ek = e.key) == key || (ek != null && key.equals(ek)))return e.val;}else if (eh < 0)return (p = e.find(h, key)) != null ? p.val : null;while ((e = e.next) != null) {if (e.hash == h &&((ek = e.key) == key || (ek != null && key.equals(ek))))return e.val;}}return null;}

    https://www.cnblogs.com/banjinbaijiu/p/9147434.html

    總結

    以上是生活随笔為你收集整理的Java中ConcurrentHashMap底层实现原理(JDK1.8)源码分析2的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    图片区 小说区 区 亚洲五月 | 久久午夜夜伦鲁鲁片无码免费 | 天天拍夜夜添久久精品大 | 欧美熟妇另类久久久久久不卡 | 精品成人av一区二区三区 | 福利一区二区三区视频在线观看 | 人人超人人超碰超国产 | 美女黄网站人色视频免费国产 | 中文久久乱码一区二区 | 2020最新国产自产精品 | 丰满岳乱妇在线观看中字无码 | 极品嫩模高潮叫床 | 亚洲中文字幕乱码av波多ji | 亚洲精品中文字幕乱码 | 国产成人久久精品流白浆 | 成在人线av无码免观看麻豆 | 成人综合网亚洲伊人 | 对白脏话肉麻粗话av | 国产莉萝无码av在线播放 | 中文毛片无遮挡高清免费 | 精品久久久无码人妻字幂 | 久久久精品国产sm最大网站 | 日本在线高清不卡免费播放 | 久久精品女人天堂av免费观看 | 久久久久久久女国产乱让韩 | 亚洲人交乣女bbw | 日韩精品无码一本二本三本色 | 人人妻人人澡人人爽人人精品 | 九一九色国产 | 欧美精品一区二区精品久久 | 九九久久精品国产免费看小说 | 成人亚洲精品久久久久软件 | 国产精品人人爽人人做我的可爱 | 国产精品丝袜黑色高跟鞋 | 精品水蜜桃久久久久久久 | 狠狠色色综合网站 | 欧美亚洲日韩国产人成在线播放 | 国产精品va在线播放 | 亚洲精品国偷拍自产在线麻豆 | 欧美放荡的少妇 | 无码人妻精品一区二区三区不卡 | 成人三级无码视频在线观看 | 精品国产一区二区三区四区 | 十八禁视频网站在线观看 | 国产口爆吞精在线视频 | 国产激情艳情在线看视频 | 亚洲欧洲日本综合aⅴ在线 | 激情五月综合色婷婷一区二区 | 久久午夜夜伦鲁鲁片无码免费 | 国产av无码专区亚洲awww | 麻豆国产丝袜白领秘书在线观看 | 欧美午夜特黄aaaaaa片 | 内射巨臀欧美在线视频 | 我要看www免费看插插视频 | 水蜜桃色314在线观看 | 在线天堂新版最新版在线8 | 丰满诱人的人妻3 | 1000部夫妻午夜免费 | 又紧又大又爽精品一区二区 | 东北女人啪啪对白 | 人妻中文无码久热丝袜 | 丁香啪啪综合成人亚洲 | 欧美激情内射喷水高潮 | 未满成年国产在线观看 | 久久久久av无码免费网 | 色 综合 欧美 亚洲 国产 | 精品无人国产偷自产在线 | 精品国产精品久久一区免费式 | 蜜臀aⅴ国产精品久久久国产老师 | 伊人久久婷婷五月综合97色 | 7777奇米四色成人眼影 | 青青久在线视频免费观看 | 男女猛烈xx00免费视频试看 | 好爽又高潮了毛片免费下载 | 精品厕所偷拍各类美女tp嘘嘘 | 国内精品人妻无码久久久影院 | 亚洲国精产品一二二线 | 日本一区二区三区免费播放 | 国产热a欧美热a在线视频 | 亚洲中文无码av永久不收费 | 免费网站看v片在线18禁无码 | 人人妻人人澡人人爽人人精品 | 久久久精品欧美一区二区免费 | 亚洲中文字幕无码中文字在线 | 性史性农村dvd毛片 | 欧美zoozzooz性欧美 | 丰满肥臀大屁股熟妇激情视频 | av人摸人人人澡人人超碰下载 | 亚洲国产av美女网站 | 亚洲成av人片天堂网无码】 | 国产人妻精品午夜福利免费 | 精品国产aⅴ无码一区二区 | 日韩人妻系列无码专区 | 日韩精品无码一本二本三本色 | 久久久久久a亚洲欧洲av冫 | 日本精品高清一区二区 | 18禁黄网站男男禁片免费观看 | 久久久无码中文字幕久... | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 中文字幕日韩精品一区二区三区 | 又大又硬又爽免费视频 | 粉嫩少妇内射浓精videos | 精品乱子伦一区二区三区 | 国产两女互慰高潮视频在线观看 | 亚洲国产精品一区二区第一页 | 欧美成人免费全部网站 | 亚洲熟妇色xxxxx欧美老妇y | 国产免费无码一区二区视频 | 成人免费视频视频在线观看 免费 | 久久久国产一区二区三区 | 性色欲网站人妻丰满中文久久不卡 | 国产三级久久久精品麻豆三级 | 亚洲の无码国产の无码步美 | 日日碰狠狠躁久久躁蜜桃 | 国产一区二区三区精品视频 | 成人亚洲精品久久久久软件 | 日本精品久久久久中文字幕 | 老子影院午夜精品无码 | 99久久亚洲精品无码毛片 | 日日摸天天摸爽爽狠狠97 | 四虎4hu永久免费 | 欧美一区二区三区视频在线观看 | 99精品视频在线观看免费 | 欧洲精品码一区二区三区免费看 | 真人与拘做受免费视频 | 亚洲日韩av一区二区三区中文 | 日韩精品无码一本二本三本色 | 亚洲精品无码人妻无码 | 免费无码的av片在线观看 | 久久亚洲中文字幕精品一区 | 国产成人无码专区 | 无码人妻久久一区二区三区不卡 | 伊人色综合久久天天小片 | 在线精品亚洲一区二区 | 久久综合给合久久狠狠狠97色 | 久青草影院在线观看国产 | 又大又硬又爽免费视频 | 亚洲精品国产品国语在线观看 | 欧美激情内射喷水高潮 | 青青草原综合久久大伊人精品 | 少妇久久久久久人妻无码 | 麻豆国产丝袜白领秘书在线观看 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 丰满少妇高潮惨叫视频 | 欧美人与禽猛交狂配 | 成人试看120秒体验区 | 领导边摸边吃奶边做爽在线观看 | 国产精品久久国产精品99 | 国产成人精品优优av | 窝窝午夜理论片影院 | 欧美zoozzooz性欧美 | 亚洲一区二区三区无码久久 | 大屁股大乳丰满人妻 | 婷婷五月综合激情中文字幕 | 国产精品高潮呻吟av久久4虎 | 欧美第一黄网免费网站 | 国产精品人妻一区二区三区四 | 超碰97人人做人人爱少妇 | 内射老妇bbwx0c0ck | 日韩人妻少妇一区二区三区 | 香蕉久久久久久av成人 | 蜜桃无码一区二区三区 | 亚洲国产成人a精品不卡在线 | 狠狠躁日日躁夜夜躁2020 | 天堂久久天堂av色综合 | 亚洲精品国产品国语在线观看 | 领导边摸边吃奶边做爽在线观看 | 丰满人妻翻云覆雨呻吟视频 | 久久国产自偷自偷免费一区调 | аⅴ资源天堂资源库在线 | 人妻夜夜爽天天爽三区 | 亚洲区小说区激情区图片区 | 97夜夜澡人人爽人人喊中国片 | 亚洲人成影院在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 自拍偷自拍亚洲精品被多人伦好爽 | 成人无码视频免费播放 | 日本精品少妇一区二区三区 | 小泽玛莉亚一区二区视频在线 | 国产精品人人妻人人爽 | 日日天干夜夜狠狠爱 | 野外少妇愉情中文字幕 | 2020久久超碰国产精品最新 | 中文字幕 人妻熟女 | 久久久久久国产精品无码下载 | 免费播放一区二区三区 | 成年美女黄网站色大免费全看 | 国产人成高清在线视频99最全资源 | 国产做国产爱免费视频 | 久久久久久av无码免费看大片 | 中文精品无码中文字幕无码专区 | 国产乱人无码伦av在线a | 国产av人人夜夜澡人人爽麻豆 | 欧美一区二区三区视频在线观看 | 成人三级无码视频在线观看 | 中文字幕日产无线码一区 | 国产suv精品一区二区五 | 欧美老妇交乱视频在线观看 | 日产国产精品亚洲系列 | 丰满诱人的人妻3 | 亚洲精品成a人在线观看 | 国产精品第一国产精品 | 狂野欧美性猛xxxx乱大交 | 成在人线av无码免费 | 天堂亚洲免费视频 | 麻豆国产97在线 | 欧洲 | 国产成人午夜福利在线播放 | 免费观看又污又黄的网站 | 欧美xxxx黑人又粗又长 | 亲嘴扒胸摸屁股激烈网站 | 国产欧美熟妇另类久久久 | 亚洲精品美女久久久久久久 | 亚洲成av人影院在线观看 | 久久99久久99精品中文字幕 | 无码播放一区二区三区 | 中文字幕人妻无码一区二区三区 | 无码国产乱人伦偷精品视频 | 在线看片无码永久免费视频 | 欧美精品在线观看 | 久久婷婷五月综合色国产香蕉 | 国产成人无码区免费内射一片色欲 | 少妇性俱乐部纵欲狂欢电影 | 亚洲中文字幕在线观看 | 最近的中文字幕在线看视频 | 亚洲乱码国产乱码精品精 | 亚洲中文字幕无码中字 | 国产尤物精品视频 | 在线成人www免费观看视频 | 色欲综合久久中文字幕网 | 久久久久99精品国产片 | 丰满诱人的人妻3 | 欧美xxxxx精品 | 久久亚洲国产成人精品性色 | 亚洲啪av永久无码精品放毛片 | 国产成人久久精品流白浆 | 国产精品香蕉在线观看 | 欧美三级不卡在线观看 | 国产国语老龄妇女a片 | 欧美35页视频在线观看 | 国产成人无码av片在线观看不卡 | 国产另类ts人妖一区二区 | 大色综合色综合网站 | 性色欲情网站iwww九文堂 | 国产精品亚洲综合色区韩国 | 亚洲自偷自偷在线制服 | 久久99精品久久久久久动态图 | 大屁股大乳丰满人妻 | 女人被男人爽到呻吟的视频 | 国产内射爽爽大片视频社区在线 | 在线亚洲高清揄拍自拍一品区 | 精品人妻人人做人人爽 | 欧洲精品码一区二区三区免费看 | 色偷偷人人澡人人爽人人模 | 水蜜桃色314在线观看 | 国产乱人无码伦av在线a | 99国产欧美久久久精品 | 精品午夜福利在线观看 | 免费无码午夜福利片69 | 日本va欧美va欧美va精品 | 欧美人与善在线com | 欧美性黑人极品hd | 国产人妻大战黑人第1集 | 亚洲爆乳大丰满无码专区 | 97无码免费人妻超级碰碰夜夜 | 久久午夜无码鲁丝片秋霞 | 永久免费精品精品永久-夜色 | 性欧美疯狂xxxxbbbb | 亚洲一区二区三区含羞草 | 免费国产成人高清在线观看网站 | 一个人看的www免费视频在线观看 | 亚洲国产精品成人久久蜜臀 | 亚洲乱码中文字幕在线 | 国产精品人人爽人人做我的可爱 | 一二三四社区在线中文视频 | 永久黄网站色视频免费直播 | 国产精品久久久久影院嫩草 | 欧美变态另类xxxx | 精品人妻人人做人人爽夜夜爽 | 国产亚洲人成在线播放 | 99久久人妻精品免费一区 | 久久97精品久久久久久久不卡 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 丰腴饱满的极品熟妇 | 久久天天躁夜夜躁狠狠 | 97精品国产97久久久久久免费 | 免费视频欧美无人区码 | 亚洲精品午夜无码电影网 | 给我免费的视频在线观看 | 国语自产偷拍精品视频偷 | 久久精品国产亚洲精品 | 纯爱无遮挡h肉动漫在线播放 | 久久久久久a亚洲欧洲av冫 | 国产精品理论片在线观看 | 中文字幕无码视频专区 | 亚洲成在人网站无码天堂 | 中文字幕人妻丝袜二区 | 亚洲欧美精品伊人久久 | 丝袜美腿亚洲一区二区 | 国产两女互慰高潮视频在线观看 | 天海翼激烈高潮到腰振不止 | 欧美日韩一区二区免费视频 | 亚洲欧美色中文字幕在线 | 亚洲gv猛男gv无码男同 | 国产69精品久久久久app下载 | 人妻人人添人妻人人爱 | 日日麻批免费40分钟无码 | 国产网红无码精品视频 | 又大又硬又黄的免费视频 | 精品无人国产偷自产在线 | 少妇人妻av毛片在线看 | 国产成人亚洲综合无码 | 国内精品九九久久久精品 | 亚洲爆乳大丰满无码专区 | 欧美放荡的少妇 | 亚洲精品一区二区三区婷婷月 | 精品无码国产自产拍在线观看蜜 | 九九热爱视频精品 | 欧美日韩亚洲国产精品 | 亚洲欧美精品伊人久久 | 国产suv精品一区二区五 | 日日橹狠狠爱欧美视频 | 无人区乱码一区二区三区 | 荫蒂添的好舒服视频囗交 | 国产香蕉97碰碰久久人人 | 国产成人无码午夜视频在线观看 | 亚洲一区二区三区偷拍女厕 | 亚洲日韩精品欧美一区二区 | 亚洲一区二区三区四区 | 国产极品视觉盛宴 | 日本丰满熟妇videos | 成人精品一区二区三区中文字幕 | 亚洲天堂2017无码 | 久久综合色之久久综合 | 久久久婷婷五月亚洲97号色 | 图片区 小说区 区 亚洲五月 | 国产口爆吞精在线视频 | 大乳丰满人妻中文字幕日本 | 国语自产偷拍精品视频偷 | 熟女俱乐部五十路六十路av | 午夜理论片yy44880影院 | 少妇高潮喷潮久久久影院 | 欧美老熟妇乱xxxxx | 无码一区二区三区在线观看 | 欧美放荡的少妇 | 日本护士xxxxhd少妇 | 久久精品人人做人人综合 | 亚洲日韩中文字幕在线播放 | 小泽玛莉亚一区二区视频在线 | 精品偷自拍另类在线观看 | a国产一区二区免费入口 | 日日天日日夜日日摸 | 黑人大群体交免费视频 | 在线亚洲高清揄拍自拍一品区 | 欧美三级不卡在线观看 | 久久久www成人免费毛片 | 日韩精品无码免费一区二区三区 | 精品国产一区二区三区av 性色 | 人妻少妇精品无码专区二区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产偷自视频区视频 | 久久国产精品萌白酱免费 | 风流少妇按摩来高潮 | 少妇性荡欲午夜性开放视频剧场 | 日韩人妻无码中文字幕视频 | 亚洲日韩乱码中文无码蜜桃臀网站 | 中文字幕 人妻熟女 | 一本无码人妻在中文字幕免费 | 99久久久国产精品无码免费 | 丰满人妻精品国产99aⅴ | 狠狠色噜噜狠狠狠7777奇米 | 日日麻批免费40分钟无码 | 在线观看国产午夜福利片 | 97色伦图片97综合影院 | 特大黑人娇小亚洲女 | 国产精品视频免费播放 | 红桃av一区二区三区在线无码av | 国产一区二区三区影院 | www国产精品内射老师 | 九一九色国产 | 欧美第一黄网免费网站 | 亚洲中文字幕在线无码一区二区 | 动漫av网站免费观看 | 国产在线一区二区三区四区五区 | 理论片87福利理论电影 | 精品国产一区av天美传媒 | 国产极品美女高潮无套在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久精品无码一区二区三区 | 性欧美videos高清精品 | 亚洲色欲久久久综合网东京热 | 清纯唯美经典一区二区 | 欧美日韩在线亚洲综合国产人 | 国产精品内射视频免费 | 丝袜 中出 制服 人妻 美腿 | 亚洲第一网站男人都懂 | 成人性做爰aaa片免费看不忠 | 日韩成人一区二区三区在线观看 | 两性色午夜免费视频 | 美女毛片一区二区三区四区 | 未满成年国产在线观看 | 亚洲无人区一区二区三区 | 日本乱人伦片中文三区 | 无码人妻黑人中文字幕 | 久久综合香蕉国产蜜臀av | 国产精品久久福利网站 | 波多野结衣av一区二区全免费观看 | 四十如虎的丰满熟妇啪啪 | 国产av久久久久精东av | 高中生自慰www网站 | 国产精品亚洲а∨无码播放麻豆 | 无码任你躁久久久久久久 | 一本一道久久综合久久 | 国产精品怡红院永久免费 | 欧美性生交活xxxxxdddd | 男女爱爱好爽视频免费看 | 国产网红无码精品视频 | 美女极度色诱视频国产 | 成人无码视频免费播放 | 一本久久a久久精品vr综合 | 欧美丰满老熟妇xxxxx性 | 欧美激情一区二区三区成人 | 久久综合给合久久狠狠狠97色 | 国产精品亚洲lv粉色 | 国产乱人伦av在线无码 | 奇米影视888欧美在线观看 | 丰满诱人的人妻3 | 精品人妻人人做人人爽 | 给我免费的视频在线观看 | 国产熟妇另类久久久久 | 国产乱人伦偷精品视频 | 狠狠亚洲超碰狼人久久 | 国产美女精品一区二区三区 | 成人精品一区二区三区中文字幕 | 亚洲国产精品毛片av不卡在线 | 日本丰满护士爆乳xxxx | 日本精品久久久久中文字幕 | 色一情一乱一伦一视频免费看 | 亚洲中文字幕成人无码 | 精品国产aⅴ无码一区二区 | 国产精品久久久 | 色五月五月丁香亚洲综合网 | 激情内射日本一区二区三区 | 成熟妇人a片免费看网站 | 成人一区二区免费视频 | 特级做a爰片毛片免费69 | 色欲综合久久中文字幕网 | 2019nv天堂香蕉在线观看 | 一二三四在线观看免费视频 | 亚洲男人av天堂午夜在 | 国产成人午夜福利在线播放 | 中文久久乱码一区二区 | 成人片黄网站色大片免费观看 | 亚洲а∨天堂久久精品2021 | 99久久久国产精品无码免费 | 4hu四虎永久在线观看 | 任你躁国产自任一区二区三区 | 国产av无码专区亚洲awww | 欧洲美熟女乱又伦 | 亚洲精品午夜无码电影网 | 国内综合精品午夜久久资源 | 国精产品一品二品国精品69xx | 狂野欧美性猛交免费视频 | 国精产品一品二品国精品69xx | 国产成人av免费观看 | 性欧美大战久久久久久久 | 无套内谢老熟女 | 亚洲精品中文字幕久久久久 | a片免费视频在线观看 | 狠狠cao日日穞夜夜穞av | 日本一卡2卡3卡四卡精品网站 | 18黄暴禁片在线观看 | 欧美日韩综合一区二区三区 | 九九热爱视频精品 | 一本久久a久久精品亚洲 | 国产真实乱对白精彩久久 | 人妻人人添人妻人人爱 | 国产福利视频一区二区 | 免费观看又污又黄的网站 | 中文字幕精品av一区二区五区 | 爆乳一区二区三区无码 | 国产精品内射视频免费 | 亚洲欧洲无卡二区视頻 | 日日鲁鲁鲁夜夜爽爽狠狠 | 俄罗斯老熟妇色xxxx | 东京无码熟妇人妻av在线网址 | 成在人线av无码免费 | 麻豆果冻传媒2021精品传媒一区下载 | 好屌草这里只有精品 | 亚洲色偷偷偷综合网 | 黑人巨大精品欧美黑寡妇 | 久久国产36精品色熟妇 | 久久人人爽人人爽人人片ⅴ | 无人区乱码一区二区三区 | 性做久久久久久久久 | 人妻少妇被猛烈进入中文字幕 | 日本熟妇大屁股人妻 | 国产精品永久免费视频 | 欧美猛少妇色xxxxx | 香港三级日本三级妇三级 | 久久久精品国产sm最大网站 | 亚洲熟妇色xxxxx欧美老妇y | 国产午夜精品一区二区三区嫩草 | 一二三四在线观看免费视频 | 午夜无码区在线观看 | 亚洲精品一区二区三区婷婷月 | 黑人大群体交免费视频 | 久久天天躁狠狠躁夜夜免费观看 | 激情人妻另类人妻伦 | 天堂无码人妻精品一区二区三区 | 久久 国产 尿 小便 嘘嘘 | 精品 日韩 国产 欧美 视频 | 成年美女黄网站色大免费视频 | 久久久精品欧美一区二区免费 | 狠狠色噜噜狠狠狠7777奇米 | 青春草在线视频免费观看 | 亚洲区欧美区综合区自拍区 | 日本一卡二卡不卡视频查询 | 久久99精品国产.久久久久 | 久久人人爽人人人人片 | 5858s亚洲色大成网站www | 精品aⅴ一区二区三区 | 99久久精品日本一区二区免费 | 九一九色国产 | 99精品无人区乱码1区2区3区 | 高清不卡一区二区三区 | 成人亚洲精品久久久久软件 | 一区二区传媒有限公司 | 欧美三级不卡在线观看 | 亚洲中文字幕久久无码 | 亚洲综合精品香蕉久久网 | 久久久av男人的天堂 | 国产莉萝无码av在线播放 | 国产成人精品三级麻豆 | 性色欲情网站iwww九文堂 | 成人性做爰aaa片免费看不忠 | 国产97在线 | 亚洲 | 久久精品成人欧美大片 | 野狼第一精品社区 | 99国产精品白浆在线观看免费 | 欧美xxxxx精品 | 小鲜肉自慰网站xnxx | 久久精品99久久香蕉国产色戒 | 成人性做爰aaa片免费看 | √8天堂资源地址中文在线 | 乱人伦人妻中文字幕无码久久网 | 乱人伦中文视频在线观看 | 久久精品99久久香蕉国产色戒 | 国产精品永久免费视频 | 精品国产一区二区三区四区在线看 | 国产成人一区二区三区别 | 漂亮人妻洗澡被公强 日日躁 | 亚洲日本一区二区三区在线 | 啦啦啦www在线观看免费视频 | 亚洲 另类 在线 欧美 制服 | 国产av人人夜夜澡人人爽麻豆 | 一区二区三区乱码在线 | 欧洲 | 欧洲精品码一区二区三区免费看 | 久久综合给合久久狠狠狠97色 | 国产精品办公室沙发 | 伊人久久婷婷五月综合97色 | 国产精品久久久久久无码 | 又紧又大又爽精品一区二区 | 欧美熟妇另类久久久久久不卡 | 国产99久久精品一区二区 | 波多野结衣aⅴ在线 | 呦交小u女精品视频 | 日日干夜夜干 | 中文精品无码中文字幕无码专区 | 动漫av一区二区在线观看 | 国产一区二区三区四区五区加勒比 | 国产精品久久福利网站 | 欧美人妻一区二区三区 | 色婷婷av一区二区三区之红樱桃 | 天干天干啦夜天干天2017 | 四虎永久在线精品免费网址 | 国产精品理论片在线观看 | 又大又黄又粗又爽的免费视频 | 一本一道久久综合久久 | 久久久久成人片免费观看蜜芽 | 在线观看国产午夜福利片 | 精品欧美一区二区三区久久久 | 东京一本一道一二三区 | 久久精品国产精品国产精品污 | 国产香蕉尹人视频在线 | 骚片av蜜桃精品一区 | 成人免费视频视频在线观看 免费 | 大地资源中文第3页 | 日本一区二区更新不卡 | 无套内谢的新婚少妇国语播放 | 亚洲а∨天堂久久精品2021 | 少妇人妻大乳在线视频 | 永久免费观看美女裸体的网站 | 骚片av蜜桃精品一区 | 国产av一区二区三区最新精品 | 成年美女黄网站色大免费全看 | 国产高潮视频在线观看 | 亚洲欧美色中文字幕在线 | 人妻少妇精品无码专区二区 | 无码人妻出轨黑人中文字幕 | 东京热无码av男人的天堂 | 久久久中文久久久无码 | 欧美猛少妇色xxxxx | 色婷婷综合激情综在线播放 | 一本久久a久久精品亚洲 | 131美女爱做视频 | 久久无码专区国产精品s | 纯爱无遮挡h肉动漫在线播放 | 丰满妇女强制高潮18xxxx | 欧美人与牲动交xxxx | 久久天天躁夜夜躁狠狠 | 国产sm调教视频在线观看 | 3d动漫精品啪啪一区二区中 | 国产精品久久久 | 亚洲色大成网站www | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产精品毛多多水多 | 少妇激情av一区二区 | 亚洲色偷偷偷综合网 | 久久www免费人成人片 | 欧美日韩在线亚洲综合国产人 | 国产小呦泬泬99精品 | 99er热精品视频 | 日韩av无码中文无码电影 | 成人无码视频免费播放 | 亚洲精品久久久久久一区二区 | 色欲综合久久中文字幕网 | 伊人久久大香线焦av综合影院 | 窝窝午夜理论片影院 | 四虎影视成人永久免费观看视频 | 亚洲爆乳大丰满无码专区 | 人人妻人人澡人人爽人人精品浪潮 | 久久精品99久久香蕉国产色戒 | 天天综合网天天综合色 | 欧美熟妇另类久久久久久多毛 | 国内少妇偷人精品视频 | 双乳奶水饱满少妇呻吟 | 久在线观看福利视频 | 奇米影视888欧美在线观看 | 成人性做爰aaa片免费看不忠 | 妺妺窝人体色www在线小说 | 欧美 日韩 人妻 高清 中文 | 最近的中文字幕在线看视频 | 国产乱人无码伦av在线a | 成熟女人特级毛片www免费 | 国产精品第一区揄拍无码 | 国产精品久久久一区二区三区 | 双乳奶水饱满少妇呻吟 | 暴力强奷在线播放无码 | 午夜无码区在线观看 | 亚洲狠狠色丁香婷婷综合 | 特级做a爰片毛片免费69 | 欧美猛少妇色xxxxx | 色五月五月丁香亚洲综合网 | 国产人妻人伦精品 | 少妇久久久久久人妻无码 | 88国产精品欧美一区二区三区 | 精品一区二区三区波多野结衣 | 成人无码精品1区2区3区免费看 | 天海翼激烈高潮到腰振不止 | 日韩欧美成人免费观看 | 色婷婷久久一区二区三区麻豆 | 国产精品久久久av久久久 | 国产超碰人人爽人人做人人添 | 色综合久久88色综合天天 | 日日干夜夜干 | 亚洲成色www久久网站 | 图片小说视频一区二区 | 大屁股大乳丰满人妻 | 人人澡人摸人人添 | 午夜男女很黄的视频 | 国产亚洲精品久久久久久大师 | 18精品久久久无码午夜福利 | 中文字幕+乱码+中文字幕一区 | 国产又爽又猛又粗的视频a片 | 日本精品高清一区二区 | 免费无码av一区二区 | 久久久婷婷五月亚洲97号色 | 久久www免费人成人片 | 亚洲日本在线电影 | 人妻夜夜爽天天爽三区 | 少妇邻居内射在线 | 一本加勒比波多野结衣 | 国产精品无码mv在线观看 | 色老头在线一区二区三区 | 亚洲综合伊人久久大杳蕉 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲综合在线一区二区三区 | 国产乱人无码伦av在线a | 国产成人无码av片在线观看不卡 | 国产无套粉嫩白浆在线 | 无码国内精品人妻少妇 | 亚洲伊人久久精品影院 | 人人妻人人澡人人爽欧美一区九九 | 性做久久久久久久免费看 | 亚洲色偷偷偷综合网 | 久久久久成人精品免费播放动漫 | 天堂亚洲2017在线观看 | 久久亚洲精品中文字幕无男同 | 荫蒂被男人添的好舒服爽免费视频 | 日韩av无码一区二区三区不卡 | 久久综合九色综合97网 | 亚洲成av人影院在线观看 | 女人色极品影院 | 一个人看的视频www在线 | 国产精品无码一区二区三区不卡 | www国产精品内射老师 | 学生妹亚洲一区二区 | 欧美怡红院免费全部视频 | 国产亚洲美女精品久久久2020 | 国产国语老龄妇女a片 | 国产精品-区区久久久狼 | 未满小14洗澡无码视频网站 | 欧美激情一区二区三区成人 | 亚洲成av人片天堂网无码】 | 久久国产自偷自偷免费一区调 | 亚洲欧美国产精品专区久久 | 国产女主播喷水视频在线观看 | 人妻互换免费中文字幕 | 老司机亚洲精品影院无码 | 无套内谢老熟女 | 久久久精品人妻久久影视 | 久久久久久久人妻无码中文字幕爆 | 无套内谢老熟女 | 俺去俺来也在线www色官网 | 国产精品成人av在线观看 | 亚洲午夜福利在线观看 | 久久99精品久久久久久 | 国产九九九九九九九a片 | 欧美喷潮久久久xxxxx | 强奷人妻日本中文字幕 | 久久亚洲国产成人精品性色 | 婷婷六月久久综合丁香 | 免费观看黄网站 | 亚洲欧洲中文日韩av乱码 | 欧美乱妇无乱码大黄a片 | 国产精品亚洲五月天高清 | 亚洲成色在线综合网站 | 亚洲熟女一区二区三区 | 国产av一区二区精品久久凹凸 | 欧美精品无码一区二区三区 | 久久精品国产日本波多野结衣 | 精品无人区无码乱码毛片国产 | 少妇太爽了在线观看 | 内射爽无广熟女亚洲 | 一本色道婷婷久久欧美 | ass日本丰满熟妇pics | 亚洲性无码av中文字幕 | 亚洲色大成网站www国产 | 熟妇女人妻丰满少妇中文字幕 | 日本va欧美va欧美va精品 | 在线精品亚洲一区二区 | 娇妻被黑人粗大高潮白浆 | 四虎国产精品免费久久 | 国产精品久久久午夜夜伦鲁鲁 | 国产农村乱对白刺激视频 | 无人区乱码一区二区三区 | 国产成人精品无码播放 | aa片在线观看视频在线播放 | 无套内谢的新婚少妇国语播放 | 亚洲日韩av一区二区三区中文 | 未满小14洗澡无码视频网站 | 日韩 欧美 动漫 国产 制服 | 国产真实夫妇视频 | 九九热爱视频精品 | 综合人妻久久一区二区精品 | 国产小呦泬泬99精品 | 日日麻批免费40分钟无码 | 欧美丰满熟妇xxxx性ppx人交 | 色欲久久久天天天综合网精品 | 夜夜躁日日躁狠狠久久av | 内射欧美老妇wbb | 国产成人综合色在线观看网站 | 国产精品香蕉在线观看 | 内射爽无广熟女亚洲 | 亚洲成在人网站无码天堂 | 国产亚洲精品久久久久久久 | 丰满岳乱妇在线观看中字无码 | 影音先锋中文字幕无码 | 精品人人妻人人澡人人爽人人 | 中文字幕av伊人av无码av | 久久久久成人精品免费播放动漫 | 人妻有码中文字幕在线 | 欧美丰满少妇xxxx性 | 欧美黑人性暴力猛交喷水 | 亚洲日韩精品欧美一区二区 | 岛国片人妻三上悠亚 | 亚洲一区二区三区播放 | 国产又爽又猛又粗的视频a片 | 黑人粗大猛烈进出高潮视频 | 少妇愉情理伦片bd | 日韩人妻少妇一区二区三区 | 99久久久国产精品无码免费 | 中文字幕人妻无码一夲道 | 亚洲人成影院在线观看 | 久久综合九色综合97网 | 在教室伦流澡到高潮hnp视频 | 人妻插b视频一区二区三区 | 99视频精品全部免费免费观看 | 又紧又大又爽精品一区二区 | 欧美喷潮久久久xxxxx | 久青草影院在线观看国产 | 荫蒂被男人添的好舒服爽免费视频 | 国产精品国产自线拍免费软件 | 精品偷拍一区二区三区在线看 | 欧美熟妇另类久久久久久多毛 | 人人澡人人透人人爽 | 特黄特色大片免费播放器图片 | 国产av一区二区精品久久凹凸 | 免费男性肉肉影院 | 男人和女人高潮免费网站 | 免费无码av一区二区 | 99精品久久毛片a片 | 国产精品人人爽人人做我的可爱 | 久久国产精品萌白酱免费 | 好屌草这里只有精品 | 国产精品内射视频免费 | 丝袜人妻一区二区三区 | 台湾无码一区二区 | 欧美 日韩 亚洲 在线 | 亚洲精品久久久久久一区二区 | 国产精品久久久久久亚洲影视内衣 | 国产在线精品一区二区三区直播 | 亚洲精品www久久久 | 欧美性猛交xxxx富婆 | 亚洲午夜福利在线观看 | 乱中年女人伦av三区 | 扒开双腿吃奶呻吟做受视频 | 欧美人妻一区二区三区 | 亚洲国产精品一区二区第一页 | 久久精品国产精品国产精品污 | 动漫av一区二区在线观看 | 亚洲s色大片在线观看 | 国产人成高清在线视频99最全资源 | 欧美激情一区二区三区成人 | 免费无码午夜福利片69 | 欧美第一黄网免费网站 | 午夜精品一区二区三区在线观看 | 久久久精品456亚洲影院 | 丰满岳乱妇在线观看中字无码 | 天堂无码人妻精品一区二区三区 | 久久人人爽人人爽人人片ⅴ | 妺妺窝人体色www在线小说 | 午夜福利试看120秒体验区 | 我要看www免费看插插视频 | 欧美成人高清在线播放 | 国产亚洲精品久久久久久国模美 | 无码任你躁久久久久久久 | 亚洲乱亚洲乱妇50p | 国产精品人妻一区二区三区四 | 97色伦图片97综合影院 | 久久国内精品自在自线 | 蜜臀aⅴ国产精品久久久国产老师 | 最新国产乱人伦偷精品免费网站 | 亚洲一区二区三区国产精华液 | 精品久久久久久亚洲精品 | 在线欧美精品一区二区三区 | 亚洲综合无码一区二区三区 | 国产精品亚洲а∨无码播放麻豆 | 国产偷国产偷精品高清尤物 | 国产人妻人伦精品 | 国产精品手机免费 | 美女极度色诱视频国产 | 亚洲第一网站男人都懂 | 久久国产精品精品国产色婷婷 | 亚洲天堂2017无码中文 | 小鲜肉自慰网站xnxx | 欧美日韩综合一区二区三区 | 日本丰满熟妇videos | 99精品无人区乱码1区2区3区 | 久久久国产精品无码免费专区 | 久久久久亚洲精品男人的天堂 | 久久无码人妻影院 | 红桃av一区二区三区在线无码av | 久久国产自偷自偷免费一区调 | 中文字幕乱码亚洲无线三区 | 色五月丁香五月综合五月 | 爆乳一区二区三区无码 | 青草青草久热国产精品 | √天堂中文官网8在线 | 日本爽爽爽爽爽爽在线观看免 | 中文字幕乱码亚洲无线三区 | 四虎国产精品一区二区 | 丰满诱人的人妻3 | 成人欧美一区二区三区黑人免费 | 久青草影院在线观看国产 | 亚洲精品一区二区三区在线 | 久久综合给合久久狠狠狠97色 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲国产精品美女久久久久 | 国产激情综合五月久久 | 少妇性l交大片欧洲热妇乱xxx | 国产精品久久久久久久9999 | 亚洲国产成人a精品不卡在线 | 性色欲网站人妻丰满中文久久不卡 | 国产亚洲精品久久久久久国模美 | 国产精品亚洲а∨无码播放麻豆 | 白嫩日本少妇做爰 | 麻花豆传媒剧国产免费mv在线 | 蜜臀av无码人妻精品 | 欧美激情综合亚洲一二区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 色综合久久网 | 99久久久无码国产精品免费 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲成熟女人毛毛耸耸多 | 亚洲色偷偷偷综合网 | 亚洲中文字幕成人无码 | 亚洲日韩精品欧美一区二区 | 永久免费观看国产裸体美女 | 国产精品嫩草久久久久 | 午夜性刺激在线视频免费 | 国产猛烈高潮尖叫视频免费 | 女人被男人爽到呻吟的视频 | 婷婷五月综合缴情在线视频 | 精品久久久中文字幕人妻 | 黑人巨大精品欧美一区二区 | a片免费视频在线观看 | 欧美成人免费全部网站 | 欧美国产亚洲日韩在线二区 | 思思久久99热只有频精品66 | 久久久久av无码免费网 | 国内丰满熟女出轨videos | 亚洲欧洲日本无在线码 | 青青草原综合久久大伊人精品 | 国产精品亚洲一区二区三区喷水 | 激情五月综合色婷婷一区二区 | 中文毛片无遮挡高清免费 | 亚洲 欧美 激情 小说 另类 | 久久久久免费精品国产 | 日韩精品一区二区av在线 | 国语精品一区二区三区 | 欧美一区二区三区视频在线观看 | 牲交欧美兽交欧美 | 国产成人精品三级麻豆 | 久青草影院在线观看国产 | 一个人免费观看的www视频 | 色婷婷av一区二区三区之红樱桃 | 日韩精品一区二区av在线 | 乱人伦人妻中文字幕无码久久网 | 国产欧美熟妇另类久久久 | av无码不卡在线观看免费 | 六十路熟妇乱子伦 | 亚洲中文字幕久久无码 | 久久视频在线观看精品 | 久久午夜无码鲁丝片秋霞 | 欧美性生交xxxxx久久久 | 久久精品人人做人人综合试看 | 国产特级毛片aaaaaa高潮流水 | 日韩欧美中文字幕公布 | 激情爆乳一区二区三区 | 大地资源网第二页免费观看 | 国产内射老熟女aaaa | 国産精品久久久久久久 | 亚洲中文字幕乱码av波多ji | 亚洲国产av精品一区二区蜜芽 | 无码中文字幕色专区 | 亚洲码国产精品高潮在线 | 国产精品人妻一区二区三区四 | 131美女爱做视频 | 国产精品二区一区二区aⅴ污介绍 | 亚洲熟妇色xxxxx欧美老妇y | 永久免费观看美女裸体的网站 | 久青草影院在线观看国产 | 国内丰满熟女出轨videos | 国产69精品久久久久app下载 | 亚洲国产精品无码一区二区三区 | 久久久久久久人妻无码中文字幕爆 | 国产一区二区三区四区五区加勒比 | √天堂中文官网8在线 | 一本色道久久综合亚洲精品不卡 | 日日摸日日碰夜夜爽av | 亚洲一区二区三区播放 | 乱码午夜-极国产极内射 | 特黄特色大片免费播放器图片 | 青青青手机频在线观看 | 一个人免费观看的www视频 | 超碰97人人射妻 | 国产莉萝无码av在线播放 | 欧美熟妇另类久久久久久不卡 | 日韩成人一区二区三区在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲国产精品久久久天堂 | 青春草在线视频免费观看 | 免费国产成人高清在线观看网站 | 国模大胆一区二区三区 | 超碰97人人做人人爱少妇 | 乱人伦人妻中文字幕无码久久网 | 无码帝国www无码专区色综合 | 国产欧美熟妇另类久久久 | 亚洲中文字幕乱码av波多ji | 秋霞特色aa大片 | 大胆欧美熟妇xx | 久久伊人色av天堂九九小黄鸭 | 最近的中文字幕在线看视频 | 国产偷抇久久精品a片69 | 最新国产乱人伦偷精品免费网站 | 亚洲の无码国产の无码影院 | 国产成人无码一二三区视频 | 玩弄人妻少妇500系列视频 | 国产一区二区三区影院 | 国产成人综合在线女婷五月99播放 | 亚洲成色在线综合网站 | 在线a亚洲视频播放在线观看 | 一个人看的视频www在线 | 老子影院午夜伦不卡 | 亚洲一区二区三区无码久久 | 网友自拍区视频精品 | 亚洲中文字幕va福利 | 国产人妻久久精品二区三区老狼 | 精品无码一区二区三区爱欲 | 色一情一乱一伦一视频免费看 | 亚洲区欧美区综合区自拍区 | 精品久久久无码中文字幕 | 精品人妻人人做人人爽夜夜爽 | 啦啦啦www在线观看免费视频 | 日韩精品一区二区av在线 | 日本丰满熟妇videos | 中文字幕无码日韩欧毛 | 夜夜影院未满十八勿进 | 在线播放免费人成毛片乱码 | 国产日产欧产精品精品app | 国产精品人人妻人人爽 | 欧美日韩一区二区三区自拍 | 国产亚洲精品精品国产亚洲综合 | 1000部啪啪未满十八勿入下载 | 国产亚洲欧美日韩亚洲中文色 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品一区二区三区婷婷月 | 亚洲 另类 在线 欧美 制服 | 亚洲中文字幕在线观看 | 国产欧美精品一区二区三区 | 色婷婷综合中文久久一本 | 伊人久久大香线蕉av一区二区 | 国产卡一卡二卡三 | 天天躁夜夜躁狠狠是什么心态 | 国产乱人无码伦av在线a | 国产麻豆精品一区二区三区v视界 | 久久精品视频在线看15 | 亚洲日韩乱码中文无码蜜桃臀网站 | 99久久精品日本一区二区免费 | 激情五月综合色婷婷一区二区 | 综合激情五月综合激情五月激情1 | 一二三四社区在线中文视频 | 国产精品18久久久久久麻辣 | 无码午夜成人1000部免费视频 | 久久精品国产99精品亚洲 | 久久久久成人片免费观看蜜芽 | 亚洲精品美女久久久久久久 | 色婷婷欧美在线播放内射 | 高潮毛片无遮挡高清免费视频 | 亚洲国产成人av在线观看 | 奇米影视888欧美在线观看 | 水蜜桃亚洲一二三四在线 | 男人和女人高潮免费网站 | 精品国产乱码久久久久乱码 | 国内少妇偷人精品视频免费 | 给我免费的视频在线观看 | 大色综合色综合网站 | 日日碰狠狠丁香久燥 | 人人妻人人澡人人爽人人精品浪潮 | 无码国产色欲xxxxx视频 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 永久免费观看国产裸体美女 | 国产小呦泬泬99精品 | 欧美日韩视频无码一区二区三 | 精品欧洲av无码一区二区三区 | 人妻少妇精品久久 | 国产激情无码一区二区app | 综合激情五月综合激情五月激情1 | 国产精品无码永久免费888 | 午夜精品久久久内射近拍高清 | 国产精品-区区久久久狼 | 亚洲狠狠婷婷综合久久 | 波多野结衣av一区二区全免费观看 | 亚洲日韩av一区二区三区中文 | 国产免费久久久久久无码 | 色偷偷人人澡人人爽人人模 | 天海翼激烈高潮到腰振不止 | 亚洲 日韩 欧美 成人 在线观看 | 中文字幕人妻无码一夲道 | 国产人妖乱国产精品人妖 | 特级做a爰片毛片免费69 | 国产精品久久久一区二区三区 | 55夜色66夜色国产精品视频 | 天天av天天av天天透 | 亚洲va欧美va天堂v国产综合 | 黑人粗大猛烈进出高潮视频 | 亚洲精品国产品国语在线观看 | 亚洲精品国产精品乱码不卡 | 2019午夜福利不卡片在线 | 日日干夜夜干 | 无码午夜成人1000部免费视频 | 中文字幕人妻丝袜二区 | 一本加勒比波多野结衣 | 日日橹狠狠爱欧美视频 | 亚洲精品一区二区三区四区五区 | 久久99精品久久久久久 | 女人色极品影院 | 中文精品无码中文字幕无码专区 | 久久亚洲国产成人精品性色 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲成a人片在线观看日本 | 欧美性猛交xxxx富婆 | 97精品人妻一区二区三区香蕉 | 国产综合在线观看 | 国产美女精品一区二区三区 | 熟女少妇人妻中文字幕 | 蜜桃无码一区二区三区 | 精品一区二区三区波多野结衣 | 乱人伦人妻中文字幕无码久久网 | 国产成人一区二区三区在线观看 | 美女毛片一区二区三区四区 | 少妇太爽了在线观看 | 性欧美videos高清精品 | 久久成人a毛片免费观看网站 | 奇米影视7777久久精品人人爽 | 亚洲人成无码网www | 人人爽人人澡人人高潮 | 欧美成人免费全部网站 | 无码人妻出轨黑人中文字幕 | 日韩精品乱码av一区二区 | 国产熟妇另类久久久久 | 国产精品无码成人午夜电影 | 国产精品二区一区二区aⅴ污介绍 | 色窝窝无码一区二区三区色欲 | 大地资源网第二页免费观看 | 欧洲vodafone精品性 | 免费无码一区二区三区蜜桃大 | 国产激情无码一区二区 | 十八禁视频网站在线观看 | 国产亚洲精品久久久久久 | 国产婷婷色一区二区三区在线 | 人妻体内射精一区二区三四 | 国产精品永久免费视频 | 人妻与老人中文字幕 | 亚洲精品国产a久久久久久 | 国产美女极度色诱视频www | 无码人妻精品一区二区三区下载 | 精品久久久无码人妻字幂 | 蜜臀aⅴ国产精品久久久国产老师 | 成人欧美一区二区三区黑人免费 | 装睡被陌生人摸出水好爽 | 欧美变态另类xxxx | 欧美一区二区三区 | 性生交大片免费看女人按摩摩 | 国产高潮视频在线观看 | 男女作爱免费网站 | 亚洲欧洲无卡二区视頻 | 曰韩少妇内射免费播放 | 国产人妻人伦精品 | 熟女少妇在线视频播放 | 少妇久久久久久人妻无码 | 精品久久久久香蕉网 | 久久亚洲日韩精品一区二区三区 | 人妻与老人中文字幕 | 国产超级va在线观看视频 | 日本精品人妻无码免费大全 | 在线 国产 欧美 亚洲 天堂 | 国内精品人妻无码久久久影院 | 国产舌乚八伦偷品w中 | 人人爽人人爽人人片av亚洲 | 婷婷五月综合激情中文字幕 | 无遮无挡爽爽免费视频 | 久久久久久av无码免费看大片 | 久久久av男人的天堂 | 欧美人与动性行为视频 | 国产精品亚洲五月天高清 | 亚洲国产成人a精品不卡在线 | www一区二区www免费 | 国产亚洲美女精品久久久2020 | 网友自拍区视频精品 | 成人免费视频一区二区 | 男人和女人高潮免费网站 | 亚洲国产一区二区三区在线观看 | 久久亚洲精品中文字幕无男同 | 久青草影院在线观看国产 | 国产sm调教视频在线观看 | 大肉大捧一进一出好爽视频 | 国产av无码专区亚洲awww | yw尤物av无码国产在线观看 | 在线成人www免费观看视频 | 少妇久久久久久人妻无码 | 国产精品永久免费视频 | 久久综合狠狠综合久久综合88 | 国产精品香蕉在线观看 | 性生交大片免费看女人按摩摩 | 日本精品人妻无码77777 天堂一区人妻无码 | 色情久久久av熟女人妻网站 | 亚洲国产精品一区二区美利坚 | 人妻无码久久精品人妻 | 国产精品久久久久久亚洲影视内衣 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲熟妇色xxxxx欧美老妇y | 正在播放老肥熟妇露脸 | 精品一二三区久久aaa片 | 国产成人综合在线女婷五月99播放 | 国产在线精品一区二区三区直播 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 精品久久综合1区2区3区激情 | 高潮毛片无遮挡高清免费 | 成人欧美一区二区三区黑人免费 | www国产亚洲精品久久网站 | 久久无码中文字幕免费影院蜜桃 | 玩弄少妇高潮ⅹxxxyw | 国产亚洲视频中文字幕97精品 | 99国产精品白浆在线观看免费 | 国产无套粉嫩白浆在线 | 免费观看又污又黄的网站 | 99精品久久毛片a片 | 黑人大群体交免费视频 | 在教室伦流澡到高潮hnp视频 | 精品人妻人人做人人爽夜夜爽 | 国产精品亚洲五月天高清 | 久久综合久久自在自线精品自 | 中文久久乱码一区二区 | 精品国产成人一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 无码人妻精品一区二区三区不卡 | 久久久久久久久888 | 少妇高潮一区二区三区99 | 97精品人妻一区二区三区香蕉 | 国产区女主播在线观看 | 成人精品视频一区二区三区尤物 | 天天综合网天天综合色 | 在线观看国产一区二区三区 | 国产熟妇另类久久久久 | 日本va欧美va欧美va精品 | 久久综合激激的五月天 | 377p欧洲日本亚洲大胆 | 日欧一片内射va在线影院 | 激情国产av做激情国产爱 | 在线观看免费人成视频 | 天堂一区人妻无码 | 中文字幕日产无线码一区 | 国产成人无码av一区二区 | 蜜桃视频插满18在线观看 | 亚洲成a人片在线观看无码3d | 99精品视频在线观看免费 | 精品亚洲韩国一区二区三区 | 无码人中文字幕 | 四虎永久在线精品免费网址 | 无套内射视频囯产 | 午夜时刻免费入口 | v一区无码内射国产 | 又粗又大又硬又长又爽 | 人妻互换免费中文字幕 | 日本成熟视频免费视频 | 国产女主播喷水视频在线观看 | 国产精品资源一区二区 | 一本久道久久综合婷婷五月 | 国产精品香蕉在线观看 | 精品国产av色一区二区深夜久久 | 任你躁国产自任一区二区三区 | 午夜理论片yy44880影院 | 国产婷婷色一区二区三区在线 | 又黄又爽又色的视频 | 国产在线aaa片一区二区99 | 午夜成人1000部免费视频 | 欧美激情一区二区三区成人 | 四虎永久在线精品免费网址 | 精品国产一区二区三区四区在线看 | 4hu四虎永久在线观看 | 日韩av无码中文无码电影 | 亚洲の无码国产の无码影院 | 99精品无人区乱码1区2区3区 | 亚洲成色www久久网站 | 暴力强奷在线播放无码 | 国产内射爽爽大片视频社区在线 | 亚洲成熟女人毛毛耸耸多 | 亚洲国产精品美女久久久久 | 精品国产成人一区二区三区 | 日日夜夜撸啊撸 | 日本乱偷人妻中文字幕 | 国产亚洲精品精品国产亚洲综合 | 女高中生第一次破苞av | 两性色午夜视频免费播放 | 99久久久无码国产aaa精品 | 少女韩国电视剧在线观看完整 | 国产精品亚洲一区二区三区喷水 | 日韩精品久久久肉伦网站 | 永久免费观看国产裸体美女 | 久精品国产欧美亚洲色aⅴ大片 | 一本精品99久久精品77 | 亚洲热妇无码av在线播放 | 天堂一区人妻无码 | 亚洲色欲色欲欲www在线 | 国产成人亚洲综合无码 | 久久久久99精品成人片 | 日韩少妇白浆无码系列 | 狠狠综合久久久久综合网 | 久久久久久亚洲精品a片成人 | 亚洲精品一区二区三区婷婷月 | 国产又爽又猛又粗的视频a片 | 婷婷五月综合激情中文字幕 | 十八禁真人啪啪免费网站 | 国产性生交xxxxx无码 | 色五月五月丁香亚洲综合网 | 国产人妻人伦精品1国产丝袜 | 色噜噜亚洲男人的天堂 | 亚洲 欧美 激情 小说 另类 | 99国产精品白浆在线观看免费 | 红桃av一区二区三区在线无码av | 桃花色综合影院 | 国产在热线精品视频 | 久久精品国产日本波多野结衣 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 狂野欧美性猛xxxx乱大交 | 亚洲日韩一区二区 | 精品久久8x国产免费观看 | 天天拍夜夜添久久精品 | 成人免费无码大片a毛片 | 激情爆乳一区二区三区 | 99久久无码一区人妻 | 四虎影视成人永久免费观看视频 | 国产人妖乱国产精品人妖 | av小次郎收藏 | 沈阳熟女露脸对白视频 | 欧美兽交xxxx×视频 | 国产亚洲精品久久久闺蜜 | 十八禁视频网站在线观看 | 国产午夜亚洲精品不卡 | 无遮挡啪啪摇乳动态图 | 国产色精品久久人妻 | 无码人妻丰满熟妇区毛片18 | 亚洲色欲色欲天天天www | 性史性农村dvd毛片 | 在线成人www免费观看视频 | 少妇人妻大乳在线视频 | 18精品久久久无码午夜福利 | 露脸叫床粗话东北少妇 | 99精品视频在线观看免费 | 精品久久久久久亚洲精品 | 日本在线高清不卡免费播放 | 无码国产色欲xxxxx视频 | 午夜嘿嘿嘿影院 | 久久久无码中文字幕久... | 亚洲成a人一区二区三区 | 亚洲成a人片在线观看无码3d | 综合网日日天干夜夜久久 | 久久久久久国产精品无码下载 | 波多野42部无码喷潮在线 | 久久久久免费精品国产 | 中文毛片无遮挡高清免费 | 永久免费观看国产裸体美女 | 18禁止看的免费污网站 | 无遮挡国产高潮视频免费观看 | 日本一本二本三区免费 | 荡女精品导航 | 日本大香伊一区二区三区 | 国产精品亚洲а∨无码播放麻豆 | aⅴ亚洲 日韩 色 图网站 播放 | 无码av中文字幕免费放 | 免费无码肉片在线观看 | 国产人妻久久精品二区三区老狼 | 亚洲精品中文字幕乱码 | 一本精品99久久精品77 | 久久国产自偷自偷免费一区调 | 男女作爱免费网站 | 一本久道久久综合婷婷五月 | 亚洲 日韩 欧美 成人 在线观看 | 水蜜桃亚洲一二三四在线 | 日日摸日日碰夜夜爽av | 欧美阿v高清资源不卡在线播放 | 精品少妇爆乳无码av无码专区 | 少妇无码av无码专区在线观看 | 亚洲欧美色中文字幕在线 | 人妻无码αv中文字幕久久琪琪布 | 久久天天躁狠狠躁夜夜免费观看 | 色情久久久av熟女人妻网站 | 狠狠综合久久久久综合网 | 国产三级精品三级男人的天堂 | 欧美老妇交乱视频在线观看 | 一个人看的www免费视频在线观看 | 无码福利日韩神码福利片 | 中文字幕人成乱码熟女app | 国产舌乚八伦偷品w中 | 99精品视频在线观看免费 | 成人动漫在线观看 | 成年女人永久免费看片 | av人摸人人人澡人人超碰下载 | 亚洲s码欧洲m码国产av | 国产后入清纯学生妹 | 狠狠噜狠狠狠狠丁香五月 | 午夜免费福利小电影 | 午夜精品一区二区三区在线观看 | 色欲人妻aaaaaaa无码 | 在线a亚洲视频播放在线观看 | 国产欧美亚洲精品a | 99久久人妻精品免费二区 | 亚洲呦女专区 | 又大又黄又粗又爽的免费视频 | 亚洲国产精品一区二区美利坚 | 激情五月综合色婷婷一区二区 | 亚洲熟熟妇xxxx | 人人澡人人透人人爽 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产精品第一区揄拍无码 | 日本护士毛茸茸高潮 | 国产成人精品视频ⅴa片软件竹菊 | 老熟妇乱子伦牲交视频 | a片免费视频在线观看 | 欧美国产日韩久久mv | 欧美 日韩 亚洲 在线 | 国产亚洲精品久久久久久久 | 亚洲综合另类小说色区 | 欧美老妇与禽交 | 无码av中文字幕免费放 | 亚洲 日韩 欧美 成人 在线观看 | yw尤物av无码国产在线观看 | 性欧美疯狂xxxxbbbb | 两性色午夜视频免费播放 | 丰满少妇高潮惨叫视频 | 性啪啪chinese东北女人 | 亚洲精品成a人在线观看 | 女人被男人躁得好爽免费视频 | 欧美日韩一区二区免费视频 | 无套内谢的新婚少妇国语播放 | 国产sm调教视频在线观看 | 两性色午夜视频免费播放 | 亚洲狠狠色丁香婷婷综合 | av小次郎收藏 | 国产亚洲精品久久久久久久久动漫 | 国产激情一区二区三区 | 亚洲欧美精品aaaaaa片 | 亚洲欧美日韩综合久久久 | 久久久久av无码免费网 | 中文字幕人妻无码一区二区三区 | 免费视频欧美无人区码 | 影音先锋中文字幕无码 | 国产人妖乱国产精品人妖 | 大乳丰满人妻中文字幕日本 | 国产女主播喷水视频在线观看 | 欧美黑人乱大交 | 成人精品视频一区二区 | 成人性做爰aaa片免费看不忠 | 一本色道久久综合亚洲精品不卡 | 午夜福利不卡在线视频 | 欧美一区二区三区 | 无码播放一区二区三区 | 中文字幕无码av激情不卡 | 欧美三级a做爰在线观看 | 天堂一区人妻无码 | 婷婷综合久久中文字幕蜜桃三电影 | 九九热爱视频精品 | 六月丁香婷婷色狠狠久久 | 夜夜夜高潮夜夜爽夜夜爰爰 | 欧美人妻一区二区三区 | 精品偷拍一区二区三区在线看 | 粉嫩少妇内射浓精videos | 伊人久久大香线蕉午夜 | 国产无套内射久久久国产 | 欧美日本日韩 | 国产香蕉尹人综合在线观看 | 最新版天堂资源中文官网 | 中文字幕色婷婷在线视频 | 免费观看又污又黄的网站 | 日本大香伊一区二区三区 | 无码毛片视频一区二区本码 | 偷窥日本少妇撒尿chinese | 狠狠躁日日躁夜夜躁2020 | 中文字幕精品av一区二区五区 | 奇米影视7777久久精品 | 性生交大片免费看女人按摩摩 | 色 综合 欧美 亚洲 国产 | 亚洲色在线无码国产精品不卡 | 日韩精品a片一区二区三区妖精 | 日本精品高清一区二区 | 国产精品igao视频网 | 日韩成人一区二区三区在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 精品久久久久香蕉网 | 国产综合久久久久鬼色 | 国产亚洲美女精品久久久2020 | 国产肉丝袜在线观看 | 久久视频在线观看精品 | 亚洲国产精品无码一区二区三区 | 精品一区二区三区无码免费视频 | 亚洲精品综合五月久久小说 | 超碰97人人做人人爱少妇 | 国产精品二区一区二区aⅴ污介绍 | 国产一精品一av一免费 | 亚洲无人区一区二区三区 | 国産精品久久久久久久 | 亚洲爆乳精品无码一区二区三区 | 少妇激情av一区二区 | 女高中生第一次破苞av | 丁香啪啪综合成人亚洲 | 人妻无码αv中文字幕久久琪琪布 | 亚洲一区av无码专区在线观看 | 国产亚洲精品久久久闺蜜 | 亚洲综合色区中文字幕 | 18黄暴禁片在线观看 | 日本爽爽爽爽爽爽在线观看免 | 日韩人妻少妇一区二区三区 | 国产精品久久福利网站 | 国精产品一区二区三区 | 一本精品99久久精品77 | 免费观看的无遮挡av | 亚洲人亚洲人成电影网站色 | 国产午夜无码精品免费看 | 国产莉萝无码av在线播放 | 国产明星裸体无码xxxx视频 | 天堂久久天堂av色综合 | 久久久www成人免费毛片 | 亚洲男人av香蕉爽爽爽爽 | 亚洲国产精品久久久天堂 | 精品乱子伦一区二区三区 | 久久国产自偷自偷免费一区调 | 国产成人精品三级麻豆 | 欧美精品无码一区二区三区 | 荡女精品导航 | 精品无码一区二区三区的天堂 | 18精品久久久无码午夜福利 | 少妇愉情理伦片bd | 久久亚洲日韩精品一区二区三区 | 人人超人人超碰超国产 | av无码久久久久不卡免费网站 | 久久精品国产一区二区三区 | 疯狂三人交性欧美 | 日韩人妻无码中文字幕视频 | 成人精品一区二区三区中文字幕 | 国产免费久久久久久无码 | 领导边摸边吃奶边做爽在线观看 | 亚洲成av人片在线观看无码不卡 | 国产精品人人妻人人爽 | 人人妻人人澡人人爽欧美一区九九 | 一本无码人妻在中文字幕免费 | 久久精品人人做人人综合试看 | 亚洲精品成a人在线观看 | 东京热无码av男人的天堂 | 人妻无码αv中文字幕久久琪琪布 | 18无码粉嫩小泬无套在线观看 | 午夜福利电影 | 四十如虎的丰满熟妇啪啪 | 成在人线av无码免观看麻豆 | 天天拍夜夜添久久精品大 | 国产精品无码一区二区三区不卡 | 中文精品无码中文字幕无码专区 | 日本xxxx色视频在线观看免费 | 久久亚洲中文字幕无码 | 久久精品国产一区二区三区 | 亚洲 另类 在线 欧美 制服 | 国产精品久久久久影院嫩草 | 国产99久久精品一区二区 | 国产热a欧美热a在线视频 | 国产日产欧产精品精品app | 亚洲日韩乱码中文无码蜜桃臀网站 | 婷婷五月综合缴情在线视频 | 强辱丰满人妻hd中文字幕 | 纯爱无遮挡h肉动漫在线播放 | 97久久精品无码一区二区 | 国产香蕉尹人综合在线观看 | 小sao货水好多真紧h无码视频 | 国产绳艺sm调教室论坛 | 51国偷自产一区二区三区 | 免费播放一区二区三区 | 久久精品人妻少妇一区二区三区 | 在线看片无码永久免费视频 | 欧美日本精品一区二区三区 | 东京无码熟妇人妻av在线网址 | 男女下面进入的视频免费午夜 | 国产sm调教视频在线观看 | 精品一区二区三区波多野结衣 | 亚洲男人av天堂午夜在 | 成人片黄网站色大片免费观看 | 亚洲人成网站在线播放942 | 欧美刺激性大交 | 99久久人妻精品免费一区 | 精品日本一区二区三区在线观看 | 国产精品嫩草久久久久 | 国産精品久久久久久久 | 性欧美大战久久久久久久 | 娇妻被黑人粗大高潮白浆 | 理论片87福利理论电影 | 精品国产一区二区三区四区 | 熟女少妇在线视频播放 | 国产午夜福利100集发布 | 国产精品人妻一区二区三区四 | 老头边吃奶边弄进去呻吟 | 国产成人无码专区 | 色综合久久久无码中文字幕 | 免费视频欧美无人区码 | 人妻无码久久精品人妻 | 久久综合久久自在自线精品自 | 四虎国产精品免费久久 | av在线亚洲欧洲日产一区二区 | 亚洲综合无码久久精品综合 | 中文字幕+乱码+中文字幕一区 | 国产成人综合色在线观看网站 | 人人爽人人爽人人片av亚洲 | 亚洲精品一区二区三区四区五区 | 女人和拘做爰正片视频 | 日韩人妻无码一区二区三区久久99 | 亚洲男人av天堂午夜在 | 天天燥日日燥 | 亚洲日韩av一区二区三区中文 | 九九综合va免费看 | 中文字幕乱码人妻二区三区 | 成在人线av无码免费 | 性啪啪chinese东北女人 | 中文字幕无码乱人伦 | 在线观看国产午夜福利片 | 国产精品久久久一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 亚洲狠狠婷婷综合久久 | 色诱久久久久综合网ywww | 精品欧洲av无码一区二区三区 | 激情内射日本一区二区三区 | 国产精品无码mv在线观看 | 亚洲中文字幕成人无码 | 亚洲 日韩 欧美 成人 在线观看 | 免费中文字幕日韩欧美 | 国产色在线 | 国产 | 精品一区二区三区无码免费视频 | 在线播放亚洲第一字幕 | 亚洲色大成网站www国产 | 日本xxxx色视频在线观看免费 | 7777奇米四色成人眼影 | 日日麻批免费40分钟无码 | 久久五月精品中文字幕 | 久久精品国产大片免费观看 | 久久99精品久久久久久动态图 | 青青草原综合久久大伊人精品 | 色综合久久88色综合天天 | 18精品久久久无码午夜福利 | 久久综合给合久久狠狠狠97色 | 中文字幕无码日韩专区 | 在线精品亚洲一区二区 | 无码一区二区三区在线观看 | 成人动漫在线观看 | 精品一区二区三区无码免费视频 | 网友自拍区视频精品 | 国产精品办公室沙发 | 精品国偷自产在线 | 77777熟女视频在线观看 а天堂中文在线官网 | 曰韩无码二三区中文字幕 | 欧美丰满老熟妇xxxxx性 | 久久精品中文字幕一区 | 日本精品少妇一区二区三区 | 欧美精品一区二区精品久久 | √天堂资源地址中文在线 | 秋霞特色aa大片 | 日本免费一区二区三区最新 | 国产成人精品一区二区在线小狼 | 国产做国产爱免费视频 | 久久久久se色偷偷亚洲精品av | 国模大胆一区二区三区 | 亚洲中文字幕va福利 | 日本护士xxxxhd少妇 | 亚洲欧洲日本无在线码 | 日韩人妻无码一区二区三区久久99 | 国产免费久久久久久无码 | 免费观看又污又黄的网站 | 国产一区二区三区影院 | 免费播放一区二区三区 | 正在播放老肥熟妇露脸 | 综合网日日天干夜夜久久 | 国产人妻人伦精品1国产丝袜 | 国产亚洲视频中文字幕97精品 | 熟妇人妻无码xxx视频 | 激情人妻另类人妻伦 | 中文字幕 亚洲精品 第1页 | 国产av久久久久精东av | 久久人人爽人人人人片 | 正在播放老肥熟妇露脸 | 小鲜肉自慰网站xnxx | 在线a亚洲视频播放在线观看 | 久久久国产精品无码免费专区 | 亚洲一区二区观看播放 | 国产国语老龄妇女a片 | 中文精品久久久久人妻不卡 | 丰腴饱满的极品熟妇 | 久久久久久国产精品无码下载 | 香港三级日本三级妇三级 | 精品乱子伦一区二区三区 | 国产亚洲视频中文字幕97精品 |