日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

java

Java7 ConcurrentHashMap源码浅析

發布時間:2023/12/20 java 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java7 ConcurrentHashMap源码浅析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中的哈希表主要包括:HashMap,HashTable,ConcurrentHashMap,LinkedHashMap和TreeMap等。HashMap是無序的,并且不是線程安全的,在多線程環境下會出現數據安全性問題,典型的問題是多線程同時rehash過程中產生的死循環問題。LinkedHashMap和TreeMap都是有序的,但是兩者的有序機制不同:LinkedHashMap是通過鏈表的結構保證元素有序,而TreeMap是一種紅黑樹結構,通過堆排序保證元素有序。在Java6中HashMap,HashTable和ConcurrentHashMap都是采用數組+鏈表的數據結構,在Java8之后則采用數組+鏈表+紅黑樹的數據結構。HashTable和ConcurrentHashMap都是線程安全的,保證線程安全無外乎加鎖,但是二者加鎖的粒度不通,HashTable整個表就一把鎖,它的get和put都是通過synchronized保證安全,在多線程競爭鎖激烈的情況下,會出現性能問題。本文講解的ConcurrentHashMap是Java7版本。

數據結構

Java7中ConcurrentHashMap采用數組+鏈表的數據結構,哈希表整體上是一個Segment的數組,而每個分段Segment又是一個HashEntry的數組,每個HashEntry是一個鏈表。

ConcurrentHashMap鎖分段

鎖粗化是鎖優化的一種重要措施,而鎖粗化又包含"lock-splitting"(鎖定拆分)和"lock-stripping"(鎖條帶化)。讀寫鎖分離是一種典型的鎖定拆分方式,JUC中的ReentrantReadWriteLock就是一種讀寫分離鎖,鎖定條帶化是指將一把“大鎖”拆分成若干個“小鎖”來降低鎖的競爭。ConcurrentHashMap就是通過鎖條帶化來做鎖的優化。我們都知道ConcurrentHashMap是分段的,它的表是一個Segment數組:

/*** The segments, each of which is a specialized hash table*/ final Segment<K,V>[] segments; 復制代碼

而每個Segment都是繼承了一個ReentrantLock:

static final class Segment<K,V> extends ReentrantLock implements Serializable {...} 復制代碼

所以ConcurrentHashMap的每個Segment都是一把鎖,不同的Segment之間的讀寫不構成競爭,大大降低了鎖的競爭。既然每個Segment都是一把鎖,那么這個segment數組的長度是多少呢?也就是說整個表我們需要多少把鎖呢?

public ConcurrentHashMap(int initialCapacity,float loadFactor, int concurrencyLevel) {if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0)throw new IllegalArgumentException();if (concurrencyLevel > MAX_SEGMENTS) // MAX_SEGMENTS是指整個表最多能分成多少個segment,也即是多少把鎖concurrencyLevel = MAX_SEGMENTS;// Find power-of-two sizes best matching argumentsint sshift = 0;int ssize = 1;while (ssize < concurrencyLevel) { // 找到不小于我們指定的concurrencyLevel的2的冪次方的一個數作為segment數組的長度++sshift;ssize <<= 1;}segmentShift = 32 - sshift;segmentMask = ssize - 1;this.segments = Segment.newArray(ssize);if (initialCapacity > MAXIMUM_CAPACITY)initialCapacity = MAXIMUM_CAPACITY;int c = initialCapacity / ssize;if (c * ssize < initialCapacity)++c;int cap = 1;while (cap < c)cap <<= 1;for (int i = 0; i < this.segments.length; ++i)this.segments[i] = new Segment<K,V>(cap, loadFactor); } 復制代碼

在ConcurrentHashMap的構造函數中我們指定了concurrencyLevel,也即是多少把鎖。這個數量不能超過上限:MAX_SEGMENTS(1 << 16),鎖的個數必須是2的冪次方,如果我們指定的concurrencyLevel不是2的冪次方,構造函數會找到最接近的一個不小于我們指定的值的一個2的冪次方數作為segment數組長度。例如:我們指定concurrencyLevel為15,則最終segment數組長度為16,也即是表一共有16把鎖。設想兩個線程同時向表中插入元素,線程1插入的第0個segment,線程2插入的是第1個segment,線程1和線程2互不影響,能夠同時并行。但是HashTable就做不到這一點。

put操作

public V put(K key, V value) {Segment<K,V> s;if (value == null)throw new NullPointerException();int hash = hash(key);int j = (hash >>> segmentShift) & segmentMask; // 通過位運算得到segment的索引位置if ((s = (Segment<K,V>)UNSAFE.getObject // nonvolatile; recheck(segments, (j << SSHIFT) + SBASE)) == null) // in ensureSegments = ensureSegment(j);return s.put(key, hash, value, false); } 復制代碼

ConcurrentHashMap不支持插入null的值,因此首先校驗value是否為null。如果value是null則拋出異常。 注意這里計算segment索引方式是: (hash >>> segmentShift) & segmentMask; 而不是hash % segment數組長度。這兒是一個優化:因為取模"%"操作相對位運算來說是很慢的,因此這里是用位運算來得到segment索引。而當segment數組長度是2的冪次方記為segmentSize時:hash % segmentSize == hash & (segmentSize - 1)。這里不做證明。因此segmentSize必須是2的冪次方。來看看Segment中的put()方法:

final V put(K key, int hash, V value, boolean onlyIfAbsent) {HashEntry<K,V> node = tryLock() ? null : // 獲取segment的鎖,這里會有一個優化:獲取鎖的時候首先會通過 `tryLock()` 嘗試若干次scanAndLockForPut(key, hash, value); // 如果若干次之后還沒有獲取鎖,則用 `lock()` 方法阻塞等待,直到獲取鎖V oldValue;try {HashEntry<K,V>[] tab = table;int index = (tab.length - 1) & hash; // 得到segment的table的索引,也是通過位運算HashEntry<K,V> first = entryAt(tab, index); // table中index位置的first節點for (HashEntry<K,V> e = first;;) {if (e != null) {K k;if ((k = e.key) == key ||(e.hash == hash && key.equals(k))) { // 對應的key已經有了valueoldValue = e.value;if (!onlyIfAbsent) { // 是否覆蓋原來的valuee.value = value; // 覆蓋原來的value++modCount;}break;}e = e.next; // 遍歷}else {if (node != null)node.setNext(first); // 如果node已經在scanAndLockForPut()方法中初始化過elsenode = new HashEntry<K,V>(hash, key, value, first); // 如果node為null,則初始化int c = count + 1;if (c > threshold && tab.length < MAXIMUM_CAPACITY)rehash(node); // 如果超過閾值,則擴容elsesetEntryAt(tab, index, node); // 通過UNSAFE設置table數組的index位置的元素為node++modCount;count = c;oldValue = null;break;}}} finally {unlock();}return oldValue; } 復制代碼

首先,會獲取segment的鎖,然后判斷添加元素后是否需要擴容。注意這里的擴容是指Segment中的HashEntry[] table表數組擴容,而不是最外層的segment[]數組擴容。segment[]數組是不可擴展的,在構造函數中已經確定了segment[]數組的長度。 接著同樣通過位運算得到待添加元素在HashEntry[] table數組中的位置。接著再判斷這個鏈表中是否已經存在這個key,如果存在并且onlyIfAbsent為false,就覆蓋原value;如果鏈表不存在key,則將新的node通過UNSAFE放到table數組指定的位置。

get操作

get操作比較簡單,不需要加鎖。可見性由volatile來保證:HashEntry的value是volatile的,Segment中的HashEntry[] table數組也是volatile。這保證了其他線程對哈希表的修改能夠及時地被讀線程發現。

public V get(Object key) {Segment<K,V> s; // manually integrate access methods to reduce overheadHashEntry<K,V>[] tab;int h = hash(key);long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE; // 計算key應該落在segments數組的哪個segment中if ((s = (Segment<K,V>)UNSAFE.getObjectVolatile(segments, u)) != null &&(tab = s.table) != null) {for (HashEntry<K,V> e = (HashEntry<K,V>) UNSAFE.getObjectVolatile(tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE); // 計算key應該落在table的哪個位置e != null; e = e.next) {K k;if ((k = e.key) == key || (e.hash == h && key.equals(k))) // 如果key和當前節點的key指向同一塊內存地址或者當前節點的hashreturn e.value; // 等于key的hash并且key"equals"當前節點的key則說明當前節點就是目標節點}}return null; // key不在當前哈希表中,返回null } 復制代碼

rehash

private void rehash(HashEntry<K,V> node) {/** Reclassify nodes in each list to new table. Because we* are using power-of-two expansion, the elements from* each bin must either stay at same index, or move with a* power of two offset. We eliminate unnecessary node* creation by catching cases where old nodes can be* reused because their next fields won't change.* Statistically, at the default threshold, only about* one-sixth of them need cloning when a table* doubles. The nodes they replace will be garbage* collectable as soon as they are no longer referenced by* any reader thread that may be in the midst of* concurrently traversing table. Entry accesses use plain* array indexing because they are followed by volatile* table write.*/HashEntry<K,V>[] oldTable = table;int oldCapacity = oldTable.length;int newCapacity = oldCapacity << 1; // 每次擴容成原來capacity的2倍,這樣元素在新的table中的索引要么不變要么是原來的索引加上2的一個倍數threshold = (int)(newCapacity * loadFactor); // 新的擴容閾值HashEntry<K,V>[] newTable =(HashEntry<K,V>[]) new HashEntry[newCapacity]; // 新的segment table數組int sizeMask = newCapacity - 1;for (int i = 0; i < oldCapacity ; i++) {HashEntry<K,V> e = oldTable[i];if (e != null) {HashEntry<K,V> next = e.next;int idx = e.hash & sizeMask;if (next == null) // Single node on listnewTable[idx] = e;else { // Reuse consecutive sequence at same slotHashEntry<K,V> lastRun = e;int lastIdx = idx;for (HashEntry<K,V> last = next; // 在拷貝原來鏈表的元素到新的table中時有個優化:通過遍歷找到原先鏈表中的lastRun節點,這個節點以及它的后續節點都不需要重新拷貝,直接放到新的table中就行last != null;last = last.next) {int k = last.hash & sizeMask;if (k != lastIdx) {lastIdx = k;lastRun = last;}}newTable[lastIdx] = lastRun; // lastRun節點以及lastRun后續節點都不需要重新拷貝,直接賦值引用// Clone remaining nodesfor (HashEntry<K,V> p = e; p != lastRun; p = p.next) { // 循環拷貝原先鏈表lastRun之前的節點到新的table鏈表中V v = p.value;int h = p.hash;int k = h & sizeMask;HashEntry<K,V> n = newTable[k];newTable[k] = new HashEntry<K,V>(h, p.key, v, n);}}}}int nodeIndex = node.hash & sizeMask; // add the new nodenode.setNext(newTable[nodeIndex]); // rehash之后,執行添加新的節點newTable[nodeIndex] = node;table = newTable; } 復制代碼

由于rehash過程中是加排它鎖的,這樣其他的寫入請求將被阻塞等待。而對于讀請求,需要分情況討論:讀請求在rehash之前,此時segment中的table數組指針還是指向原先舊的數組,所以讀取是安全的;如果讀請求在rehash之后,因為table數組和HashEntry的value都是volatile,所以讀線程也能及時讀取到更新的值,因此也是線程安全的。所以rehash不會影響到讀。

remove操作

public V remove(Object key) {int hash = hash(key);Segment<K,V> s = segmentForHash(hash); // key落在哪個segment中return s == null ? null : s.remove(key, hash, null); // 如果segment為null,則說明哈希表中沒有key,直接返回null,否則調用Segment的remove }final V remove(Object key, int hash, Object value) { // Segment的remove方法if (!tryLock()) // 獲取Segment的鎖,套路還是一樣的首先進行若干次 `tryLock()`, 如果失敗了則通過 `lock()` 方法阻塞等待直到獲取鎖scanAndLock(key, hash);V oldValue = null;try {HashEntry<K,V>[] tab = table;int index = (tab.length - 1) & hash;HashEntry<K,V> e = entryAt(tab, index); // 找到key具體在table的哪個鏈表中,e代表鏈表當前節點HashEntry<K,V> pred = null; // pred代表e節點的前置節點while (e != null) {K k;HashEntry<K,V> next = e.next;if ((k = e.key) == key ||(e.hash == hash && key.equals(k))) { // 找到了這個key對應的HashEntryV v = e.value;if (value == null || value == v || value.equals(v)) {if (pred == null) // 如果當前節點的前置節點為空,說明要刪除的節點是當前鏈表的頭節點,直接將當前鏈表的頭節點指向當前節點的next就可以了setEntryAt(tab, index, next);elsepred.setNext(next); // 否則修改前置節點的next指針,指向當前節點的next節點,這樣當前節點將不再"可達",可以被GC回收++modCount;--count;oldValue = v;}break;}pred = e;e = next;}} finally {unlock(); // 解鎖}return oldValue; } 復制代碼

remove時,首先會找到這個key落在哪個Segment中,如果key沒有落在任何一個Segment中,說明key不存在,直接返回null。找到具體的Segment后,調用Segment的remove方法來進行刪除:找到key落在Segment的table數組中的哪個鏈表中,遍歷鏈表,如果要刪除的節點是當前鏈表的頭節點,則直接修改鏈表的頭指針為當前節點的next節點;如果要刪除的節點不是頭節點,繼續遍歷找到目標節點,修改目標節點的前置節點的next指針指向目標節點的next節點完成操作。 安全性分析:remove時首先會加鎖,其他mutable請求都是會被阻塞的,對于讀請求也是安全的。如果讀取的key不是當前要刪除的key不會有任何問題。如果讀取的key恰巧是當前需要刪除key:讀請求在remove之前,這時可以讀取到;如果讀請求在remove操作之后,由于HashEntry的next指針都是volatile的,所以讀線程也是可以及時發現這個key已經被刪除了的。也是安全的。

size操作

ConcurrentHashMap的size操作在Java7實現還是比較有意思的。其首先會進行若干次嘗試,每次對各個Segment的count求和,如果任意前后兩次求和結果相同,則說明在這段時間之內各個Segment的元素個數沒有改變,直接返回當前的求和結果就行了。如果超過一定重試次數之后,會采取悲觀策略,直接鎖定各個Segment,然后依次求和。注意這里是鎖定所有Segment,因此在采取悲觀策略時整個哈希表都不能有寫入操作。這里先樂觀再悲觀的策略和前面的put操作中的scanAndLockForPut有異曲同工之妙。

public int size() {// Try a few times to get accurate count. On failure due to// continuous async changes in table, resort to locking.final Segment<K,V>[] segments = this.segments; // 首先不加鎖,每次對各個Segment的count累加求和,如果任意兩次的累加結果相同,則直接返回這個結果;超過一定的次數之后悲觀鎖定所有的Segment,再求和。鎖定之后整個哈希表不能有任何的寫入操作。int size;boolean overflow; // true if size overflows 32 bitslong sum; // sum of modCountslong last = 0L; // previous sumint retries = -1; // first iteration isn't retrytry {for (;;) {if (retries++ == RETRIES_BEFORE_LOCK) { // 最大樂觀重試次數for (int j = 0; j < segments.length; ++j)ensureSegment(j).lock(); // force creation}sum = 0L;size = 0;overflow = false;for (int j = 0; j < segments.length; ++j) { // 對各個Segment的count累加,不加鎖Segment<K,V> seg = segmentAt(segments, j);if (seg != null) {sum += seg.modCount;int c = seg.count;if (c < 0 || (size += c) < 0)overflow = true;}}if (sum == last) // 如果本次累加結果和上次相同,說明這中間沒有插入或者刪除操作,直接返回這個結果break;last = sum;}} finally {if (retries > RETRIES_BEFORE_LOCK) {for (int j = 0; j < segments.length; ++j)segmentAt(segments, j).unlock();}}return overflow ? Integer.MAX_VALUE : size; // 如果溢出,返回最大整型作為結果,否則返回累加結果 } 復制代碼

總結

  • ConcurrentHashMap采取分段鎖,是一種典型的"lock-stripping"策略,目的是為了降低高并發情況下的鎖競爭。
  • rehash過程的擴容不是segment數組的擴容,而是Segment中HashEntry[] table數組的擴容,Segment[] segments數組是final的,在哈希表初始化完成后不再更改。
  • ConcurrentHashMap中很多地方用到了volatile,保證了可見性,例如,Segment中的HashEntry[] table數組,HashEntry中的value和next指針都是volatile的。
  • 加鎖是低效的,線程的上下文切換需要消耗性能,因此ConcurrentHashMap很多地方都用到了樂觀重試的策略,在超過一定次數之后再采取悲觀策略。例如size操作。
  • 在使用ConcurrentHashMap之前請明確你的數據結構是否真的會有多線程并發操作,如果沒有,僅僅是單線程操作,請使用HashMap,因為在不考慮并發安全性問題時,不論是HashTable還是ConcurrentHashMap他們的性能都沒有HashMap好。
  • 總結

    以上是生活随笔為你收集整理的Java7 ConcurrentHashMap源码浅析的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    天天色天天操综合 | 亚洲人久久久 | 午夜精品电影一区二区在线 | 国产视频资源在线观看 | 亚洲 中文 欧美 日韩vr 在线 | 国产成人在线一区 | 亚洲国产精品第一区二区 | 久久精品一二三 | 亚洲电影一级黄 | 婷婷六月天丁香 | av黄色成人 | 人人澡人人爱 | 中文字幕精品一区二区三区电影 | 97免费视频在线播放 | 91九色蝌蚪视频网站 | 狠狠躁日日躁狂躁夜夜躁 | 久久久在线免费观看 | 欧美日本在线视频 | 亚洲国内精品视频 | 2019中文最近的2019中文在线 | 日韩一区二区免费视频 | 国产一级电影网 | 一级a性色生活片久久毛片波多野 | 肉色欧美久久久久久久免费看 | 偷拍区另类综合在线 | 九九视频一区 | 国产视频高清 | 精品视频免费久久久看 | 在线日韩视频 | 久久av免费 | 国产小视频网站 | 日本一区二区三区视频在线播放 | 亚洲成人蜜桃 | 97视频在线免费 | 亚洲天堂视频在线 | 在线观看成人网 | 久久久精品国产一区二区三区 | 高清在线一区 | 天天拍天天干 | 久久久久麻豆v国产 | 国产又黄又爽又猛视频日本 | 欧美一级激情 | 久久国产精品久久国产精品 | 久久爱导航 | 福利区在线观看 | www.黄色片.com | 中文字幕之中文字幕 | 成人黄色毛片视频 | av成人黄色 | 国产精品毛片一区二区在线看 | 国产精品久久久久久久久久三级 | 天天射综合 | 狠狠狠狠狠狠狠狠干 | 国产高清av在线播放 | 99精品视频免费在线观看 | 亚洲天堂激情 | 91精品亚洲影视在线观看 | 日韩美在线 | 欧美91成人网 | 99久久精品网 | 成人av免费看 | 69精品| 97av在线视频免费播放 | 久久大香线蕉app | 亚洲一区二区三区毛片 | 奇米影视999| 国内免费久久久久久久久久久 | 国产午夜免费视频 | 亚洲黄a | 一级a性色生活片久久毛片波多野 | 久久字幕精品一区 | 国产精品人成电影在线观看 | 日韩免费观看高清 | 视频国产精品 | 欧美成年网站 | 国产精品一区二区久久国产 | 色资源网在线观看 | av三级在线播放 | 91视频麻豆视频 | 一区二区三区日韩在线观看 | 久久香蕉国产精品麻豆粉嫩av | 色av婷婷 | 久久久五月天 | 欧美与欧洲交xxxx免费观看 | 成人网色| 天天舔天天射天天操 | 成人97视频| 久草免费在线观看 | 欧美三级在线播放 | 五月天视频网 | 久久国产乱| 一区二区三区动漫 | 久久涩涩网站 | 亚洲一区精品人人爽人人躁 | 国产经典av| 美女黄网久久 | 午夜久操 | 久久亚洲综合色 | aaa免费毛片| 欧美成天堂网地址 | 国产91影视 | 天天干,天天草 | 久久精品视频免费播放 | 亚洲天堂精品视频 | 日韩久久在线 | 日韩精品一区二区三区丰满 | av888av.com | 日韩在线观看高清 | 五月婷婷六月综合 | 中文av在线天堂 | 高清中文字幕 | 九色视频自拍 | 亚洲伦理中文字幕 | 一区二区毛片 | 国产欧美中文字幕 | 99热国产在线中文 | 中文字幕精品一区二区三区电影 | 中文字幕2021 | 国产理伦在线 | 在线看黄网站 | 麻豆视频免费看 | 制服丝袜在线91 | 国产护士hd高朝护士1 | 免费下载高清毛片 | 国产黄色在线 | 亚洲精品国产欧美在线观看 | 国产精品久久久久一区二区 | 亚洲综合爱 | 9i看片成人免费看片 | 97超碰人人澡人人爱 | 欧美日韩国产一区二区三区 | 在线免费亚洲 | 国产69久久 | 国产五月色婷婷六月丁香视频 | 精品网站999www| 99资源网 | 亚洲精品456在线播放 | 中文字幕在线播放日韩 | 亚洲人成在线观看 | 婷婷综合av| 1024手机基地在线观看 | 中文字幕在线观看日本 | 国产福利91精品一区二区三区 | 亚洲欧美日韩精品久久奇米一区 | 91福利视频一区 | 96国产在线| 精品久久久久一区二区国产 | 狠狠色狠狠色综合日日小说 | 婷婷六月丁 | 美女黄频在线观看 | 日韩精品一二三 | 久久96国产精品久久99软件 | 欧美性护士 | 国产一级片观看 | 久久九九久久精品 | 久久国产免 | av高清一区二区三区 | 美女网站在线免费观看 | 国产中文字幕一区二区 | 最新中文字幕在线播放 | 国产一级免费观看 | 少妇按摩av| 女人魂免费观看 | 涩涩色亚洲一区 | 在线视频1卡二卡三卡 | 亚洲日本在线视频观看 | 日韩免费观看高清 | 又黄又刺激视频 | 婷婷中文字幕综合 | 麻豆影视在线观看 | 中文字幕有码在线播放 | 久久黄色网址 | 久艹在线播放 | 国产黄色av网站 | 亚洲天天 | 久久久久久久久久久网 | 99久久99| 亚洲精品视频免费 | 91成人黄色 | 91探花在线视频 | 久久成人国产精品 | 欧美高清视频不卡网 | 国产中文 | 国产成人精品一区二区三区免费 | 最新日韩中文字幕 | 国产小视频精品 | 久久看片网站 | 国产一区二区三区免费视频 | 久久人人爽人人片av | 黄色在线观看免费网站 | 国产伦理一区二区三区 | 玖玖在线精品 | 国产成人一区二区啪在线观看 | 九九三级毛片 | 久久免费视频精品 | 国产一区二区免费 | 天天鲁天天干天天射 | 日韩在线电影 | 天天做综合网 | 中文字幕刺激在线 | 九九色综合 | 久久视频网 | 久久久久久久久久久久久久电影 | 日日操日日操 | 国产色视频网站 | 99精品久久久久久久久久综合 | 丁香婷婷成人 | 亚洲精品黄色在线观看 | 成人精品视频 | 免费视频xnxx com | 久久久国产电影 | 亚洲午夜不卡 | 成人一级视频在线观看 | www免费看片com | 国产免费又爽又刺激在线观看 | 日本系列中文字幕 | 深夜免费小视频 | 91在线中文 | 一区二区三区电影 | 亚洲一级片在线看 | 国产精品va最新国产精品视频 | 国产精品初高中精品久久 | 久久大香线蕉app | 日韩欧美国产精品 | 视频一区二区视频 | 婷婷激情欧美 | 97免费视频在线播放 | 日韩精品一区二区三区免费观看 | 国产精品网站一区二区三区 | 在线国产激情视频 | 夜添久久精品亚洲国产精品 | 日韩av一区二区在线播放 | 成人av电影在线播放 | 91av在线免费播放 | 天堂va在线高清一区 | 日韩欧美在线视频一区二区三区 | 激情婷婷 | 天天av综合网 | 日韩理论片在线 | 午夜精品久久一牛影视 | 99热官网 | 婷婷性综合 | 国产精品久久久久久久久久久久午夜片 | 国产精品无av码在线观看 | 久久试看 | 开心激情网五月天 | 日韩xxxx视频 | 中文字幕欧美日韩va免费视频 | 国内久久久 | 国产九色在线播放九色 | 久久精品99国产国产 | www.狠狠插.com| av片无限看| 国产精品第一 | 午夜色婷婷 | 欧美成人影音 | 99精品视频在线观看播放 | 久久精品亚洲精品国产欧美 | 波多野结衣精品视频 | 天堂av观看 | 夜夜夜精品 | 国产在线观看高清视频 | 成人资源网 | 日日天天 | 国产成人av在线影院 | 一级做a视频 | 麻豆视频免费 | 91视频在线播放视频 | 久久爱992xxoo | 亚洲区视频在线观看 | 97电影在线观看 | 人人爽人人爽人人爽人人爽 | 黄色91免费观看 | 中文成人字幕 | 日韩免费在线观看 | 欧美大码xxxx| 手机av资源 | 91在线免费看片 | 亚洲午夜久久久久久久久久久 | 日韩va欧美va亚洲va久久 | 黄av在线| 精品国产乱码久久久久久浪潮 | 国产精品一区二区三区在线看 | 特黄色大片 | 四虎永久免费网站 | 国产精品久久久久9999吃药 | 亚洲国内精品在线 | 久久婷婷五月综合色丁香 | 黄色精品国产 | 奇米7777狠狠狠琪琪视频 | 国产天天综合 | 免费日韩电影 | 久久久久久国产精品免费 | 91自拍视频在线 | 日韩中文字幕免费视频 | 日韩一区二区三区免费电影 | 91av亚洲 | 国产视频在 | 欧美久久综合 | 日韩精品一区二区三区免费观看 | 亚洲电影av在线 | 在线观看日韩专区 | 久久精品电影院 | 97人人模人人爽人人喊网 | 亚洲最大免费成人网 | 午夜国产在线 | 久久福利国产 | 日本久久中文 | 久久字幕 | 精品国产乱码一区二 | 亚洲 欧美 另类人妖 | 天天做天天爱天天爽综合网 | 91av在线国产| 成人毛片一区二区三区 | 91成人免费电影 | 99视频这里有精品 | 日韩在线视频观看 | 日韩精品一区二区在线 | 久久综合九色综合久久久精品综合 | 久草在线免费电影 | 国产一区二区不卡视频 | 在线视频婷婷 | 日本最新高清不卡中文字幕 | 亚洲精品av中文字幕在线在线 | 丝袜av一区| 免费看黄视频 | 特级xxxxx欧美 | 天天爽天天爽天天爽 | 射射射综合网 | 日本韩国欧美在线观看 | 欧美精品久久天天躁 | 亚洲精品综合欧美二区变态 | 欧美日韩中文字幕在线视频 | 日韩欧美精品免费 | 在线影院中文字幕 | 一区二区三区四区影院 | 97精品国产97久久久久久春色 | 久久激情五月丁香伊人 | 成人久久18免费网站 | 99久久精品国产免费看不卡 | 午夜 久久 tv| 超碰在线官网 | 日韩免费一级电影 | 免费国产在线精品 | 亚洲国产字幕 | 国产精品久久久久毛片大屁完整版 | 99视频免费播放 | 国产99自拍 | 免费视频一级片 | 日韩av视屏 | 天天操天天干天天操天天干 | 蜜桃av观看 | 久久久福利视频 | 一区三区视频在线观看 | 久久久www成人免费毛片麻豆 | 伊人狠狠色丁香婷婷综合 | 奇米先锋 | 免费在线观看av网站 | 四虎永久精品在线 | 在线精品观看国产 | 精品久久久久久亚洲综合网 | 色偷偷人人澡久久超碰69 | 五月开心六月婷婷 | 久久精品一 | 九九久久国产精品 | 青春草视频 | 天天玩天天干天天操 | 五月天婷亚洲天综合网鲁鲁鲁 | 在线观看黄网 | 成人羞羞免费 | 一区二区三区在线免费观看视频 | 天天爽天天做 | 91亚洲精品国产 | 国产美女视频免费观看的网站 | 在线综合 亚洲 欧美在线视频 | 久久国产精品一区二区 | 精品久久久久久久久久岛国gif | 91av在线电影 | 亚洲日本激情 | 欧美性黑人 | 亚洲免费永久精品国产 | 午夜视频在线观看网站 | 国产一区二区在线免费视频 | 在线免费视频 你懂得 | 国内精品中文字幕 | 久久综合精品一区 | 99久久精品视频免费 | 亚州性色 | 狠狠色综合网站久久久久久久 | 成人免费 在线播放 | 黄色中文字幕 | 丁香视频五月 | 亚洲精品色视频 | 久久综合操 | 久久精品九色 | 国产成人333kkk| 亚洲视频大全 | 高清av免费观看 | 亚洲午夜精| 99视频在线精品国自产拍免费观看 | 久久99久久99精品免观看软件 | av综合 日韩| 在线色视频小说 | 97影视 | 97碰碰视频 | 91久久精品一区二区二区 | 91精品导航 | 精品毛片久久久久久 | 国产91在线 | 美洲 | 亚洲一级性 | 一区二区影院 | 国产精品专区h在线观看 | 久久久香蕉视频 | 中文一区二区三区在线观看 | 麻豆视频入口 | 欧洲一区二区三区精品 | 狠狠色狠狠色终合网 | 中文字幕久久精品一区 | 久久99精品国产一区二区三区 | 欧美一级看片 | 久久成人免费电影 | 在线精品国产 | 激情丁香| 日韩一区二区免费视频 | 日韩久久精品一区 | 亚洲美女在线一区 | 一区二区视频电影在线观看 | 久久久久久久久久久久亚洲 | 最新av在线网站 | 最近日本中文字幕 | 国产精品一区二区三区在线 | 亚州日韩中文字幕 | 香蕉在线观看 | 国产精品1区2区在线观看 | 亚洲视频在线免费看 | 91片黄在线观看动漫 | 亚洲在线视频免费 | 国产91精品在线观看 | 免费视频黄色 | 日韩草比| 2023av在线 | 亚洲资源在线网 | 国产精品久久久久久久久久免费 | 国产亚洲精品免费 | 国语精品免费视频 | 激情视频综合网 | 亚洲精品乱码久久 | 久久久国产精品亚洲一区 | 中文字幕免费观看全部电影 | 在线国产视频 | 91喷水| 国产成人一区二区三区免费看 | 亚洲精品久久久蜜桃 | 国产午夜av| 黄色软件视频大全免费下载 | 在线色吧 | 手机看片1042 | 精品国产人成亚洲区 | 国产精品99视频 | 国产精品18久久久久久久 | 91亚洲精品久久久蜜桃借种 | 成人三级黄色 | 久久欧洲视频 | 香蕉97视频观看在线观看 | av看片在线观看 | 四虎成人网 | 一本一本久久aa综合精品 | 久久久免费毛片 | 日韩大片免费在线观看 | 亚洲va欧美va人人爽春色影视 | 五月婷婷视频 | 久草视频在线新免费 | 亚洲乱码精品久久久久 | 亚洲精品综合在线 | 久草在线观 | 国内小视频 | 欧美日视频 | 日韩在线视频线视频免费网站 | 中文字幕观看视频 | 久免费 | 国产一区二区三区网站 | 免费在线观看一级片 | 日韩视频一区二区三区在线播放免费观看 | 欧美日韩高清 | 免费观看日韩av | 婷婷干五月 | 午夜视频在线观看欧美 | 丁香花在线观看免费完整版视频 | 免费视频一区 | 国产色视频网站2 | 亚洲,播放| 美女视频黄频大全免费 | 最新色站 | 一级大片在线观看 | 香蕉久久国产 | 国产精品久久婷婷六月丁香 | 欧美色图p | h文在线观看免费 | 国产精品一区二区免费视频 | 国际精品久久久 | 色在线国产 | 国产日韩视频在线观看 | 国产精品美女久久久久久2018 | 国产精品一区二区白浆 | 亚洲精品电影在线 | 奇米导航 | 久草观看视频 | 国产成人精品一区二区在线观看 | 久久亚洲综合色 | 日本中文在线播放 | 欧美综合在线视频 | 99久久99| av在线最新 | 色综合久久天天 | 在线黄色观看 | 国产精品igao视频网入口 | 最近日本韩国中文字幕 | 国产视频九色蝌蚪 | 97成人资源站 | 91成人网页版 | 日韩中文字幕a | 91麻豆精品国产91久久久无需广告 | www.com久久久 | 日韩av偷拍 | 插久久 | 欧美精品在线一区 | 99色| 不卡电影一区二区三区 | 激情综合亚洲 | 香蕉视频在线视频 | 操操操com| 2024国产精品视频 | 91亚洲精品久久久 | 午夜久草| 久久优 | 久久99欧美 | 91在线免费视频 | 69国产成人综合久久精品欧美 | 日韩aⅴ视频| 免费在线观看黄色网 | 91亚洲精品乱码久久久久久蜜桃 | 日本女人逼 | 日韩国产在线观看 | av在线进入 | 久久久久五月 | 色综合久久网 | 成人一级在线 | 国产精品成久久久久三级 | av中文字幕网站 | www.操.com| 99在线观看免费视频精品观看 | 超碰97人| 一性一交视频 | 国产精国产精品 | 精品免费一区二区三区 | 欧美另类sm图片 | 免费观看成年人视频 | 国产手机视频在线播放 | 国产福利不卡视频 | 天天舔天天射天天操 | 国产精品成人久久久久 | 免费在线观看一级片 | 99热精品视 | 日b黄色片 | 日韩在线高清 | 国产三级精品三级在线观看 | 五月婷婷色播 | 日韩午夜小视频 | 午夜性生活| 奇米影视999 | 久久久黄色av| 91黄色在线视频 | 黄色成人av网址 | 欧美精品免费视频 | 中文字幕免费中文 | 日韩在线精品 | 一本大道久久精品懂色aⅴ 五月婷社区 | 国产精品一区二区久久 | a在线免费 | 黄色高清视频在线观看 | 日韩aⅴ视频 | 久久伊人操| 国产一区二区在线观看视频 | 久久国产精品一国产精品 | 国产福利专区 | av在线看片| 中文字幕在线高清 | 国产美女免费看 | 91成人精品一区在线播放69 | www.色午夜.com | 久久一区二区三区超碰国产精品 | 天堂在线一区二区三区 | 亚洲精品88欧美一区二区 | 久久首页| 黄色特一级片 | 久久99九九99精品 | 2021国产在线| 久久五月天综合 | 亚洲精欧美一区二区精品 | 久爱综合 | 国产精品视频地址 | 久久专区 | 亚洲电影在线看 | 91久久国产露脸精品国产闺蜜 | 国产亚洲精品美女 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产精品免费麻豆入口 | av网站免费线看精品 | 久久久久久久久久亚洲精品 | 色网站视频 | 成人黄色片在线播放 | 成人黄色电影在线观看 | 美女国产在线 | 国产成人一区二区啪在线观看 | 色婷五月天 | 国产啊v在线观看 | 九九热免费视频在线观看 | 婷婷在线免费观看 | 偷拍久久久 | 日韩av不卡在线播放 | 久久这里只有精品首页 | 五月天婷婷免费视频 | 91在线视频网址 | 午夜精品久久久 | 91精品成人 | 亚洲不卡123| 中文字幕免费高清在线 | 网址你懂的在线观看 | 国产三级av在线 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 在线网站黄 | 国产成人免费网站 | 精品国产综合区久久久久久 | 欧美一级激情 | 天天做日日爱夜夜爽 | 国产精品毛片一区 | 黄色成人免费电影 | 69视频网站 | 奇人奇案qvod | 四虎www.| 少妇bbb搡bbbb搡bbbb | 亚洲午夜在线视频 | 国产精品亚 | 国产亚洲成人网 | 色婷婷成人网 | 九草在线视频 | 久久精品一区二区国产 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 中文成人字幕 | 深爱五月激情网 | 免费在线激情视频 | 五月天网站在线 | 婷婷久操 | 怡红院av| 毛片二区 | 99久久婷婷国产一区二区三区 | 欧美一二三区在线观看 | 日韩成人高清在线 | 国产精品久久亚洲 | av中文字幕电影 | 精品在线观看视频 | 91传媒在线看 | 亚洲欧美乱综合图片区小说区 | 一区二区三区久久精品 | 国产精品视频地址 | 亚洲视频观看 | 日韩免费观看视频 | 探花视频在线观看免费 | 久久精品高清视频 | a级片久久久 | 亚洲欧美视频在线 | 久久在草 | 天天爽天天射 | 色综合久久久 | 日日夜夜狠狠干 | 色婷婷狠狠18| 色网站免费在线观看 | 亚洲国产精品电影 | 操操色 | 韩日电影在线观看 | 国产精品久久久久久69 | 久久精品三 | 欧美日韩免费一区 | 99久久久国产精品免费观看 | 在线电影91 | 高清国产午夜精品久久久久久 | 狠狠色丁香婷婷综合欧美 | 亚洲专区视频在线观看 | 99久久精品免费看国产 | 久久久不卡影院 | 日韩在线大片 | 中日韩在线视频 | 国产麻豆精品一区二区 | 人人天天夜夜 | 欧美精品久久久久a | 一区二区理论片 | 日本中文不卡 | 中文成人字幕 | 成人福利在线播放 | 国产人成一区二区三区影院 | 亚洲国产精品一区二区久久,亚洲午夜 | 精品一区二区av | 91视频成人免费 | 欧美日韩一区三区 | 国产精品免费看久久久8精臀av | a视频在线看| 97视频免费在线看 | 欧美日韩观看 | 99热在线国产精品 | 公开超碰在线 | 婷婷综合 | 国产视频欧美视频 | 国产视频久久久 | 69久久夜色精品国产69 | 成人a视频在线观看 | 欧美性生爱 | 午夜免费福利视频 | 在线观看一区 | 日韩中文字幕在线不卡 | 九九久久在线看 | 国产香蕉在线 | 高清久久久久久 | 免费视频久久 | 亚洲自拍偷拍色图 | 天天躁日日躁狠狠躁av中文 | 欧美日韩3p| 久久久视频在线 | 91精品啪| 国产不卡免费视频 | 免费亚洲视频在线观看 | 四虎永久免费在线观看 | 国产片免费在线观看视频 | 高清不卡毛片 | 天天夜夜亚洲 | 免费高清在线视频一区· | 免费视频资源 | 亚洲精品男人天堂 | 福利视频午夜 | 黄色小视频在线观看免费 | 三级黄色网址 | 久久精品2 | 亚洲综合成人在线 | 亚洲人人爱 | 国产亚洲视频系列 | 久久网站免费 | 久久精品99国产 | 国产一区二区中文字幕 | 成人精品在线 | 国产激情小视频在线观看 | av免费在线看网站 | 不卡av在线| 免费看日韩 | 欧美伦理一区二区 | 国产黄色视 | 在线观看中文字幕视频 | 国产精品国产三级国产专区53 | 久久观看免费视频 | 日韩亚洲在线观看 | 综合久久网站 | 人人澡超碰碰97碰碰碰软件 | 天天干天天拍天天操天天拍 | 国产玖玖在线 | 99在线观看精品 | 又黄又刺激 | 天天色综合1 | 日韩在线观看一区二区三区 | 久久成人午夜视频 | 九九精品在线观看 | 夜夜骑天天操 | 99久久99久久精品国产片果冰 | 日本女人的性生活视频 | 久久精品视频网站 | 欧美精品一区二区性色 | 高清av中文在线字幕观看1 | 激情深爱.com | 黄色91免费观看 | 国产3p视频 | 国产精品久久人 | 亚洲国产精品推荐 | 九九久久电影 | 一级黄色免费 | 久久久91精品国产一区二区三区 | 四虎5151久久欧美毛片 | 日韩最新理论电影 | 玖玖爱免费视频 | 麻豆视频国产精品 | 日韩色区 | 国产免费看 | 久久999久久 | 最近中文字幕在线中文高清版 | 国产黄色av影视 | 伊人网站| 久久久久激情视频 | 国产 欧美 在线 | 国产精品免费一区二区三区 | av电影亚洲 | 在线中文字幕av观看 | 精品国产亚洲一区二区麻豆 | 天天干夜夜操视频 | 97精品国产97久久久久久免费 | 最近中文字幕第一页 | 成人av电影在线观看 | 九九热只有这里有精品 | 91新人在线观看 | 日本在线观看一区二区 | 91 在线视频 | 99久久影院 | 一区二区三区免费在线观看视频 | 国产精品白浆 | 午夜精品一区二区国产 | 精品麻豆入口免费 | 国产精品乱码久久久 | 91热在线 | 免费网站黄| 日日天天av | 天天操天天爽天天干 | 97在线观看免费高清 | 亚洲精品成人av在线 | www.激情五月.com | 日韩一区二区免费视频 | 欧美精品中文在线免费观看 | 国产高清视频在线观看 | 成人av片免费看 | 日韩剧 | 婷婷六月久久 | 国产精品一区二区久久精品爱微奶 | 免费在线国产视频 | 亚洲欧美成人网 | 这里只有精彩视频 | 午夜在线资源 | 激情五月亚洲 | aaa免费毛片 | 国产录像在线观看 | 免费a级观看 | 亚洲极色 | 中文字幕2021 | 丁香婷婷在线 | 亚洲精品xxx | 久久久久欧美精品 | 日韩久久影院 | 91色网址 | 中文字字幕在线 | av理论电影| 天天色天天射天天干 | 日韩在线观看精品 | 2021国产精品视频 | 成人av中文字幕在线观看 | 人人cao | 亚洲黄色免费网站 | wwxxxx日本| 99精品国产高清在线观看 | 人人玩人人添人人澡超碰 | 国产裸体视频网站 | 亚洲aⅴ一区二区三区 | 欧美在线观看视频一区二区三区 | 欧美视频国产视频 | 免费在线观看av | 99国产成+人+综合+亚洲 欧美 | 久久露脸国产精品 | 久久精品这里都是精品 | 久久久美女 | 免费观看性生活大片 | 亚洲精品97 | 日韩黄色在线观看 | 久草在线视频在线 | 97超碰资源站 | 国产无限资源在线观看 | 爱射综合| 免费色婷婷 | 亚洲欧洲av在线 | 久草在线最新免费 | 999久久国产精品免费观看网站 | 精品视频在线免费观看 | 久久视频在线免费观看 | 久草在线最新视频 | 久久观看免费视频 | 成年人免费在线播放 | 欧美日韩中字 | 一区二区三区在线影院 | 99久久精品免费看国产一区二区三区 | 97香蕉久久超级碰碰高清版 | 韩国精品福利一区二区三区 | 米奇四色影视 | 国产成人在线网站 | 99视频精品全部免费 在线 | 欧美日韩啪啪 | 久久999精品| 99在线观看视频 | 亚洲激情婷婷 | 四虎精品成人免费网站 | 久久免费电影网 | 看av免费| www日日| 欧美午夜理伦三级在线观看 | 在线观看亚洲精品视频 | 免费成人黄色片 | 色婷婷88av视频一二三区 | 91成人欧美 | 最近能播放的中文字幕 | 黄色片免费电影 | 国内精自线一二区永久 | 欧美a影视| 亚洲播播 | 国产精品v欧美精品v日韩 | 国产精品手机在线播放 | 久草在线资源视频 | 欧美成人在线免费 | 久草在线电影网 | 久久综合中文色婷婷 | 午夜性生活片 | 五月色综合 | 深夜国产福利 | 国产一区网址 | 在线看一区| 波多野结衣电影一区二区三区 | 狠狠干天天干 | 日韩欧美电影在线观看 | 99在线热播精品免费99热 | 国产小视频在线 | 狠狠gao| 日韩理论视频 | 中文字幕永久在线 | 欧美日韩精品久久久 | 91香蕉视频黄色 | 成年人国产视频 | 亚洲欧洲精品一区二区 | 国产高清视频免费最新在线 | 精品国产伦一区二区三区观看说明 | 国产69精品久久久久99尤 | 亚洲成人高清在线 | 天天色天天射天天操 | av免费电影在线 | 国产中文字幕在线视频 | 麻豆视频免费观看 | 亚洲免费公开视频 | 五月天婷婷免费视频 | 国产高清成人在线 | 免费观看一区二区三区视频 | 成人午夜剧场在线观看 | 一二区av| 97在线视| 三级大片网站 | 亚洲无吗天堂 | 日韩av一卡二卡三卡 | 国产 精品 资源 | 成人在线视频免费观看 | 成在人线av| 国产视频综合在线 | 久草爱视频 | 中文字幕在线视频一区二区三区 | 国产正在播放 | 黄色字幕网 | 99精品久久只有精品 | 99精品视频在线播放免费 | 婷婷国产v亚洲v欧美久久 | 亚洲综合激情网 | 国产精品99久久久 | 中文字幕婷婷 | 国产麻豆剧果冻传媒视频播放量 | 香蕉在线播放 | 精品视频99 | 色综合天天射 | 91在线麻豆| 特级aaa毛片 | 在线黄色国产电影 | 欧美一级电影免费观看 | 天天射天天搞 | 国产免费一区二区三区网站免费 | 人人舔人人插 | 天天干天天弄 | 久久精品国产99国产 | 人人插人人做 | 成人丝袜 | 99精品福利视频 | 操碰av | 人人爱人人舔 | 粉嫩av一区二区三区入口 | 成人午夜免费福利 | 亚洲一级二级三级 | 国产精品不卡 | 久久人人97超碰精品888 | 国产精品12345 | 国产视频不卡 | 丁香色综合 | 久久久久97国产 | 国产精品美女网站 | 97超碰国产在线 | 国产精品免费人成网站 | 久久成人一区 | 人人狠狠综合久久亚洲婷 | 人人看人人爱 | 免费成人av电影 | 久久久国际精品 | av东方在线 | 日韩精品在线看 | 国产网站在线免费观看 | 久久综合毛片 | 国产免费一区二区三区最新 |