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

歡迎訪問 生活随笔!

生活随笔

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

java

Java集合篇:ConcurrentHashMap详解(JDK1.6)

發布時間:2024/9/30 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合篇:ConcurrentHashMap详解(JDK1.6) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(本文有關ConcurrentHashMap的源碼都是基于JDK1.6的)

(基于JDK1.8的版本可以參考這篇文章:https://blog.csdn.net/a745233700/article/details/83123359)

摘要:

  ConcurrentHashMap是J.U.C(java.util.concurrent包)的重要成員,它是HashMap的一個線程安全的、支持高效并發的版本。在默認理想狀態下,ConcurrentHashMap可以支持16個線程執行并發寫操作及任意數量線程的讀操作。本文將結合Java內存模型,分析JDK源代碼,探索ConcurrentHashMap高并發的具體實現機制,包括其在JDK中的定義和結構、并發存取、重哈希和跨段操作,并著重剖析了ConcurrentHashMap讀操作不需要加鎖和分段鎖機制的內在奧秘和原理。


一. ConcurrentHashMap 概述:

  HashMap 是 Java Collection Framework 的重要成員,也是Map族(如下圖所示)中我們最為常用的一種。不過遺憾的是,HashMap不是線程安全的。也就是說,在多線程環境下,操作HashMap會導致各種各樣的線程安全問題,比如在HashMap擴容重哈希時出現的死循環問題,臟讀問題等。HashMap的這一缺點往往會造成諸多不便,雖然在并發場景下HashTable和由同步包裝器包裝的HashMap(Collections.synchronizedMap(Map<K,V> m) )可以代替HashMap,但是它們都是通過使用一個全局的鎖來同步不同線程間的并發訪問,因此會帶來不可忽視的性能問題。慶幸的是,JDK為我們解決了這個問題,它為HashMap提供了一個線程安全的高效版本 —— ConcurrentHashMap。在ConcurrentHashMap中,無論是讀操作還是寫操作都能保證很高的性能:在進行讀操作時(幾乎)不需要加鎖,而在寫操作時通過鎖分段技術只對所操作的段加鎖而不影響客戶端對其它段的訪問。特別地,在理想狀態下,ConcurrentHashMap 可以支持 16 個線程執行并發寫操作(如果并發級別設為16),及任意數量線程的讀操作。

如下圖所示,ConcurrentHashMap本質上是一個Segment數組,而一個Segment實例又包含若干個桶,每個桶都包含一條由若干個HashEntry對象鏈接起來的鏈表。ConcurrentHashMap的高效并發機制是通過以下三方面來保證的(具體細節見后文闡述):

  • 通過鎖分段技術保證并發環境下的寫操作;
  • 通過HashEntry的不變形、volatile變量的內存可見性和加鎖重讀機制 保證高效、安全的讀操作;
  • 通過不加鎖和加鎖 兩種方案控制跨段操作的安全性。


二. HashMap 線程不安全的典型表現:

我們先回顧一下HashMap。HashMap是一個數組鏈表,當一個key/Value對被加入時,首先會通過Hash算法定位出這個鍵值對要被放入的桶,然后就把它插到相應桶中。如果這個桶中已經有元素了,那么發生了碰撞,這樣會在這個桶中形成一個鏈表。一般來說,當有數據要插入HashMap時,都會檢查容量有沒有超過設定的thredhold,如果超過,需要增大HashMap的尺寸,但是這樣一來,就需要對整個HashMap里的節點進行重哈希操作。在重哈希的過程中,就會出現HashMap線程不安全的典型表現 —— 死循環。

HashMap重哈希的關鍵源碼如下:

/*** Transfers all entries from current table to newTable.*/void transfer(Entry[] newTable) {// 將原數組 table 賦給數組 srcEntry[] src = table;int newCapacity = newTable.length;// 將數組 src 中的每條鏈重新添加到 newTable 中for (int j = 0; j < src.length; j++) {Entry<K,V> e = src[j];if (e != null) {src[j] = null; // src 回收// 將每條鏈的每個元素依次添加到 newTable 中相應的桶中do {Entry<K,V> next = e.next;// e.hash指的是 hash(key.hashCode())的返回值;// 計算在newTable中的位置,注意原來在同一條子鏈上的元素可能被分配到不同的桶中int i = indexFor(e.hash, newCapacity); e.next = newTable[i];newTable[i] = e;e = next;} while (e != null);}}}

1、單線程環境下的重哈希過程演示:

單線程情況下,rehash 不會出現任何問題,如上圖所示。假設hash算法就是最簡單的 key mod table.length(也就是桶的個數)。最上面的是old hash表,其中的Hash表桶的個數為2, 所以對于 key = 3、7、5 的鍵值對在 mod 2以后都沖突在table[1]這里了。接下來的三個步驟是,Hash表resize成4,然后對所有的鍵值對重哈希的過程。


2、多線程環境下的重哈希過程演示:

假設我們有兩個線程,我用紅色和淺藍色標注了一下,被這兩個線程共享的資源正是要被重哈希的原來1號桶中的Entry鏈。我們再回頭看一下我們的transfer代碼中的這個細節:

do {Entry<K,V> next = e.next; // <--假設線程一執行到這里就被調度掛起了int i = indexFor(e.hash, newCapacity);e.next = newTable[i];newTable[i] = e;e = next; } while (e != null);

而我們的線程二執行完成了,于是我們有下面的這個樣子:

注意,在Thread2重哈希后,Thread1的指針e和指針next分別指向了Thread2重組后的鏈表(e指向了key(3),而next指向了key(7))。此時,Thread1被調度回來執行:Thread1先是執行 newTalbe[i] = e;然后是e = next,導致了e指向了key(7),而下一次循環的next = e.next導致了next指向了key(3),如下圖所示:

這時,一切安好。Thread1有條不紊的工作著:把key(7)摘下來,放到newTable[i]的第一個,然后把e和next往下移,如下圖所示:

在此時,特別需要注意的是,當執行e.next = newTable[i]后,會導致 key(3).next 指向了 key(7),而此時的key(7).next 已經指向了key(3),環形鏈表就這樣出現了,如下圖所示。于是,當我們的Thread1調用HashMap.get(11)時,悲劇就出現了 —— Infinite Loop。

這是HashMap在并發環境下使用中最為典型的一個問題,就是在HashMap進行擴容重哈希時導致Entry鏈形成環。一旦Entry鏈中有環,勢必會導致在同一個桶中進行插入、查詢、刪除等操作時陷入死循環。


三. ConcurrentHashMap 在 JDK 中的定義:

為了更好的理解 ConcurrentHashMap 高并發的具體實現,我們先來了解它在JDK中的定義。ConcurrentHashMap類中包含兩個靜態內部類 HashEntry 和 Segment,其中 HashEntry 用來封裝具體的K/V對,是個典型的四元組;Segment 用來充當鎖的角色,每個 Segment 對象守護整個ConcurrentHashMap的若干個桶 (可以把Segment看作是一個小型的哈希表),其中每個桶是由若干個 HashEntry 對象鏈接起來的鏈表。總的來說,一個ConcurrentHashMap實例中包含由若干個Segment實例組成的數組,而一個Segment實例又包含由若干個桶,每個桶中都包含一條由若干個 HashEntry 對象鏈接起來的鏈表。特別地,ConcurrentHashMap 在默認并發級別下會創建16個Segment對象的數組,如果鍵能均勻散列,每個 Segment 大約守護整個散列表中桶總數的 1/16。


1、類結構定義:

ConcurrentHashMap 繼承了AbstractMap并實現了ConcurrentMap接口,其在JDK中的定義為:

public class ConcurrentHashMap<K, V> extends AbstractMap<K, V>implements ConcurrentMap<K, V>, Serializable {... }

2、成員變量定義:

HashMap相比,ConcurrentHashMap 增加了兩個屬性用于定位段,分別是 segmentMask 和 segmentShift。此外,不同于HashMap的是,ConcurrentHashMap底層結構是一個Segment數組,而不是Object數組,具體源碼如下:

/*** Mask value for indexing into segments. The upper bits of a* key's hash code are used to choose the segment.*/final int segmentMask; // 用于定位段,大小等于segments數組的大小減 1,是不可變的/*** Shift value for indexing within segments.*/final int segmentShift; // 用于定位段,大小等于32(hash值的位數)減去對segments的大小取以2為底的對數值,是不可變的/*** The segments, each of which is a specialized hash table*/final Segment<K,V>[] segments; // ConcurrentHashMap的底層結構是一個Segment數組

3、段的定義:Segment:

Segment 類繼承于 ReentrantLock 類,從而使得 Segment 對象能充當鎖的角色。每個 Segment 對象用來守護它的成員對象 table 中包含的若干個桶。table 是一個由 HashEntry 對象組成的鏈表數組,table 數組的每一個數組成員就是一個桶。

在Segment類中,count 變量是一個計數器,它表示每個 Segment 對象管理的 table 數組包含的 HashEntry 對象的個數,也就是 Segment 中包含的 HashEntry 對象的總數。特別需要注意的是,之所以在每個 Segment 對象中包含一個計數器,而不是在 ConcurrentHashMap 中使用全局的計數器,是對 ConcurrentHashMap 并發性的考慮:因為這樣當需要更新計數器時,不用鎖定整個ConcurrentHashMap。事實上,每次對段進行結構上的改變,如在段中進行增加/刪除節點(修改節點的值不算結構上的改變),都要更新count的值,此外,在JDK的實現中每次讀取操作開始都要先讀取count的值。特別需要注意的是,count是volatile的,這使得對count的任何更新對其它線程都是立即可見的。modCount用于統計段結構改變的次數,主要是為了檢測對多個段進行遍歷過程中某個段是否發生改變,這一點具體在談到跨段操作時會詳述。threashold用來表示段需要進行重哈希的閾值。loadFactor表示段的負載因子,其值等同于ConcurrentHashMap的負載因子的值。table是一個典型的鏈表數組,而且也是volatile的,這使得對table的任何更新對其它線程也都是立即可見的。段(Segment)的定義如下:

/*** Segments are specialized versions of hash tables. This* subclasses from ReentrantLock opportunistically, just to* simplify some locking and avoid separate construction.*/static final class Segment<K,V> extends ReentrantLock implements Serializable {/*** The number of elements in this segment's region.*/transient volatile int count; // Segment中元素的數量,可見的/*** Number of updates that alter the size of the table. This is* used during bulk-read methods to make sure they see a* consistent snapshot: If modCounts change during a traversal* of segments computing size or checking containsValue, then* we might have an inconsistent view of state so (usually)* must retry.*/transient int modCount; //對count的大小造成影響的操作的次數(比如put或者remove操作)/*** The table is rehashed when its size exceeds this threshold.* (The value of this field is always <tt>(int)(capacity ** loadFactor)</tt>.)*/transient int threshold; // 閾值,段中元素的數量超過這個值就會對Segment進行擴容/*** The per-segment table.*/transient volatile HashEntry<K,V>[] table; // 鏈表數組/*** The load factor for the hash table. Even though this value* is same for all segments, it is replicated to avoid needing* links to outer object.* @serial*/final float loadFactor; // 段的負載因子,其值等同于ConcurrentHashMap的負載因子...}

我們知道,ConcurrentHashMap允許多個修改(寫)操作并發進行,其關鍵在于使用了鎖分段技術,它使用了不同的鎖來控制對哈希表的不同部分進行的修改(寫),而 ConcurrentHashMap 內部使用段(Segment)來表示這些不同的部分。實際上,每個段實質上就是一個小的哈希表,每個段都有自己的鎖(Segment 類繼承了 ReentrantLock 類)。這樣,只要多個修改(寫)操作發生在不同的段上,它們就可以并發進行。下圖是依次插入 ABC 三個 HashEntry 節點后,Segment 的結構示意圖:


4、基本元素:HashEntry:

HashEntry用來封裝具體的鍵值對,是個典型的四元組。與HashMap中的Entry類似,HashEntry也包括同樣的四個域,分別是key、hash、value和next。不同的是,在HashEntry類中,key,hash和next域都被聲明為final的,value域被volatile所修飾,因此HashEntry對象幾乎是不可變的,這是ConcurrentHashmap讀操作并不需要加鎖的一個重要原因。next域被聲明為final本身就意味著我們不能從hash鏈的中間或尾部添加或刪除節點,因為這需要修改next引用值,因此所有的節點的修改只能從頭部開始。對于put操作,可以一律添加到Hash鏈的頭部。但是對于remove操作,可能需要從中間刪除一個節點,這就需要將要刪除節點的前面所有節點整個復制(重新new)一遍,最后一個節點指向要刪除結點的下一個結點(這在談到ConcurrentHashMap的刪除操作時還會詳述)。特別地,由于value域被volatile修飾,所以其可以確保被讀線程讀到最新的值,這是ConcurrentHashmap讀操作并不需要加鎖的另一個重要原因。實際上,ConcurrentHashMap完全允許多個讀操作并發進行,讀操作并不需要加鎖。HashEntry代表hash鏈中的一個節點,其結構如下所示:

/*** ConcurrentHashMap 中的 HashEntry 類* * ConcurrentHashMap list entry. Note that this is never exported* out as a user-visible Map.Entry.** Because the value field is volatile, not final, it is legal wrt* the Java Memory Model for an unsynchronized reader to see null* instead of initial value when read via a data race. Although a* reordering leading to this is not likely to ever actually* occur, the Segment.readValueUnderLock method is used as a* backup in case a null (pre-initialized) value is ever seen in* an unsynchronized access method.*/static final class HashEntry<K,V> {final K key; // 聲明 key 為 final 的final int hash; // 聲明 hash 值為 final 的volatile V value; // 聲明 value 被volatile所修飾final HashEntry<K,V> next; // 聲明 next 為 final 的HashEntry(K key, int hash, HashEntry<K,V> next, V value) {this.key = key;this.hash = hash;this.next = next;this.value = value;}@SuppressWarnings("unchecked")static final <K,V> HashEntry<K,V>[] newArray(int i) {return new HashEntry[i];}}

與HashMap類似,在ConcurrentHashMap中,如果在散列時發生碰撞,也會將碰撞的 HashEntry 對象鏈成一個鏈表。由于HashEntry的next域是final的,所以新節點只能在鏈表的表頭處插入。下圖是在一個空桶中依次插入 A,B,C 三個 HashEntry 對象后的結構圖(由于只能在表頭插入,所以鏈表中節點的順序和插入的順序相反):

與HashEntry不同的是,HashMap 中的 Entry 類結構如下所示:

/*** HashMap 中的 Entry 類*/static class Entry<K,V> implements Map.Entry<K,V> {final K key;V value;Entry<K,V> next;final int hash;/*** Creates new entry.*/Entry(int h, K k, V v, Entry<K,V> n) {value = v;next = n;key = k;hash = h;}...}

四. ConcurrentHashMap 的構造函數:

ConcurrentHashMap 一共提供了五個構造函數,其中默認無參的構造函數和參數為Map的構造函數 為 Java Collection Framework 規范的推薦實現,其余三個構造函數則是 ConcurrentHashMap 專門提供的。


1、ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel):

該構造函數意在構造一個具有指定容量、指定負載因子和指定段數目/并發級別(若不是2的冪次方,則會調整為2的冪次方)的空ConcurrentHashMap,其相關源碼如下:

/*** Creates a new, empty map with the specified initial* capacity, load factor and concurrency level.** @param initialCapacity the initial capacity. The implementation* performs internal sizing to accommodate this many elements.* @param loadFactor the load factor threshold, used to control resizing.* Resizing may be performed when the average number of elements per* bin exceeds this threshold.* @param concurrencyLevel the estimated number of concurrently* updating threads. The implementation performs internal sizing* to try to accommodate this many threads.* @throws IllegalArgumentException if the initial capacity is* negative or the load factor or concurrencyLevel are* nonpositive.*/public ConcurrentHashMap(int initialCapacity,float loadFactor, int concurrencyLevel) {if (!(loadFactor > 0) || initialCapacity < 0 || concurrencyLevel <= 0)throw new IllegalArgumentException();if (concurrencyLevel > MAX_SEGMENTS) concurrencyLevel = MAX_SEGMENTS;// Find power-of-two sizes best matching argumentsint sshift = 0; // 大小為 lg(ssize) int ssize = 1; // 段的數目,segments數組的大小(2的冪次方)while (ssize < concurrencyLevel) {++sshift;ssize <<= 1;}segmentShift = 32 - sshift; // 用于定位段segmentMask = ssize - 1; // 用于定位段this.segments = Segment.newArray(ssize); // 創建segments數組if (initialCapacity > MAXIMUM_CAPACITY)initialCapacity = MAXIMUM_CAPACITY;int c = initialCapacity / ssize; // 總的桶數/總的段數if (c * ssize < initialCapacity)++c;int cap = 1; // 每個段所擁有的桶的數目(2的冪次方)while (cap < c)cap <<= 1;for (int i = 0; i < this.segments.length; ++i) // 初始化segments數組this.segments[i] = new Segment<K,V>(cap, loadFactor);}

2、ConcurrentHashMap(int initialCapacity, float loadFactor):

該構造函數意在構造一個具有指定容量、指定負載因子和默認并發級別(16)的空ConcurrentHashMap,其相關源碼如下:

/*** Creates a new, empty map with the specified initial capacity* and load factor and with the default concurrencyLevel (16).** @param initialCapacity The implementation performs internal* sizing to accommodate this many elements.* @param loadFactor the load factor threshold, used to control resizing.* Resizing may be performed when the average number of elements per* bin exceeds this threshold.* @throws IllegalArgumentException if the initial capacity of* elements is negative or the load factor is nonpositive** @since 1.6*/public ConcurrentHashMap(int initialCapacity, float loadFactor) {this(initialCapacity, loadFactor, DEFAULT_CONCURRENCY_LEVEL); // 默認并發級別為16}

3、ConcurrentHashMap(int initialCapacity):

該構造函數意在構造一個具有指定容量、默認負載因子(0.75)和默認并發級別(16)的空ConcurrentHashMap,其相關源碼如下:

/*** Creates a new, empty map with the specified initial capacity,* and with default load factor (0.75) and concurrencyLevel (16).** @param initialCapacity the initial capacity. The implementation* performs internal sizing to accommodate this many elements.* @throws IllegalArgumentException if the initial capacity of* elements is negative.*/public ConcurrentHashMap(int initialCapacity) {this(initialCapacity, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}

4、ConcurrentHashMap():

該構造函數意在構造一個具有默認初始容量(16)、默認負載因子(0.75)和默認并發級別(16)的空ConcurrentHashMap,其相關源碼如下:

/*** Creates a new, empty map with a default initial capacity (16),* load factor (0.75) and concurrencyLevel (16).*/public ConcurrentHashMap() {this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);}

5、ConcurrentHashMap(Map<? extends K, ? extends V> m):

該構造函數意在構造一個與指定 Map 具有相同映射的 ConcurrentHashMap,其初始容量不小于 16 (具體依賴于指定Map的大小),負載因子是 0.75,并發級別是 16, 是 Java Collection Framework 規范推薦提供的,其源碼如下:

/*** Creates a new map with the same mappings as the given map.* The map is created with a capacity of 1.5 times the number* of mappings in the given map or 16 (whichever is greater),* and a default load factor (0.75) and concurrencyLevel (16).** @param m the map*/public ConcurrentHashMap(Map<? extends K, ? extends V> m) {this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,DEFAULT_INITIAL_CAPACITY),DEFAULT_LOAD_FACTOR, DEFAULT_CONCURRENCY_LEVEL);putAll(m);}

在這里,我們提到了三個非常重要的參數:初始容量、負載因子 和 并發級別,這三個參數是影響ConcurrentHashMap性能的重要參數。從上述源碼我們可以看出,ConcurrentHashMap 也正是通過initialCapacity、loadFactor和concurrencyLevel這三個參數進行構造并初始化segments數組、段偏移量segmentShift、段掩碼segmentMask和每個segment的。


五. ConcurrentHashMap 的數據結構:

本質上,ConcurrentHashMap就是一個Segment數組,而一個Segment實例則是一個小的哈希表。由于Segment類繼承于ReentrantLock類,從而使得Segment對象能充當鎖的角色,這樣,每個 Segment對象就可以守護整個ConcurrentHashMap的若干個桶,其中每個桶是由若干個HashEntry 對象鏈接起來的鏈表。通過使用段(Segment)將ConcurrentHashMap劃分為不同的部分,ConcurrentHashMap就可以使用不同的鎖來控制對哈希表的不同部分的修改,從而允許多個修改操作并發進行, 這正是ConcurrentHashMap鎖分段技術的核心內涵。進一步地,如果把整個ConcurrentHashMap看作是一個父哈希表的話,那么每個Segment就可以看作是一個子哈希表,如下圖所示:

注意,假設ConcurrentHashMap一共分為2^n個段,每個段中有2^m個桶,那么段的定位方式是將key的hash值的高n位與(2^n-1)相與。在定位到某個段后,再將key的hash值的低m位與(2^m-1)相與,定位到具體的桶位。


六. ConcurrentHashMap 的并發存取:

在ConcurrentHashMap中,線程對映射表做讀操作時,一般情況下不需要加鎖就可以完成,對容器做結構性修改的操作(比如,put操作、remove操作等)才需要加鎖。


1、用分段鎖機制實現多個線程間的并發寫操作: put(key, vlaue):

在ConcurrentHashMap中,典型結構性修改操作包括put、remove和clear,下面我們首先以put操作為例說明對ConcurrentHashMap做結構性修改的過程。ConcurrentHashMap的put操作對應的源碼如下:

/*** Maps the specified key to the specified value in this table.* Neither the key nor the value can be null.** <p> The value can be retrieved by calling the <tt>get</tt> method* with a key that is equal to the original key.** @param key key with which the specified value is to be associated* @param value value to be associated with the specified key* @return the previous value associated with <tt>key</tt>, or* <tt>null</tt> if there was no mapping for <tt>key</tt>* @throws NullPointerException if the specified key or value is null*/public V put(K key, V value) {if (value == null)throw new NullPointerException();int hash = hash(key.hashCode());return segmentFor(hash).put(key, hash, value, false);}

從上面的源碼我們看到,ConcurrentHashMap不同于HashMap,它既不允許key值為null,也不允許value值為null。此外,我們還可以看到,實際上我們對ConcurrentHashMap的put操作被ConcurrentHashMap委托給特定的段來實現。也就是說,當我們向ConcurrentHashMap中put一個Key/Value對時,首先會獲得Key的哈希值并對其再次哈希,然后根據最終的hash值定位到這條記錄所應該插入的段,定位段的segmentFor()方法源碼如下:

/*** Returns the segment that should be used for key with given hash* @param hash the hash code for the key* @return the segment*/final Segment<K,V> segmentFor(int hash) {return segments[(hash >>> segmentShift) & segmentMask];}

segmentFor()方法根據傳入的hash值向右無符號右移segmentShift位,然后和segmentMask進行與操作就可以定位到特定的段。在這里,假設Segment的數量(segments數組的長度)是2的n次方(Segment的數量總是2的倍數,具體見構造函數的實現),那么segmentShift的值就是32-n(hash值的位數是32),而segmentMask的值就是2^n-1(寫成二進制的形式就是n個1)。進一步地,我們就可以得出以下結論:根據key的hash值的高n位就可以確定元素到底在哪一個Segment中。緊接著,調用這個段的put()方法來將目標Key/Value對插到段中,段的put()方法的源碼如下所示:
?

V put(K key, int hash, V value, boolean onlyIfAbsent) {lock(); // 上鎖try {int c = count;if (c++ > threshold) // ensure capacityrehash();HashEntry<K,V>[] tab = table; // table是Volatile的int index = hash & (tab.length - 1); // 定位到段中特定的桶HashEntry<K,V> first = tab[index]; // first指向桶中鏈表的表頭HashEntry<K,V> e = first;// 檢查該桶中是否存在相同key的結點while (e != null && (e.hash != hash || !key.equals(e.key))) e = e.next;V oldValue;if (e != null) { // 該桶中存在相同key的結點oldValue = e.value;if (!onlyIfAbsent)e.value = value; // 更新value值}else { // 該桶中不存在相同key的結點oldValue = null;++modCount; // 結構性修改,modCount加1tab[index] = new HashEntry<K,V>(key, hash, first, value); // 創建HashEntry并將其鏈到表頭count = c; //write-volatile,count值的更新一定要放在最后一步(volatile變量)}return oldValue; // 返回舊值(該桶中不存在相同key的結點,則返回null)} finally {unlock(); // 在finally子句中解鎖}}

從源碼中首先可以知道,ConcurrentHashMap對Segment的put操作是加鎖完成的。在第二節我們已經知道,Segment是ReentrantLock的子類,因此Segment本身就是一種可重入的Lock,所以我們可以直接調用其繼承而來的lock()方法和unlock()方法對代碼進行上鎖/解鎖。需要注意的是,這里的加鎖操作是針對某個具體的Segment,鎖定的也是該Segment而不是整個ConcurrentHashMap。因為插入鍵/值對操作只是在這個Segment包含的某個桶中完成,不需要鎖定整個ConcurrentHashMap。因此,其他寫線程對另外15個Segment的加鎖并不會因為當前線程對這個Segment的加鎖而阻塞。故而 相比較于 HashTable 和由同步包裝器包裝的HashMap每次只能有一個線程執行讀或寫操作,ConcurrentHashMap 在并發訪問性能上有了質的提高。在理想狀態下,ConcurrentHashMap 可以支持 16 個線程執行并發寫操作(如果并發級別設置為 16),及任意數量線程的讀操作。

在將Key/Value對插入到Segment之前,首先會檢查本次插入會不會導致Segment中元素的數量超過閾值threshold,如果會,那么就先對Segment進行擴容和重哈希操作,然后再進行插入。重哈希操作暫且不表,稍后詳述。第8和第9行的操作就是定位到段中特定的桶并確定鏈表頭部的位置。第12行的while循環用于檢查該桶中是否存在相同key的結點,如果存在,就直接更新value值;如果沒有找到,則進入21行生成一個新的HashEntry并且把它鏈到該桶中鏈表的表頭,然后再更新count的值(由于count是volatile變量,所以count值的更新一定要放在最后一步)。

 到此為止,除了重哈希操作,ConcurrentHashMap的put操作已經介紹完了。此外,在ConcurrentHashMap中,修改操作還包括putAll()和replace()。其中,putAll()操作就是多次調用put方法,而replace()操作實現要比put()操作簡單得多,此不贅述。


2、ConcurrentHashMap 的重哈希操作 : rehash():

上面敘述到,在ConcurrentHashMap中使用put操作插入Key/Value對之前,首先會檢查本次插入會不會導致Segment中節點數量超過閾值threshold,如果會,那么就先對Segment進行擴容和重哈希操作。特別需要注意的是,ConcurrentHashMap的重哈希實際上是對ConcurrentHashMap的某個段的重哈希,因此ConcurrentHashMap的每個段所包含的桶位自然也就不盡相同。針對段進行rehash()操作的源碼如下:

void rehash() {HashEntry<K,V>[] oldTable = table; // 擴容前的tableint oldCapacity = oldTable.length;if (oldCapacity >= MAXIMUM_CAPACITY) // 已經擴到最大容量,直接返回return;/** Reclassify nodes in each list to new Map. 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 traversing table* right now.*/// 新創建一個table,其容量是原來的2倍HashEntry<K,V>[] newTable = HashEntry.newArray(oldCapacity<<1); threshold = (int)(newTable.length * loadFactor); // 新的閾值int sizeMask = newTable.length - 1; // 用于定位桶for (int i = 0; i < oldCapacity ; i++) {// We need to guarantee that any existing reads of old Map can// proceed. So we cannot yet null out each bin.HashEntry<K,V> e = oldTable[i]; // 依次指向舊table中的每個桶的鏈表表頭if (e != null) { // 舊table的該桶中鏈表不為空HashEntry<K,V> next = e.next;int idx = e.hash & sizeMask; // 重哈希已定位到新桶if (next == null) // 舊table的該桶中只有一個節點newTable[idx] = e;else { // Reuse trailing consecutive sequence at same slotHashEntry<K,V> lastRun = e;int lastIdx = idx;for (HashEntry<K,V> last = next;last != null;last = last.next) {int k = last.hash & sizeMask;// 尋找k值相同的子鏈,該子鏈尾節點與父鏈的尾節點必須是同一個if (k != lastIdx) {lastIdx = k;lastRun = last;}}// JDK直接將子鏈lastRun放到newTable[lastIdx]桶中newTable[lastIdx] = lastRun;// 對該子鏈之前的結點,JDK會挨個遍歷并把它們復制到新桶中for (HashEntry<K,V> p = e; p != lastRun; p = p.next) {int k = p.hash & sizeMask;HashEntry<K,V> n = newTable[k];newTable[k] = new HashEntry<K,V>(p.key, p.hash,n, p.value);}}}}table = newTable; // 擴容完成}

其實JDK官方的注釋已經解釋的很清楚了。由于擴容是按照2的冪次方進行的,所以擴展前在同一個桶中的元素,現在要么還是在原來的序號的桶里,或者就是原來的序號再加上一個2的冪次方,就這兩種選擇。根據本文前面對HashEntry的介紹,我們知道鏈接指針next是final的,因此看起來我們好像只能把該桶的HashEntry鏈中的每個節點復制到新的桶中(這意味著我們要重新創建每個節點),但事實上JDK對其做了一定的優化。因為在理論上原桶里的HashEntry鏈可能存在一條子鏈,這條子鏈上的節點都會被重哈希到同一個新的桶中,這樣我們只要拿到該子鏈的頭結點就可以直接把該子鏈放到新的桶中,從而避免了一些節點不必要的創建,提升了一定的效率。因此,JDK為了提高效率,它會首先去查找這樣的一個子鏈,而且這個子鏈的尾節點必須與原hash鏈的尾節點是同一個,那么就只需要把這個子鏈的頭結點放到新的桶中,其后面跟的一串子節點自然也就連接上了。對于這個子鏈頭結點之前的結點,JDK會挨個遍歷并把它們復制到新桶的鏈頭(只能在表頭插入元素)中。特別地,我們注意這段代碼:

for (HashEntry<K,V> last = next;last != null;last = last.next) {int k = last.hash & sizeMask;if (k != lastIdx) {lastIdx = k;lastRun = last;} } newTable[lastIdx] = lastRun;

在該代碼段中,JDK直接將子鏈lastRun放到newTable[lastIdx]桶中,難道這個操作不會覆蓋掉newTable[lastIdx]桶中原有的元素么?事實上,這種情形時不可能出現的,因為桶newTable[lastIdx]在子鏈添加進去之前壓根就不會有節點存在,這還是因為table的大小是按照2的冪次方的方式去擴展的。假設原來table的大小是2^k大小,那么現在新table的大小是2^(k+1)大小,而定位桶的方式是:

// sizeMask = newTable.length - 1,即 sizeMask = 11...1,共k+1個1。 int idx = e.hash & sizeMask;

因此這樣得到的idx實際上就是key的hash值的低k+1位的值,而原table的sizeMask也全是1的二進制,不過總共是k位,那么原table的idx就是key的hash值的低k位的值。所以,如果元素的hashcode的第k+1位是0,那么元素在新桶的序號就是和原桶的序號是相等的;如果第k+1位的值是1,那么元素在新桶的序號就是原桶的序號加上2^k。因此,JDK直接將子鏈lastRun放到newTable[lastIdx]桶中就沒問題了,因為newTable中新序號處此時肯定是空的。


3、ConcurrentHashMap 的讀取實現 :get(Object key):

與put操作類似,當我們從ConcurrentHashMap中查詢一個指定Key的鍵值對時,首先會定位其應該存在的段,然后查詢請求委托給這個段進行處理,源碼如下:

/*** Returns the value to which the specified key is mapped,* or {@code null} if this map contains no mapping for the key.** <p>More formally, if this map contains a mapping from a key* {@code k} to a value {@code v} such that {@code key.equals(k)},* then this method returns {@code v}; otherwise it returns* {@code null}. (There can be at most one such mapping.)** @throws NullPointerException if the specified key is null*/public V get(Object key) {int hash = hash(key.hashCode());return segmentFor(hash).get(key, hash);}

我們緊接著研讀Segment中get操作的源碼:

V get(Object key, int hash) {if (count != 0) { // read-volatile,首先讀 count 變量HashEntry<K,V> e = getFirst(hash); // 獲取桶中鏈表頭結點while (e != null) {if (e.hash == hash && key.equals(e.key)) { // 查找鏈中是否存在指定Key的鍵值對V v = e.value;if (v != null) // 如果讀到value域不為 null,直接返回return v; // 如果讀到value域為null,說明發生了重排序,加鎖后重新讀取return readValueUnderLock(e); // recheck}e = e.next;}}return null; // 如果不存在,直接返回null}

了解了ConcurrentHashMap的put操作后,上述源碼就很好理解了。但是有一個情況需要特別注意,就是鏈中存在指定Key的鍵值對并且其對應的Value值為null的情況。在剖析ConcurrentHashMap的put操作時,我們就知道ConcurrentHashMap不同于HashMap,它既不允許key值為null,也不允許value值為null。但是,此處怎么會存在鍵值對存在且的Value值為null的情形呢?JDK官方給出的解釋是,這種情形發生的場景是:初始化HashEntry時發生的指令重排序導致的,也就是在HashEntry初始化完成之前便返回了它的引用。這時,JDK給出的解決之道就是加鎖重讀,源碼如下:

/*** Reads value field of an entry under lock. Called if value* field ever appears to be null. This is possible only if a* compiler happens to reorder a HashEntry initialization with* its table assignment, which is legal under memory model* but is not known to ever occur.*/V readValueUnderLock(HashEntry<K,V> e) {lock();try {return e.value;} finally {unlock();}}

4、ConcurrentHashMap 存取小結:

在ConcurrentHashMap進行存取時,首先會定位到具體的段,然后通過對具體段的存取來完成對整個ConcurrentHashMap的存取。特別地,無論是ConcurrentHashMap的讀操作還是寫操作都具有很高的性能:在進行讀操作時不需要加鎖,而在寫操作時通過鎖分段技術只對所操作的段加鎖而不影響客戶端對其它段的訪問。


七. ConcurrentHashMap 讀操作不需要加鎖的奧秘:

在本文第二節,我們介紹到HashEntry對象幾乎是不可變的(只能改變Value的值),因為HashEntry中的key、hash和next指針都是final的。這意味著,我們不能把節點添加到鏈表的中間和尾部,也不能在鏈表的中間和尾部刪除節點。這個特性可以保證:在訪問某個節點時,這個節點之后的鏈接不會被改變,這個特性可以大大降低處理鏈表時的復雜性。與此同時,由于HashEntry類的value字段被聲明是Volatile的,因此Java的內存模型就可以保證:某個寫線程對value字段的寫入馬上就可以被后續的某個讀線程看到。此外,由于在ConcurrentHashMap中不允許用null作為鍵和值,所以當讀線程讀到某個HashEntry的value為null時,便知道產生了沖突 —— 發生了重排序現象,此時便會加鎖重新讀入這個value值。這些特性互相配合,使得讀線程即使在不加鎖狀態下,也能正確訪問 ConcurrentHashMap。總的來說,ConcurrentHashMap讀操作不需要加鎖的奧秘在于以下三點:

  • 用HashEntery對象的不變性來降低讀操作對加鎖的需求;

  • 用Volatile變量協調讀寫線程間的內存可見性;

  • 若讀時發生指令重排序現象,則加鎖重讀;


由于我們在介紹ConcurrentHashMap的get操作時,已經介紹到了第三點,此不贅述。下面我們結合前兩點分別從線程寫入的兩種角度 —— 對散列表做非結構性修改的操作和對散列表做結構性修改的操作來分析ConcurrentHashMap是如何保證高效讀操作的。


1、用HashEntery對象的不變性來降低讀操作對加鎖的需求:

結構性修改操作只是更改某個HashEntry的value字段的值。由于對Volatile變量的寫入操作將與隨后對這個變量的讀操作進行同步,所以當一個寫線程修改了某個HashEntry的value字段后,Java內存模型能夠保證讀線程一定能讀取到這個字段更新后的值。所以,寫線程對鏈表的非結構性修改能夠被后續不加鎖的讀線程看到。

對ConcurrentHashMap做結構性修改時,實質上是對某個桶指向的鏈表做結構性修改。如果能夠確保在讀線程遍歷一個鏈表期間,寫線程對這個鏈表所做的結構性修改不影響讀線程繼續正常遍歷這個鏈表,那么讀/寫線程之間就可以安全并發訪問這個ConcurrentHashMap。在ConcurrentHashMap中,結構性修改操作包括put操作、remove操作和clear操作,下面我們分別分析這三個操作:

  • clear操作只是把ConcurrentHashMap中所有的桶置空,每個桶之前引用的鏈表依然存在,只是桶不再引用這些鏈表而已,而鏈表本身的結構并沒有發生任何修改。因此,正在遍歷某個鏈表的讀線程依然可以正常執行對該鏈表的遍歷。
  • 關于put操作的細節我們在上文已經單獨介紹過,我們知道put操作如果需要插入一個新節點到鏈表中時會在鏈表頭部插入這個新節點,此時鏈表中的原有節點的鏈接并沒有被修改。也就是說,插入新的健/值對到鏈表中的操作不會影響讀線程正常遍歷這個鏈表。

下面來分析 remove 操作,先讓我們來看看 remove 操作的源代碼實現:

/*** Removes the key (and its corresponding value) from this map.* This method does nothing if the key is not in the map.** @param key the key that needs to be removed* @return the previous value associated with <tt>key</tt>, or* <tt>null</tt> if there was no mapping for <tt>key</tt>* @throws NullPointerException if the specified key is null*/public V remove(Object key) {int hash = hash(key.hashCode());return segmentFor(hash).remove(key, hash, null);}

同樣地,在ConcurrentHashMap中刪除一個鍵值對時,首先需要定位到特定的段并將刪除操作委派給該段。Segment的remove操作如下所示:

/*** Remove; match on key only if value null, else match both.*/V remove(Object key, int hash, Object value) {lock(); // 加鎖try {int c = count - 1; HashEntry<K,V>[] tab = table;int index = hash & (tab.length - 1); // 定位桶HashEntry<K,V> first = tab[index];HashEntry<K,V> e = first;while (e != null && (e.hash != hash || !key.equals(e.key))) // 查找待刪除的鍵值對e = e.next;V oldValue = null;if (e != null) { // 找到V v = e.value;if (value == null || value.equals(v)) {oldValue = v;// All entries following removed node can stay// in list, but all preceding ones need to be// cloned.++modCount;// 所有處于待刪除節點之后的節點原樣保留在鏈表中HashEntry<K,V> newFirst = e.next;// 所有處于待刪除節點之前的節點被克隆到新鏈表中for (HashEntry<K,V> p = first; p != e; p = p.next)newFirst = new HashEntry<K,V>(p.key, p.hash,newFirst, p.value); tab[index] = newFirst; // 將刪除指定節點并重組后的鏈重新放到桶中count = c; // write-volatile,更新Volatile變量count}}return oldValue;} finally {unlock(); // finally子句解鎖}}

我們可以看出,刪除節點C之后的所有節點原樣保留到新鏈表中;刪除節點C之前的每個節點被克隆到新鏈表中(它們在新鏈表中的鏈接順序被反轉了)。因此,在執行remove操作時,原始鏈表并沒有被修改,也就是說,讀線程不會受同時執行 remove 操作的并發寫線程的干擾。

綜合上面的分析我們可以知道,無論寫線程對某個鏈表進行結構性修改還是非結構性修改,都不會影響其他的并發讀線程對這個鏈表的訪問。


2、用 Volatile 變量協調讀寫線程間的內存可見性:

一般地,由于內存可見性問題,在未正確同步的情況下,對于寫線程寫入的值讀線程可能并不能及時讀到。下面以寫線程M和讀線程N來說明ConcurrentHashMap如何協調讀/寫線程間的內存可見性問題,如下圖所示:

假設線程M在寫入了volatile變量count后,線程N讀取了這個volatile變量。根據 happens-before 關系法則中的程序次序法則,A appens-before 于 B,C happens-before D。根據 Volatile法則,B happens-before C。結合傳遞性,則可得到:A appens-before 于 B; B appens-before C;C happens-before D。也就是說,寫線程M對鏈表做的結構性修改對讀線程N是可見的。雖然線程N是在未加鎖的情況下訪問鏈表,但Java的內存模型可以保證:只要之前對鏈表做結構性修改操作的寫線程M在退出寫方法前寫volatile變量count,讀線程N就能讀取到這個volatile變量count的最新值。

事實上,ConcurrentHashMap就是一個Segment數組,而每個Segment都有一個volatile變量count去統計Segment中的HashEntry的個數。并且,在ConcurrentHashMap中,所有不加鎖讀方法在進入讀方法時,首先都會去讀這個count變量。比如我們在上一節提到的get方法:

V get(Object key, int hash) {if (count != 0) { // read-volatile,首先讀 count 變量HashEntry<K,V> e = getFirst(hash); // 獲取桶中鏈表頭結點while (e != null) {if (e.hash == hash && key.equals(e.key)) { // 查找鏈中是否存在指定Key的鍵值對V v = e.value;if (v != null) // 如果讀到value域不為 null,直接返回return v; // 如果讀到value域為null,說明發生了重排序,加鎖后重新讀取return readValueUnderLock(e); // recheck}e = e.next;}}return null; // 如果不存在,直接返回null}

3、小結:

在ConcurrentHashMap中,所有執行寫操作的方法(put、remove和clear)在對鏈表做結構性修改之后,在退出寫方法前都會去寫這個count變量;所有未加鎖的讀操作(get、contains和containsKey)在讀方法中,都會首先去讀取這個count變量。根據 Java 內存模型,對同一個 volatile 變量的寫/讀操作可以確保:寫線程寫入的值,能夠被之后未加鎖的讀線程“看到”。這個特性和前面介紹的HashEntry對象的不變性相結合,使得在ConcurrentHashMap中讀線程進行讀取操作時基本不需要加鎖就能成功獲得需要的值。這兩個特性以及加鎖重讀機制的互相配合,不僅減少了請求同一個鎖的頻率(讀操作一般不需要加鎖就能夠成功獲得值),也減少了持有同一個鎖的時間(只有讀到 value 域的值為 null 時 , 讀線程才需要加鎖后重讀)。


八. ConcurrentHashMap 的跨段操作:

在ConcurrentHashMap中,有些操作需要涉及到多個段,比如說size操作、containsValaue操作等。以size操作為例,如果我們要統計整個ConcurrentHashMap里元素的大小,那么就必須統計所有Segment里元素的大小后求和。我們知道,Segment里的全局變量count是一個volatile變量,那么在多線程場景下,我們是不是直接把所有Segment的count相加就可以得到整個ConcurrentHashMap大小了呢?顯然不能,雖然相加時可以獲取每個Segment的count的最新值,但是拿到之后可能累加前使用的count發生了變化,那么統計結果就不準了。所以最安全的做法,是在統計size的時候把所有Segment的put,remove和clean方法全部鎖住,但是這種做法顯然非常低效。那么,我們還是看一下JDK是如何實現size()方法的吧:
?

/*** Returns the number of key-value mappings in this map. If the* map contains more than <tt>Integer.MAX_VALUE</tt> elements, returns* <tt>Integer.MAX_VALUE</tt>.** @return the number of key-value mappings in this map*/public int size() {final Segment<K,V>[] segments = this.segments;long sum = 0;long check = 0;int[] mc = new int[segments.length];// Try a few times to get accurate count. On failure due to// continuous async changes in table, resort to locking.for (int k = 0; k < RETRIES_BEFORE_LOCK; ++k) {check = 0;sum = 0;int mcsum = 0;for (int i = 0; i < segments.length; ++i) {sum += segments[i].count; mcsum += mc[i] = segments[i].modCount; // 在統計size時記錄modCount}if (mcsum != 0) {for (int i = 0; i < segments.length; ++i) {check += segments[i].count;if (mc[i] != segments[i].modCount) { // 統計size后比較各段的modCount是否發生變化check = -1; // force retrybreak;}}}if (check == sum)// 如果統計size前后各段的modCount沒變,且兩次得到的總數一致,直接返回break;}if (check != sum) { // Resort to locking all segments // 加鎖統計sum = 0;for (int i = 0; i < segments.length; ++i)segments[i].lock();for (int i = 0; i < segments.length; ++i)sum += segments[i].count;for (int i = 0; i < segments.length; ++i)segments[i].unlock();}if (sum > Integer.MAX_VALUE)return Integer.MAX_VALUE;elsereturn (int)sum;}

size方法主要思路是先在沒有鎖的情況下對所有段大小求和,這種求和策略最多執行RETRIES_BEFORE_LOCK次(默認是兩次):在沒有達到RETRIES_BEFORE_LOCK之前,求和操作會不斷嘗試執行(這是因為遍歷過程中可能有其它線程正在對已經遍歷過的段進行結構性更新);在超過RETRIES_BEFORE_LOCK之后,如果還不成功就在持有所有段鎖的情況下再對所有段大小求和。事實上,在累加count操作過程中,之前累加過的count發生變化的幾率非常小,所以ConcurrentHashMap的做法是先嘗試RETRIES_BEFORE_LOCK次通過不鎖住Segment的方式來統計各個Segment大小,如果統計的過程中,容器的count發生了變化,則再采用加鎖的方式來統計所有Segment的大小。

那么,ConcurrentHashMap是如何判斷在統計的時候容器的段發生了結構性更新了呢?我們在前文中已經知道,Segment包含一個modCount成員變量,在會引起段發生結構性改變的所有操作(put操作、 remove操作和clean操作)里,都會將變量modCount進行加1,因此,JDK只需要在統計size前后比較modCount是否發生變化就可以得知容器的大小是否發生變化。

至于ConcurrentHashMap的跨其他跨段操作,比如contains操作、containsValaue操作等,其與size操作的實現原理相類似,此不贅述。

總結

以上是生活随笔為你收集整理的Java集合篇:ConcurrentHashMap详解(JDK1.6)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国内揄拍国内精品人妻 | 成人精品一区二区三区中文字幕 | 美女毛片一区二区三区四区 | a国产一区二区免费入口 | 男人扒开女人内裤强吻桶进去 | 香港三级日本三级妇三级 | 波多野结衣高清一区二区三区 | 亚洲男女内射在线播放 | 九九久久精品国产免费看小说 | 免费人成网站视频在线观看 | 久久人人爽人人人人片 | 国产精品久久久午夜夜伦鲁鲁 | 野外少妇愉情中文字幕 | 国内丰满熟女出轨videos | 亚洲精品久久久久久一区二区 | 99久久精品无码一区二区毛片 | 亚洲精品中文字幕乱码 | 国产9 9在线 | 中文 | 99精品视频在线观看免费 | 国产精品久免费的黄网站 | 色一情一乱一伦一区二区三欧美 | 无码任你躁久久久久久久 | 激情亚洲一区国产精品 | 欧美国产日韩亚洲中文 | 一区二区三区乱码在线 | 欧洲 | 麻花豆传媒剧国产免费mv在线 | 亚洲高清偷拍一区二区三区 | 激情内射日本一区二区三区 | 中文字幕无码免费久久99 | 精品国精品国产自在久国产87 | 久久国语露脸国产精品电影 | 无码人妻久久一区二区三区不卡 | 欧美成人高清在线播放 | 在教室伦流澡到高潮hnp视频 | 精品无码一区二区三区爱欲 | 一个人看的视频www在线 | 久久99久久99精品中文字幕 | 老司机亚洲精品影院 | 国产又粗又硬又大爽黄老大爷视 | 男人的天堂av网站 | 精品少妇爆乳无码av无码专区 | 国内精品人妻无码久久久影院蜜桃 | 天堂亚洲2017在线观看 | 一本久道久久综合婷婷五月 | 少妇性l交大片 | 国产色精品久久人妻 | 免费无码肉片在线观看 | 国产亚洲美女精品久久久2020 | 狠狠色丁香久久婷婷综合五月 | 欧美刺激性大交 | 欧美亚洲日韩国产人成在线播放 | 日本精品人妻无码免费大全 | 免费观看激色视频网站 | 国产成人一区二区三区别 | 好爽又高潮了毛片免费下载 | 亚洲成色在线综合网站 | 中文字幕av日韩精品一区二区 | 成人片黄网站色大片免费观看 | 九九久久精品国产免费看小说 | 亚洲男人av天堂午夜在 | 伊人久久大香线焦av综合影院 | 久久综合香蕉国产蜜臀av | 一本色道久久综合狠狠躁 | 日本高清一区免费中文视频 | 国产无套内射久久久国产 | 国产九九九九九九九a片 | 午夜精品久久久内射近拍高清 | 老司机亚洲精品影院 | 人妻尝试又大又粗久久 | 久久久久久久女国产乱让韩 | 国产成人一区二区三区在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 成在人线av无码免观看麻豆 | 99久久精品日本一区二区免费 | 又粗又大又硬又长又爽 | 波多野结衣aⅴ在线 | 美女扒开屁股让男人桶 | 国产精品久久久久久亚洲毛片 | 婷婷丁香六月激情综合啪 | 午夜无码人妻av大片色欲 | 亚洲爆乳大丰满无码专区 | 国产69精品久久久久app下载 | 波多野结衣一区二区三区av免费 | 乱人伦中文视频在线观看 | 久久精品中文字幕大胸 | 国产精品-区区久久久狼 | 亚洲精品一区二区三区大桥未久 | 少妇高潮一区二区三区99 | 欧洲熟妇色 欧美 | 麻豆国产人妻欲求不满 | 性开放的女人aaa片 | 美女扒开屁股让男人桶 | 300部国产真实乱 | 日本一区二区三区免费播放 | 天堂在线观看www | 亚洲熟女一区二区三区 | 无码一区二区三区在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲欧洲日本无在线码 | 中文亚洲成a人片在线观看 | 一本色道久久综合狠狠躁 | 亚洲娇小与黑人巨大交 | 日本高清一区免费中文视频 | 综合激情五月综合激情五月激情1 | 精品人妻人人做人人爽 | 国产无套粉嫩白浆在线 | 亚洲 日韩 欧美 成人 在线观看 | 欧美日韩一区二区三区自拍 | 扒开双腿疯狂进出爽爽爽视频 | 精品人妻中文字幕有码在线 | 男女下面进入的视频免费午夜 | 国产成人精品必看 | 性色欲网站人妻丰满中文久久不卡 | 精品人妻人人做人人爽夜夜爽 | 少妇一晚三次一区二区三区 | 日韩精品a片一区二区三区妖精 | 国产激情精品一区二区三区 | 欧美乱妇无乱码大黄a片 | 东京热一精品无码av | 麻豆国产丝袜白领秘书在线观看 | 思思久久99热只有频精品66 | 无遮无挡爽爽免费视频 | 国产精品免费大片 | 大肉大捧一进一出视频出来呀 | 国产免费久久久久久无码 | 99久久人妻精品免费一区 | 永久免费精品精品永久-夜色 | 国内少妇偷人精品视频 | 成人影院yy111111在线观看 | 激情人妻另类人妻伦 | 亚洲一区二区三区偷拍女厕 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产口爆吞精在线视频 | а天堂中文在线官网 | 又紧又大又爽精品一区二区 | 激情人妻另类人妻伦 | 欧美成人免费全部网站 | 欧美喷潮久久久xxxxx | 扒开双腿疯狂进出爽爽爽视频 | 亚洲男人av天堂午夜在 | 十八禁真人啪啪免费网站 | 欧美黑人巨大xxxxx | 久久久久久久人妻无码中文字幕爆 | 国产 精品 自在自线 | 秋霞特色aa大片 | 成人女人看片免费视频放人 | 十八禁真人啪啪免费网站 | 亚洲综合久久一区二区 | 日本丰满熟妇videos | 午夜精品久久久内射近拍高清 | 青青久在线视频免费观看 | 国产亚洲精品久久久久久大师 | 丰满人妻被黑人猛烈进入 | 2019午夜福利不卡片在线 | 少妇久久久久久人妻无码 | 亚洲 高清 成人 动漫 | 日本熟妇人妻xxxxx人hd | 国产内射爽爽大片视频社区在线 | 国产激情一区二区三区 | 无码av免费一区二区三区试看 | 高清无码午夜福利视频 | 久久人人爽人人爽人人片av高清 | 人人超人人超碰超国产 | 六月丁香婷婷色狠狠久久 | 亚洲综合在线一区二区三区 | 又湿又紧又大又爽a视频国产 | 在线а√天堂中文官网 | 国产香蕉尹人综合在线观看 | 美女扒开屁股让男人桶 | 成人亚洲精品久久久久软件 | 蜜臀aⅴ国产精品久久久国产老师 | 狂野欧美性猛交免费视频 | 乱人伦中文视频在线观看 | 亚洲精品久久久久中文第一幕 | 99久久精品国产一区二区蜜芽 | 老子影院午夜伦不卡 | 成人精品视频一区二区 | 无码av最新清无码专区吞精 | 人妻有码中文字幕在线 | 亚洲色偷偷男人的天堂 | 亚洲色在线无码国产精品不卡 | 51国偷自产一区二区三区 | 女人被男人爽到呻吟的视频 | 亚洲日韩精品欧美一区二区 | 中文字幕人成乱码熟女app | 成人影院yy111111在线观看 | 又大又黄又粗又爽的免费视频 | 日韩欧美成人免费观看 | 国产精品亚洲综合色区韩国 | 麻豆蜜桃av蜜臀av色欲av | 久青草影院在线观看国产 | 俄罗斯老熟妇色xxxx | 国产成人精品视频ⅴa片软件竹菊 | 俄罗斯老熟妇色xxxx | 呦交小u女精品视频 | 国产免费观看黄av片 | 亚洲狠狠色丁香婷婷综合 | 亚洲成熟女人毛毛耸耸多 | 中文字幕无码人妻少妇免费 | 九月婷婷人人澡人人添人人爽 | 性啪啪chinese东北女人 | 国产精品-区区久久久狼 | 国产熟妇高潮叫床视频播放 | 国产卡一卡二卡三 | a国产一区二区免费入口 | 国内揄拍国内精品人妻 | 欧美成人家庭影院 | 成人欧美一区二区三区黑人免费 | 中文字幕 人妻熟女 | 四虎影视成人永久免费观看视频 | 精品国产福利一区二区 | 亚洲精品无码国产 | 国产色xx群视频射精 | 精品无码国产一区二区三区av | 成 人影片 免费观看 | 久久久亚洲欧洲日产国码αv | 亚洲成a人片在线观看无码 | 狠狠色噜噜狠狠狠狠7777米奇 | 六十路熟妇乱子伦 | 久久久精品国产sm最大网站 | 丰满人妻一区二区三区免费视频 | 丝袜 中出 制服 人妻 美腿 | 毛片内射-百度 | 亚洲人交乣女bbw | 欧美freesex黑人又粗又大 | 中文字幕av日韩精品一区二区 | 欧美日韩色另类综合 | 日日躁夜夜躁狠狠躁 | 国产9 9在线 | 中文 | 国产97色在线 | 免 | 香蕉久久久久久av成人 | 东京无码熟妇人妻av在线网址 | 国产欧美亚洲精品a | 玩弄人妻少妇500系列视频 | 国产超级va在线观看视频 | 精品无码成人片一区二区98 | 又大又硬又爽免费视频 | 色婷婷香蕉在线一区二区 | 亚洲综合精品香蕉久久网 | 亚洲精品一区二区三区大桥未久 | 久久久www成人免费毛片 | 亚洲伊人久久精品影院 | 久久人妻内射无码一区三区 | 一本久久伊人热热精品中文字幕 | 国产人妻久久精品二区三区老狼 | 日韩精品乱码av一区二区 | 国产色精品久久人妻 | 又大又硬又黄的免费视频 | 久久久久久国产精品无码下载 | 国产 浪潮av性色四虎 | 国产人妻精品午夜福利免费 | 国产精品多人p群无码 | 高中生自慰www网站 | 一本久道高清无码视频 | 无码一区二区三区在线观看 | av人摸人人人澡人人超碰下载 | 国产色视频一区二区三区 | 亚洲国产精品无码久久久久高潮 | 国产精品久久久久无码av色戒 | 日韩人妻无码中文字幕视频 | 风流少妇按摩来高潮 | 99久久精品日本一区二区免费 | 欧美高清在线精品一区 | 久久人妻内射无码一区三区 | 极品尤物被啪到呻吟喷水 | 国产精品永久免费视频 | 中文亚洲成a人片在线观看 | 天天爽夜夜爽夜夜爽 | 人妻插b视频一区二区三区 | 久久精品人人做人人综合试看 | 久久国产精品二国产精品 | 精品久久久无码人妻字幂 | 国产人妻精品一区二区三区不卡 | www国产亚洲精品久久久日本 | 国产乱码精品一品二品 | 99re在线播放 | 欧美激情内射喷水高潮 | 少妇愉情理伦片bd | 国产精品亚洲а∨无码播放麻豆 | 老司机亚洲精品影院无码 | 亚洲精品国产a久久久久久 | 精品偷自拍另类在线观看 | 午夜精品久久久久久久久 | 精品久久8x国产免费观看 | 初尝人妻少妇中文字幕 | 精品少妇爆乳无码av无码专区 | 国产综合色产在线精品 | 国产97在线 | 亚洲 | 国产亚洲精品久久久久久大师 | 性欧美牲交在线视频 | 撕开奶罩揉吮奶头视频 | 又粗又大又硬又长又爽 | 小泽玛莉亚一区二区视频在线 | 亚洲中文字幕无码一久久区 | 国产精品爱久久久久久久 | 97色伦图片97综合影院 | 日韩精品无码一本二本三本色 | 欧美 日韩 人妻 高清 中文 | 亚洲午夜无码久久 | 精品欧洲av无码一区二区三区 | 中文字幕亚洲情99在线 | 少妇性l交大片欧洲热妇乱xxx | 丰满诱人的人妻3 | 婷婷五月综合缴情在线视频 | 蜜臀aⅴ国产精品久久久国产老师 | 中文字幕色婷婷在线视频 | 日日橹狠狠爱欧美视频 | 在线观看欧美一区二区三区 | 熟妇人妻无码xxx视频 | 国产精品亚洲综合色区韩国 | 无遮挡国产高潮视频免费观看 | 蜜桃臀无码内射一区二区三区 | 成人动漫在线观看 | 国产精品久久久久无码av色戒 | 国产亚洲tv在线观看 | 国产办公室秘书无码精品99 | 国产亲子乱弄免费视频 | 亚洲国产高清在线观看视频 | 奇米影视7777久久精品人人爽 | 一本精品99久久精品77 | 日本xxxx色视频在线观看免费 | 欧美阿v高清资源不卡在线播放 | 成人精品天堂一区二区三区 | 亚洲国精产品一二二线 | 国产色视频一区二区三区 | 国语精品一区二区三区 | 亚欧洲精品在线视频免费观看 | 日本成熟视频免费视频 | 国产午夜精品一区二区三区嫩草 | 成 人 网 站国产免费观看 | 天堂а√在线地址中文在线 | 久热国产vs视频在线观看 | 久久婷婷五月综合色国产香蕉 | 国产精品多人p群无码 | 久久成人a毛片免费观看网站 | 亚洲精品一区二区三区大桥未久 | 性欧美大战久久久久久久 | 波多野结衣av一区二区全免费观看 | 欧美一区二区三区视频在线观看 | 天天综合网天天综合色 | 在线观看国产午夜福利片 | 亚洲熟妇色xxxxx欧美老妇 | 伊人久久大香线焦av综合影院 | 国产精品无码一区二区桃花视频 | 国产sm调教视频在线观看 | 欧美午夜特黄aaaaaa片 | 综合人妻久久一区二区精品 | 久青草影院在线观看国产 | 欧美日韩人成综合在线播放 | 亚洲午夜久久久影院 | 国产精品毛片一区二区 | 亚洲娇小与黑人巨大交 | 中文字幕精品av一区二区五区 | 国产又粗又硬又大爽黄老大爷视 | 久久久久se色偷偷亚洲精品av | 国产尤物精品视频 | 久久精品国产一区二区三区肥胖 | 精品亚洲韩国一区二区三区 | ass日本丰满熟妇pics | 强奷人妻日本中文字幕 | 秋霞特色aa大片 | 国产精品内射视频免费 | 荡女精品导航 | 欧美 亚洲 国产 另类 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产尤物精品视频 | 性色av无码免费一区二区三区 | 国产精品无码mv在线观看 | 亚洲中文字幕无码中字 | 亚洲日韩精品欧美一区二区 | 久久精品中文字幕大胸 | 欧美日本日韩 | 波多野结衣一区二区三区av免费 | 国产精品沙发午睡系列 | 国产精品久久国产三级国 | 国产疯狂伦交大片 | 最近中文2019字幕第二页 | 日本xxxx色视频在线观看免费 | 97久久精品无码一区二区 | 亚洲阿v天堂在线 | 亚洲第一网站男人都懂 | 日韩人妻系列无码专区 | 久久久久久国产精品无码下载 | 国产精品久久久久久无码 | 全黄性性激高免费视频 | 久久久久国色av免费观看性色 | 乱码av麻豆丝袜熟女系列 | 欧美人与善在线com | 国产成人无码av片在线观看不卡 | 亚洲成色www久久网站 | 一本色道婷婷久久欧美 | 最近中文2019字幕第二页 | 色欲久久久天天天综合网精品 | 久久亚洲a片com人成 | 国产精品丝袜黑色高跟鞋 | 99精品久久毛片a片 | 国产亚洲精品久久久久久大师 | 国产精品亚洲lv粉色 | 精品无人区无码乱码毛片国产 | 东京热一精品无码av | 久久天天躁狠狠躁夜夜免费观看 | 秋霞成人午夜鲁丝一区二区三区 | 国产成人av免费观看 | 国产成人精品必看 | 久久精品国产大片免费观看 | 亚洲精品国产精品乱码不卡 | 久久国语露脸国产精品电影 | 国产高潮视频在线观看 | 无码国模国产在线观看 | 无码人中文字幕 | 青草青草久热国产精品 | 国产97色在线 | 免 | 少妇邻居内射在线 | 国产人妻精品一区二区三区不卡 | 亚洲中文字幕乱码av波多ji | 免费无码午夜福利片69 | 在线观看国产午夜福利片 | 色一情一乱一伦一区二区三欧美 | 久久熟妇人妻午夜寂寞影院 | 欧美丰满熟妇xxxx | 一个人看的视频www在线 | 日韩欧美群交p片內射中文 | 免费观看激色视频网站 | 无套内谢的新婚少妇国语播放 | 亚洲无人区午夜福利码高清完整版 | 内射巨臀欧美在线视频 | 中文字幕精品av一区二区五区 | 无码午夜成人1000部免费视频 | 97se亚洲精品一区 | 国产99久久精品一区二区 | 狠狠色噜噜狠狠狠7777奇米 | 欧洲熟妇精品视频 | 亚洲中文字幕无码中字 | 国产乱子伦视频在线播放 | 99久久99久久免费精品蜜桃 | 亚洲熟妇自偷自拍另类 | 最近中文2019字幕第二页 | 999久久久国产精品消防器材 | 高潮毛片无遮挡高清免费视频 | 色一情一乱一伦一视频免费看 | 亚洲成av人片在线观看无码不卡 | 红桃av一区二区三区在线无码av | 国产又爽又黄又刺激的视频 | 久久久亚洲欧洲日产国码αv | 久久久婷婷五月亚洲97号色 | 免费无码的av片在线观看 | 成人无码影片精品久久久 | 无码人妻精品一区二区三区不卡 | 精品国产一区二区三区av 性色 | 大肉大捧一进一出好爽视频 | 国产超级va在线观看视频 | 国产精品内射视频免费 | 粉嫩少妇内射浓精videos | 亚洲熟妇自偷自拍另类 | 乱码午夜-极国产极内射 | 国产一区二区三区精品视频 | 人妻互换免费中文字幕 | 色综合久久久无码中文字幕 | 成人精品一区二区三区中文字幕 | 成年美女黄网站色大免费视频 | 77777熟女视频在线观看 а天堂中文在线官网 | av无码电影一区二区三区 | 亚洲aⅴ无码成人网站国产app | 亚洲日韩av一区二区三区四区 | 亚洲欧美日韩国产精品一区二区 | 又大又黄又粗又爽的免费视频 | 3d动漫精品啪啪一区二区中 | 久久国产自偷自偷免费一区调 | 亚洲日韩av一区二区三区四区 | 婷婷色婷婷开心五月四房播播 | 秋霞成人午夜鲁丝一区二区三区 | 精品亚洲成av人在线观看 | 99久久久无码国产aaa精品 | 亚洲一区二区三区在线观看网站 | 国产真人无遮挡作爱免费视频 | 日本在线高清不卡免费播放 | 99精品无人区乱码1区2区3区 | 巨爆乳无码视频在线观看 | 玩弄少妇高潮ⅹxxxyw | 国语自产偷拍精品视频偷 | 国产精品永久免费视频 | 99精品视频在线观看免费 | 无码精品人妻一区二区三区av | 亚洲 另类 在线 欧美 制服 | 小sao货水好多真紧h无码视频 | 97夜夜澡人人双人人人喊 | 麻豆蜜桃av蜜臀av色欲av | 久久97精品久久久久久久不卡 | 亚洲国产精品毛片av不卡在线 | 老司机亚洲精品影院无码 | aⅴ在线视频男人的天堂 | 亚洲一区av无码专区在线观看 | 亚洲日韩一区二区三区 | 亚洲色成人中文字幕网站 | 色欲综合久久中文字幕网 | 国产精品久久久久9999小说 | 无码人中文字幕 | 成在人线av无码免费 | 国产无av码在线观看 | 日日干夜夜干 | 国产精品理论片在线观看 | 国产av无码专区亚洲awww | 亚洲成a人一区二区三区 | 欧美精品免费观看二区 | 一个人看的视频www在线 | 丰满少妇人妻久久久久久 | yw尤物av无码国产在线观看 | 国产人成高清在线视频99最全资源 | 欧洲精品码一区二区三区免费看 | 亚洲欧洲无卡二区视頻 | 国产乡下妇女做爰 | 欧美怡红院免费全部视频 | 玩弄中年熟妇正在播放 | 精品一区二区三区无码免费视频 | 99久久无码一区人妻 | 精品无人国产偷自产在线 | 激情内射亚州一区二区三区爱妻 | 无码中文字幕色专区 | 精品国偷自产在线视频 | 亚洲第一无码av无码专区 | 曰本女人与公拘交酡免费视频 | 国产在线一区二区三区四区五区 | 婷婷色婷婷开心五月四房播播 | 精品无人区无码乱码毛片国产 | 暴力强奷在线播放无码 | 色偷偷人人澡人人爽人人模 | 日本精品久久久久中文字幕 | 又色又爽又黄的美女裸体网站 | 成人免费视频视频在线观看 免费 | 在线观看免费人成视频 | 国产精品人妻一区二区三区四 | av人摸人人人澡人人超碰下载 | 人人妻人人澡人人爽精品欧美 | 在线 国产 欧美 亚洲 天堂 | 999久久久国产精品消防器材 | 性史性农村dvd毛片 | 亚洲精品欧美二区三区中文字幕 | 窝窝午夜理论片影院 | 久久午夜无码鲁丝片 | 老子影院午夜精品无码 | 亚洲日韩av一区二区三区中文 | 国产成人综合在线女婷五月99播放 | 99er热精品视频 | 中文无码成人免费视频在线观看 | 人妻有码中文字幕在线 | 少妇人妻偷人精品无码视频 | 西西人体www44rt大胆高清 | 久久精品成人欧美大片 | 精品熟女少妇av免费观看 | 成 人 网 站国产免费观看 | 无码午夜成人1000部免费视频 | 捆绑白丝粉色jk震动捧喷白浆 | 国产午夜福利亚洲第一 | 日本爽爽爽爽爽爽在线观看免 | 亚洲国产精品一区二区第一页 | 狠狠色丁香久久婷婷综合五月 | 亚洲色大成网站www | 乱人伦人妻中文字幕无码 | 特大黑人娇小亚洲女 | 无遮挡啪啪摇乳动态图 | 国产日产欧产精品精品app | 强伦人妻一区二区三区视频18 | 欧美性猛交xxxx富婆 | 成在人线av无码免观看麻豆 | 亚洲精品一区二区三区在线观看 | 国产性生交xxxxx无码 | 国产av一区二区精品久久凹凸 | 精品乱码久久久久久久 | 欧美国产亚洲日韩在线二区 | 精品少妇爆乳无码av无码专区 | 国产精品a成v人在线播放 | 强奷人妻日本中文字幕 | 思思久久99热只有频精品66 | 97夜夜澡人人双人人人喊 | 国产精品人人爽人人做我的可爱 | 免费播放一区二区三区 | 日韩人妻无码中文字幕视频 | 蜜桃臀无码内射一区二区三区 | 无码国内精品人妻少妇 | 国产色视频一区二区三区 | 国产精品无码一区二区三区不卡 | 亚洲色www成人永久网址 | 国产成人人人97超碰超爽8 | 国产国语老龄妇女a片 | 日产精品高潮呻吟av久久 | 国产午夜福利100集发布 | √8天堂资源地址中文在线 | 东京热无码av男人的天堂 | 日韩成人一区二区三区在线观看 | 人妻aⅴ无码一区二区三区 | 久久综合香蕉国产蜜臀av | 国产熟妇高潮叫床视频播放 | 99久久精品国产一区二区蜜芽 | 日本精品少妇一区二区三区 | 久久婷婷五月综合色国产香蕉 | 美女毛片一区二区三区四区 | 免费播放一区二区三区 | 51国偷自产一区二区三区 | 天堂а√在线中文在线 | 精品无人区无码乱码毛片国产 | 国产在线aaa片一区二区99 | 色综合久久中文娱乐网 | 内射巨臀欧美在线视频 | 在线亚洲高清揄拍自拍一品区 | 国产在线一区二区三区四区五区 | 男人和女人高潮免费网站 | 清纯唯美经典一区二区 | 久久精品人人做人人综合试看 | 久久99精品久久久久婷婷 | 亚洲精品国产品国语在线观看 | 中文字幕av伊人av无码av | 老熟女重囗味hdxx69 | 在线亚洲高清揄拍自拍一品区 | 国产偷国产偷精品高清尤物 | 丰满少妇女裸体bbw | 男女作爱免费网站 | 中文毛片无遮挡高清免费 | 天天躁夜夜躁狠狠是什么心态 | 久久国产精品萌白酱免费 | 正在播放老肥熟妇露脸 | 强开小婷嫩苞又嫩又紧视频 | 亚洲欧洲日本无在线码 | 人人妻人人澡人人爽欧美一区九九 | 成人av无码一区二区三区 | 天干天干啦夜天干天2017 | 亚洲男人av天堂午夜在 | 国产电影无码午夜在线播放 | 亚洲中文字幕va福利 | 搡女人真爽免费视频大全 | 丰满少妇高潮惨叫视频 | 国产成人综合色在线观看网站 | 欧美成人高清在线播放 | 乱人伦中文视频在线观看 | 人妻人人添人妻人人爱 | 高潮毛片无遮挡高清免费视频 | 亚洲精品中文字幕久久久久 | 欧美人与禽猛交狂配 | 日韩av无码一区二区三区不卡 | 天堂在线观看www | 精品午夜福利在线观看 | 精品 日韩 国产 欧美 视频 | 人妻无码αv中文字幕久久琪琪布 | 国产人妻人伦精品 | 亚洲区小说区激情区图片区 | 对白脏话肉麻粗话av | 欧美丰满熟妇xxxx性ppx人交 | 久久 国产 尿 小便 嘘嘘 | 国产亚洲精品久久久久久久 | 天堂亚洲2017在线观看 | 精品 日韩 国产 欧美 视频 | 欧美刺激性大交 | 熟妇人妻激情偷爽文 | 97久久国产亚洲精品超碰热 | 精品乱码久久久久久久 | 欧美老熟妇乱xxxxx | 天天拍夜夜添久久精品 | 日本精品少妇一区二区三区 | 国产成人综合色在线观看网站 | 久精品国产欧美亚洲色aⅴ大片 | 日本va欧美va欧美va精品 | 老头边吃奶边弄进去呻吟 | 国产卡一卡二卡三 | 色综合天天综合狠狠爱 | 高潮毛片无遮挡高清免费 | 午夜嘿嘿嘿影院 | 在线精品国产一区二区三区 | 国产一区二区三区精品视频 | 无码人妻丰满熟妇区五十路百度 | 国内揄拍国内精品少妇国语 | 国产激情无码一区二区 | 色综合久久88色综合天天 | 爆乳一区二区三区无码 | 国产莉萝无码av在线播放 | 99久久久国产精品无码免费 | 久久久久亚洲精品中文字幕 | 国产精品亚洲综合色区韩国 | 一区二区三区高清视频一 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 久久无码专区国产精品s | 中文字幕色婷婷在线视频 | 女人被男人爽到呻吟的视频 | 天天综合网天天综合色 | 亚洲精品欧美二区三区中文字幕 | 亚洲日韩精品欧美一区二区 | 色窝窝无码一区二区三区色欲 | 国内精品久久毛片一区二区 | 无码吃奶揉捏奶头高潮视频 | 小sao货水好多真紧h无码视频 | 青草青草久热国产精品 | 亚洲人亚洲人成电影网站色 | 无码精品人妻一区二区三区av | 亚洲 日韩 欧美 成人 在线观看 | 久久精品成人欧美大片 | 乱人伦人妻中文字幕无码 | 大肉大捧一进一出好爽视频 | 亚洲区欧美区综合区自拍区 | 狠狠综合久久久久综合网 | 少妇厨房愉情理9仑片视频 | 内射爽无广熟女亚洲 | 欧美性生交xxxxx久久久 | 国产激情一区二区三区 | 黑森林福利视频导航 | 少妇无码av无码专区在线观看 | 麻豆果冻传媒2021精品传媒一区下载 | 日本熟妇大屁股人妻 | 丝袜 中出 制服 人妻 美腿 | 最新国产乱人伦偷精品免费网站 | 亚洲va欧美va天堂v国产综合 | 2020久久超碰国产精品最新 | 四虎国产精品一区二区 | 亚洲色欲色欲欲www在线 | 成人无码影片精品久久久 | 久久99精品久久久久婷婷 | 国产极品美女高潮无套在线观看 | www一区二区www免费 | 久久久久久久女国产乱让韩 | 国产肉丝袜在线观看 | 99精品国产综合久久久久五月天 | 天堂亚洲2017在线观看 | 亚洲色www成人永久网址 | 99久久精品午夜一区二区 | 樱花草在线播放免费中文 | 又粗又大又硬又长又爽 | 在线天堂新版最新版在线8 | 久久综合网欧美色妞网 | 人妻少妇被猛烈进入中文字幕 | 免费观看的无遮挡av | 日本大乳高潮视频在线观看 | 免费国产成人高清在线观看网站 | 玩弄人妻少妇500系列视频 | 真人与拘做受免费视频 | 丝袜 中出 制服 人妻 美腿 | 老司机亚洲精品影院无码 | 国产福利视频一区二区 | 亚洲国产精品美女久久久久 | аⅴ资源天堂资源库在线 | 欧美国产亚洲日韩在线二区 | 成人女人看片免费视频放人 | 欧美日韩综合一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 色综合久久网 | 好男人www社区 | 牲欲强的熟妇农村老妇女视频 | 亚洲日本一区二区三区在线 | 小鲜肉自慰网站xnxx | 少妇激情av一区二区 | 性做久久久久久久久 | 精品成人av一区二区三区 | 在线天堂新版最新版在线8 | 国产肉丝袜在线观看 | 久久精品99久久香蕉国产色戒 | 成人aaa片一区国产精品 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久久久久九九精品久 | 丰满人妻翻云覆雨呻吟视频 | 亚洲人成网站色7799 | 国产性生大片免费观看性 | 欧美日韩综合一区二区三区 | 中文精品久久久久人妻不卡 | 天堂一区人妻无码 | 最近免费中文字幕中文高清百度 | 日韩欧美群交p片內射中文 | 久久国产精品萌白酱免费 | 欧美熟妇另类久久久久久不卡 | 久久99精品国产.久久久久 | 性史性农村dvd毛片 | 99久久精品午夜一区二区 | 久久久久久a亚洲欧洲av冫 | 中文字幕无码人妻少妇免费 | 午夜精品久久久内射近拍高清 | 东京热一精品无码av | 国产精品-区区久久久狼 | 国产精品亚洲专区无码不卡 | 色综合久久88色综合天天 | 久久无码专区国产精品s | 欧美性猛交内射兽交老熟妇 | 国产av一区二区精品久久凹凸 | 午夜福利不卡在线视频 | 亚洲欧美精品aaaaaa片 | 无遮挡国产高潮视频免费观看 | 毛片内射-百度 | 免费乱码人妻系列无码专区 | 激情内射日本一区二区三区 | 国产极品美女高潮无套在线观看 | 少妇高潮一区二区三区99 | 又紧又大又爽精品一区二区 | 精品国偷自产在线 | 国产成人人人97超碰超爽8 | 亚洲精品国产精品乱码视色 | 欧美日本精品一区二区三区 | 国产办公室秘书无码精品99 | 亚洲国产精品久久人人爱 | 四虎国产精品免费久久 | 67194成是人免费无码 | 风流少妇按摩来高潮 | av无码电影一区二区三区 | 久久亚洲中文字幕无码 | 亚洲va欧美va天堂v国产综合 | 国产精品久久国产精品99 | 2020久久香蕉国产线看观看 | 色综合久久久久综合一本到桃花网 | 人妻插b视频一区二区三区 | 国产莉萝无码av在线播放 | 久久熟妇人妻午夜寂寞影院 | 日本肉体xxxx裸交 | 国产又爽又黄又刺激的视频 | 无码午夜成人1000部免费视频 | 纯爱无遮挡h肉动漫在线播放 | 国产精品久久久久久久影院 | 中文字幕av伊人av无码av | 国产激情综合五月久久 | 国产明星裸体无码xxxx视频 | 黑人巨大精品欧美一区二区 | 久久人人97超碰a片精品 | 噜噜噜亚洲色成人网站 | 极品尤物被啪到呻吟喷水 | 亚洲人成人无码网www国产 | 国产精品二区一区二区aⅴ污介绍 | 亚洲va中文字幕无码久久不卡 | 99久久精品无码一区二区毛片 | 国产亚洲精品久久久久久久 | 麻花豆传媒剧国产免费mv在线 | 成人影院yy111111在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 内射老妇bbwx0c0ck | 国产综合在线观看 | 国产精品福利视频导航 | 国产在线精品一区二区三区直播 | 久久久精品国产sm最大网站 | 亚洲中文字幕va福利 | 成人无码精品1区2区3区免费看 | 亚洲 日韩 欧美 成人 在线观看 | 国产精品无码成人午夜电影 | 77777熟女视频在线观看 а天堂中文在线官网 | 玩弄中年熟妇正在播放 | 亚洲精品一区二区三区在线观看 | 色婷婷综合激情综在线播放 | 亚洲最大成人网站 | 久久久www成人免费毛片 | 亚洲爆乳精品无码一区二区三区 | 日本精品少妇一区二区三区 | 无码乱肉视频免费大全合集 | 任你躁在线精品免费 | 亚洲成av人影院在线观看 | 亚洲色www成人永久网址 | 国产精品无码成人午夜电影 | 在线欧美精品一区二区三区 | 亚洲欧美精品伊人久久 | 中文字幕 人妻熟女 | 亚洲中文字幕无码中文字在线 | 夫妻免费无码v看片 | 内射欧美老妇wbb | 精品亚洲韩国一区二区三区 | 内射白嫩少妇超碰 | 国产精品亚洲专区无码不卡 | 精品aⅴ一区二区三区 | 国产精品99爱免费视频 | 国产午夜亚洲精品不卡 | 国产精品自产拍在线观看 | 强开小婷嫩苞又嫩又紧视频 | 天堂亚洲2017在线观看 | 亚洲区小说区激情区图片区 | 久久国产自偷自偷免费一区调 | 露脸叫床粗话东北少妇 | 成人试看120秒体验区 | 国内老熟妇对白xxxxhd | 在线看片无码永久免费视频 | 无码成人精品区在线观看 | 婷婷丁香五月天综合东京热 | 亚洲精品综合一区二区三区在线 | 亚洲色偷偷男人的天堂 | 亚洲码国产精品高潮在线 | 国内精品久久久久久中文字幕 | 国产人妻久久精品二区三区老狼 | 又紧又大又爽精品一区二区 | 香港三级日本三级妇三级 | 成人欧美一区二区三区黑人 | 日本丰满熟妇videos | 国内少妇偷人精品视频 | 国产精品久久久久久无码 | 欧美激情综合亚洲一二区 | 在线精品国产一区二区三区 | 天海翼激烈高潮到腰振不止 | 国产精品18久久久久久麻辣 | 伊人久久大香线焦av综合影院 | 高潮毛片无遮挡高清免费视频 | 亚洲午夜无码久久 | 亚洲精品国产第一综合99久久 | 亚洲综合另类小说色区 | 国产在线精品一区二区高清不卡 | 亚洲一区二区三区在线观看网站 | 国产无av码在线观看 | 久久亚洲精品中文字幕无男同 | 呦交小u女精品视频 | 色一情一乱一伦 | www成人国产高清内射 | 久久成人a毛片免费观看网站 | 丰满少妇女裸体bbw | 免费观看的无遮挡av | 欧美35页视频在线观看 | 色五月五月丁香亚洲综合网 | 久久久久久久久888 | 未满小14洗澡无码视频网站 | 国产无av码在线观看 | 网友自拍区视频精品 | 国产网红无码精品视频 | 4hu四虎永久在线观看 | 欧洲vodafone精品性 | 人妻无码αv中文字幕久久琪琪布 | 欧美日本日韩 | 一本久道高清无码视频 | 久久人人97超碰a片精品 | 水蜜桃亚洲一二三四在线 | 伊人久久婷婷五月综合97色 | 中文字幕av伊人av无码av | 色综合久久久无码网中文 | 2020久久超碰国产精品最新 | 精品国产福利一区二区 | 亚洲自偷自偷在线制服 | 美女毛片一区二区三区四区 | 亚洲国产欧美国产综合一区 | 国产精品毛多多水多 | 欧美精品无码一区二区三区 | 成熟人妻av无码专区 | 成熟妇人a片免费看网站 | 久久久久久久久蜜桃 | 国产精品亚洲а∨无码播放麻豆 | 亚洲欧美国产精品专区久久 | 亚洲午夜无码久久 | 国产亲子乱弄免费视频 | 国产亚洲视频中文字幕97精品 | 性欧美牲交xxxxx视频 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲国产一区二区三区在线观看 | 亚洲啪av永久无码精品放毛片 | 伊人久久大香线蕉午夜 | 国产性生大片免费观看性 | 成人aaa片一区国产精品 | 久久亚洲日韩精品一区二区三区 | 一本久道久久综合狠狠爱 | 国产婷婷色一区二区三区在线 | 久9re热视频这里只有精品 | 日本免费一区二区三区最新 | 国产深夜福利视频在线 | 狠狠cao日日穞夜夜穞av | ass日本丰满熟妇pics | 成人精品天堂一区二区三区 | 色综合视频一区二区三区 | 亚洲s色大片在线观看 | 亚洲中文无码av永久不收费 | 亚洲中文字幕在线无码一区二区 | 天堂无码人妻精品一区二区三区 | 性生交片免费无码看人 | 久久综合给合久久狠狠狠97色 | 丰满岳乱妇在线观看中字无码 | 国产超级va在线观看视频 | 日韩少妇内射免费播放 | 奇米影视888欧美在线观看 | 亚洲精品一区二区三区在线观看 | 老司机亚洲精品影院 | 1000部啪啪未满十八勿入下载 | 老熟女重囗味hdxx69 | 强开小婷嫩苞又嫩又紧视频 | 国产精品亚洲一区二区三区喷水 | 粉嫩少妇内射浓精videos | 精品无码一区二区三区爱欲 | 亚洲国产精品久久久天堂 | 高清国产亚洲精品自在久久 | 人妻熟女一区 | 人妻插b视频一区二区三区 | 熟妇人妻无乱码中文字幕 | 亚洲gv猛男gv无码男同 | 国产一区二区三区日韩精品 | 午夜丰满少妇性开放视频 | 中文字幕 人妻熟女 | 丰满肥臀大屁股熟妇激情视频 | 国产情侣作爱视频免费观看 | 人妻体内射精一区二区三四 | 欧美日韩久久久精品a片 | 无码任你躁久久久久久久 | 婷婷丁香五月天综合东京热 | 久久久婷婷五月亚洲97号色 | 无码人妻少妇伦在线电影 | 精品成在人线av无码免费看 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲人亚洲人成电影网站色 | 香蕉久久久久久av成人 | 国产精品久久福利网站 | 美女张开腿让人桶 | 成人aaa片一区国产精品 | 亚洲熟女一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 国产精品多人p群无码 | 成人精品天堂一区二区三区 | 国产精品视频免费播放 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 狠狠色丁香久久婷婷综合五月 | 亚洲人成网站免费播放 | 国产av久久久久精东av | 色五月丁香五月综合五月 | 高清不卡一区二区三区 | 欧美亚洲日韩国产人成在线播放 | 久久无码中文字幕免费影院蜜桃 | 无码国内精品人妻少妇 | 国产人妻人伦精品 | 人妻少妇精品无码专区二区 | 国产精品对白交换视频 | 夜精品a片一区二区三区无码白浆 | 无码人妻丰满熟妇区毛片18 | 日产国产精品亚洲系列 | 成人av无码一区二区三区 | 亚洲中文字幕乱码av波多ji | 亚洲精品国偷拍自产在线观看蜜桃 | 伊人久久婷婷五月综合97色 | 一本精品99久久精品77 | 中文久久乱码一区二区 | 日韩欧美中文字幕在线三区 | 无码精品人妻一区二区三区av | 精品久久久中文字幕人妻 | 无遮挡国产高潮视频免费观看 | 国内老熟妇对白xxxxhd | 亚洲另类伦春色综合小说 | 中文字幕无码日韩专区 | 久久久久久av无码免费看大片 | v一区无码内射国产 | 中文无码成人免费视频在线观看 | 国产精品久久久久久久影院 | 水蜜桃色314在线观看 | 麻豆国产人妻欲求不满谁演的 | 丰满少妇女裸体bbw | 无码纯肉视频在线观看 | 偷窥村妇洗澡毛毛多 | 国产精品高潮呻吟av久久 | 7777奇米四色成人眼影 | 国产精华av午夜在线观看 | 精品无码一区二区三区爱欲 | 欧美人与动性行为视频 | 鲁一鲁av2019在线 | 国产三级精品三级男人的天堂 | 亚洲乱亚洲乱妇50p | 大乳丰满人妻中文字幕日本 | 日本熟妇大屁股人妻 | 国产农村妇女高潮大叫 | 国产内射老熟女aaaa | 熟妇人妻无乱码中文字幕 | av无码电影一区二区三区 | 国产av人人夜夜澡人人爽麻豆 | 国产精品久久久久9999小说 | 久久精品国产一区二区三区 | 国产一区二区三区日韩精品 | 男女猛烈xx00免费视频试看 | 国产精品久久久久影院嫩草 | 嫩b人妻精品一区二区三区 | 巨爆乳无码视频在线观看 | 亚洲欧洲中文日韩av乱码 | 日日天干夜夜狠狠爱 | 国产成人综合在线女婷五月99播放 | 久久国产劲爆∧v内射 | 亚洲高清偷拍一区二区三区 | 激情综合激情五月俺也去 | 人妻少妇精品无码专区动漫 | 亚洲小说图区综合在线 | 国产成人精品必看 | 丁香花在线影院观看在线播放 | 久久精品国产一区二区三区 | 131美女爱做视频 | 人人爽人人澡人人高潮 | 四虎影视成人永久免费观看视频 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 99精品无人区乱码1区2区3区 | 亚洲国精产品一二二线 | 男女超爽视频免费播放 | 狠狠色噜噜狠狠狠狠7777米奇 | 少妇被粗大的猛进出69影院 | 无码乱肉视频免费大全合集 | 99在线 | 亚洲 | 久久综合网欧美色妞网 | 国产手机在线αⅴ片无码观看 | 麻豆md0077饥渴少妇 | ass日本丰满熟妇pics | 精品国产福利一区二区 | 亚洲国产精品成人久久蜜臀 | 三级4级全黄60分钟 | 中文精品久久久久人妻不卡 | 久久精品国产日本波多野结衣 | 国产精品内射视频免费 | 欧美丰满熟妇xxxx性ppx人交 | 成熟女人特级毛片www免费 | 久久亚洲a片com人成 | 无码av最新清无码专区吞精 | 中文字幕无码视频专区 | 成人亚洲精品久久久久 | 国产无遮挡吃胸膜奶免费看 | 老司机亚洲精品影院 | 久久久精品国产sm最大网站 | www一区二区www免费 | 国产亚av手机在线观看 | 性色欲情网站iwww九文堂 | 国内综合精品午夜久久资源 | 少妇太爽了在线观看 | 成人免费无码大片a毛片 | 曰本女人与公拘交酡免费视频 | 亚洲小说图区综合在线 | 一本色道久久综合亚洲精品不卡 | 久久国内精品自在自线 | 极品尤物被啪到呻吟喷水 | 精品国偷自产在线视频 | 久久综合网欧美色妞网 | 99久久无码一区人妻 | 波多野结衣乳巨码无在线观看 | 国产香蕉尹人视频在线 | 国产精品无码久久av | 无码毛片视频一区二区本码 | 丰满少妇人妻久久久久久 | 午夜精品一区二区三区在线观看 | 国产性生大片免费观看性 | 久久久久久久人妻无码中文字幕爆 | 亚洲国产精品久久人人爱 | 人妻夜夜爽天天爽三区 | 国产口爆吞精在线视频 | 久久精品国产精品国产精品污 | 亚洲精品国产第一综合99久久 | 欧美激情综合亚洲一二区 | 强开小婷嫩苞又嫩又紧视频 | 色婷婷综合激情综在线播放 | 国产特级毛片aaaaaa高潮流水 | 黑人大群体交免费视频 | 国产成人精品久久亚洲高清不卡 | 熟女少妇人妻中文字幕 | 在线а√天堂中文官网 | 欧美成人高清在线播放 | 欧美zoozzooz性欧美 | 青青草原综合久久大伊人精品 | 男女性色大片免费网站 | 99久久精品无码一区二区毛片 | 在线亚洲高清揄拍自拍一品区 | 在线观看欧美一区二区三区 | 国产欧美精品一区二区三区 | 日本一区二区更新不卡 | 麻豆国产人妻欲求不满 | 55夜色66夜色国产精品视频 | 任你躁国产自任一区二区三区 | 亚洲人成网站在线播放942 | 日本丰满护士爆乳xxxx | 久久久久成人精品免费播放动漫 | 亚洲欧洲日本综合aⅴ在线 | 成人三级无码视频在线观看 | 亚洲の无码国产の无码影院 | 中国女人内谢69xxxx | 日韩av激情在线观看 | 久久国产自偷自偷免费一区调 | 人妻少妇精品无码专区动漫 | 宝宝好涨水快流出来免费视频 | 欧美日本日韩 | 国产午夜亚洲精品不卡 | 亚洲人成人无码网www国产 | 亚洲自偷精品视频自拍 | 国产成人无码av一区二区 | 300部国产真实乱 | 亚洲一区二区三区在线观看网站 | 精品偷自拍另类在线观看 | 牛和人交xxxx欧美 | 精品国产麻豆免费人成网站 | 人人妻人人澡人人爽欧美一区九九 | 亚洲の无码国产の无码步美 | 国产精品多人p群无码 | 久久久久久久人妻无码中文字幕爆 | 九月婷婷人人澡人人添人人爽 | 中文字幕无码av波多野吉衣 | 少妇高潮喷潮久久久影院 | 俺去俺来也www色官网 | 亚洲国产精品久久久天堂 | 一区二区三区乱码在线 | 欧洲 | 国产精品久免费的黄网站 | 精品国产国产综合精品 | 中文字幕人妻无码一区二区三区 | 乱码av麻豆丝袜熟女系列 | 无码人妻黑人中文字幕 | 日韩欧美中文字幕在线三区 | 欧美日韩在线亚洲综合国产人 | 午夜无码区在线观看 | 国产精品无码成人午夜电影 | 精品人妻人人做人人爽 | 亚洲中文字幕无码中字 | 4hu四虎永久在线观看 | 精品人人妻人人澡人人爽人人 | 国产成人一区二区三区在线观看 | 国产9 9在线 | 中文 | 久久综合狠狠综合久久综合88 | 水蜜桃av无码 | 伦伦影院午夜理论片 | 国产免费观看黄av片 | 日韩av无码中文无码电影 | 成人精品视频一区二区三区尤物 | 精品国产福利一区二区 | 老熟妇仑乱视频一区二区 | 人妻夜夜爽天天爽三区 | 麻豆精品国产精华精华液好用吗 | 综合激情五月综合激情五月激情1 | 动漫av网站免费观看 | 日韩无套无码精品 | 狠狠色欧美亚洲狠狠色www | 最新国产乱人伦偷精品免费网站 | 午夜精品久久久久久久久 | 精品无码一区二区三区爱欲 | 欧美喷潮久久久xxxxx | 国产精品久久久久7777 | 精品成在人线av无码免费看 | 欧美三级a做爰在线观看 | 国产超碰人人爽人人做人人添 | 自拍偷自拍亚洲精品被多人伦好爽 | 成人无码影片精品久久久 | 国产九九九九九九九a片 | 亚洲精品综合五月久久小说 | 国内精品久久久久久中文字幕 | 亚洲无人区午夜福利码高清完整版 | 美女毛片一区二区三区四区 | 国产卡一卡二卡三 | 国产成人无码av一区二区 | 国产三级久久久精品麻豆三级 | 男人的天堂av网站 | 99久久久无码国产精品免费 | 国产又粗又硬又大爽黄老大爷视 | 免费无码午夜福利片69 | 99久久人妻精品免费二区 | 国产精品99久久精品爆乳 | 国产在线一区二区三区四区五区 | 亚洲国产精品无码一区二区三区 | 99久久精品国产一区二区蜜芽 | 天下第一社区视频www日本 | 色偷偷人人澡人人爽人人模 | 狂野欧美性猛交免费视频 | 男人的天堂av网站 | 宝宝好涨水快流出来免费视频 | 秋霞特色aa大片 | 亚洲国产精品久久久天堂 | 乱码av麻豆丝袜熟女系列 | 精品厕所偷拍各类美女tp嘘嘘 | 成人精品一区二区三区中文字幕 | 人人妻在人人 | 精品欧美一区二区三区久久久 | 精品欧美一区二区三区久久久 | 成人免费视频在线观看 | 亚洲欧美日韩成人高清在线一区 | 激情亚洲一区国产精品 | 国产色视频一区二区三区 | 亚洲人成网站免费播放 | 国产精品对白交换视频 | 国产亚洲精品久久久久久 | 国产精品久久久久影院嫩草 | 欧美人与物videos另类 | 国产农村乱对白刺激视频 | 国产精品久久久久影院嫩草 | 小sao货水好多真紧h无码视频 | 久久亚洲中文字幕无码 | 鲁一鲁av2019在线 | 亚洲欧洲中文日韩av乱码 | 国产午夜福利亚洲第一 | 亚洲一区二区三区播放 | 久久精品国产99精品亚洲 | 免费无码一区二区三区蜜桃大 | 日韩在线不卡免费视频一区 | 精品aⅴ一区二区三区 | 波多野42部无码喷潮在线 | 国产高清av在线播放 | 丰满少妇高潮惨叫视频 | 性欧美大战久久久久久久 | 欧美人与动性行为视频 | 给我免费的视频在线观看 | 狂野欧美性猛xxxx乱大交 | 自拍偷自拍亚洲精品10p | www国产亚洲精品久久网站 | 99精品国产综合久久久久五月天 | 无码福利日韩神码福利片 | 亚洲欧美精品伊人久久 | 日韩欧美中文字幕在线三区 | 亚洲一区二区三区偷拍女厕 | 中文字幕人妻丝袜二区 | 午夜无码区在线观看 | 日本一卡2卡3卡四卡精品网站 | 亚洲一区二区三区国产精华液 | 国产艳妇av在线观看果冻传媒 | 国产亚洲精品久久久久久 | 国产成人久久精品流白浆 | 日本一区二区三区免费高清 | 性欧美videos高清精品 | 麻豆国产97在线 | 欧洲 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 国产亚洲精品精品国产亚洲综合 | 国产亚av手机在线观看 | www成人国产高清内射 | 中文字幕+乱码+中文字幕一区 | 曰韩无码二三区中文字幕 | 国产精品毛片一区二区 | 中文字幕人妻无码一区二区三区 | 亚洲色大成网站www国产 | 51国偷自产一区二区三区 | 激情爆乳一区二区三区 | 精品久久久中文字幕人妻 | 亚洲成av人在线观看网址 | 国色天香社区在线视频 | 国产精品无码久久av | 对白脏话肉麻粗话av | 亚洲综合精品香蕉久久网 | 狠狠综合久久久久综合网 | 成人亚洲精品久久久久 | 窝窝午夜理论片影院 | 精品亚洲韩国一区二区三区 | 免费看男女做好爽好硬视频 | 日韩在线不卡免费视频一区 | 免费网站看v片在线18禁无码 | 成人欧美一区二区三区黑人 | 一本无码人妻在中文字幕免费 | 欧美色就是色 | 亚洲人亚洲人成电影网站色 | 人人妻人人澡人人爽精品欧美 | 久久综合给合久久狠狠狠97色 | 欧美精品免费观看二区 | 中文字幕无码日韩专区 | 精品无码国产自产拍在线观看蜜 | 成人性做爰aaa片免费看不忠 | 国产成人精品三级麻豆 | 宝宝好涨水快流出来免费视频 | 人人妻人人澡人人爽欧美一区九九 | 久久国产精品_国产精品 | 永久黄网站色视频免费直播 | 久久精品国产精品国产精品污 | 在线a亚洲视频播放在线观看 | 久久久久成人片免费观看蜜芽 | 亚洲一区二区三区偷拍女厕 | а√天堂www在线天堂小说 | 久久精品女人天堂av免费观看 | 亚洲成av人在线观看网址 | 国产精品亚洲lv粉色 | 高清国产亚洲精品自在久久 | 亚洲理论电影在线观看 | 国产亚洲欧美日韩亚洲中文色 | 思思久久99热只有频精品66 | 国产97人人超碰caoprom | 内射老妇bbwx0c0ck | 欧美精品免费观看二区 | 人妻插b视频一区二区三区 | 成人无码精品1区2区3区免费看 | 人妻尝试又大又粗久久 | 中文字幕乱码中文乱码51精品 | 久久久无码中文字幕久... | 国产免费久久精品国产传媒 | 波多野结衣av在线观看 | 丁香花在线影院观看在线播放 | 亚洲色无码一区二区三区 | 亚洲乱码中文字幕在线 | 日本免费一区二区三区最新 | 国内精品九九久久久精品 | 成人欧美一区二区三区黑人免费 | 中文字幕无码人妻少妇免费 | 99精品国产综合久久久久五月天 | 精品偷自拍另类在线观看 | 人妻体内射精一区二区三四 | 人妻少妇精品久久 | 免费看男女做好爽好硬视频 | 久久久久av无码免费网 | 欧美熟妇另类久久久久久多毛 | 欧美变态另类xxxx | 日本精品久久久久中文字幕 | 亚洲日韩av一区二区三区中文 | 亚洲精品午夜国产va久久成人 | 亚洲欧洲日本综合aⅴ在线 | 狠狠躁日日躁夜夜躁2020 | 久久综合色之久久综合 | 国产亚洲精品久久久久久国模美 | 成人一在线视频日韩国产 | 在线欧美精品一区二区三区 | 综合人妻久久一区二区精品 | 亚洲爆乳精品无码一区二区三区 | 日韩在线不卡免费视频一区 | 无码中文字幕色专区 | 成人无码视频免费播放 | 亚洲精品久久久久久久久久久 | 亚洲va中文字幕无码久久不卡 | 色妞www精品免费视频 | 无码人妻久久一区二区三区不卡 | 99精品无人区乱码1区2区3区 | 色爱情人网站 | 国产偷抇久久精品a片69 | 成人试看120秒体验区 | 国产猛烈高潮尖叫视频免费 | 六月丁香婷婷色狠狠久久 | 欧洲vodafone精品性 | 曰韩无码二三区中文字幕 | 欧美人与善在线com | 性生交片免费无码看人 | 日本一区二区三区免费播放 | 狠狠躁日日躁夜夜躁2020 | 欧美亚洲日韩国产人成在线播放 | 久久精品人人做人人综合试看 | 亚洲伊人久久精品影院 | 精品无人区无码乱码毛片国产 | 99国产精品白浆在线观看免费 | 欧美大屁股xxxxhd黑色 | 免费无码一区二区三区蜜桃大 | 一个人看的www免费视频在线观看 | 国产激情无码一区二区app | 大肉大捧一进一出视频出来呀 | 波多野结衣高清一区二区三区 | 黑人巨大精品欧美黑寡妇 | 永久黄网站色视频免费直播 | 内射白嫩少妇超碰 | 天天躁夜夜躁狠狠是什么心态 | 色综合久久久无码中文字幕 | 国产精品美女久久久网av | 国产精华av午夜在线观看 | 夜夜影院未满十八勿进 | 免费播放一区二区三区 | 午夜时刻免费入口 | 老子影院午夜伦不卡 | 爆乳一区二区三区无码 | 中文字幕色婷婷在线视频 | 国产小呦泬泬99精品 | 伊在人天堂亚洲香蕉精品区 | 日韩成人一区二区三区在线观看 | 水蜜桃亚洲一二三四在线 | 国内老熟妇对白xxxxhd | 1000部啪啪未满十八勿入下载 | 国产精品久久久久久亚洲影视内衣 | 精品国产麻豆免费人成网站 | 爆乳一区二区三区无码 | 精品成人av一区二区三区 | 国产内射爽爽大片视频社区在线 | 午夜肉伦伦影院 | 动漫av网站免费观看 | 高潮喷水的毛片 | 国产精品va在线观看无码 | 任你躁在线精品免费 | 性做久久久久久久免费看 | 又大又硬又爽免费视频 | 午夜理论片yy44880影院 | 大肉大捧一进一出好爽视频 | 在线成人www免费观看视频 | 中国女人内谢69xxxxxa片 | 人人妻人人澡人人爽人人精品 | 亚洲中文字幕无码中文字在线 | 久久精品中文字幕一区 | 黑人巨大精品欧美一区二区 | 国产69精品久久久久app下载 | 亲嘴扒胸摸屁股激烈网站 | 欧美刺激性大交 | 久久亚洲国产成人精品性色 | 欧美人与动性行为视频 | 国产精品久久久久久亚洲毛片 | 九一九色国产 | 国产激情综合五月久久 | 无套内谢的新婚少妇国语播放 | 我要看www免费看插插视频 | 国产一区二区三区影院 | 人人超人人超碰超国产 | 国产精品99爱免费视频 | 免费网站看v片在线18禁无码 | 综合网日日天干夜夜久久 | 国产69精品久久久久app下载 | 黑人巨大精品欧美黑寡妇 | 国产高清av在线播放 | 国产福利视频一区二区 | 亚洲中文字幕在线观看 | 亚洲色www成人永久网址 | 国产亚洲精品精品国产亚洲综合 | 色窝窝无码一区二区三区色欲 | 日日摸夜夜摸狠狠摸婷婷 | 国产人成高清在线视频99最全资源 | 久久国内精品自在自线 | 狠狠综合久久久久综合网 | 国产亚洲精品久久久久久久久动漫 | 精品人妻人人做人人爽夜夜爽 | 欧美人与禽猛交狂配 | 午夜嘿嘿嘿影院 | 波多野结衣aⅴ在线 | 国产成人精品三级麻豆 | 国产另类ts人妖一区二区 | 波多野结衣av一区二区全免费观看 | 亚洲无人区午夜福利码高清完整版 | 少妇高潮一区二区三区99 | 97久久精品无码一区二区 | 国产精品美女久久久久av爽李琼 | 国产做国产爱免费视频 | 午夜精品久久久久久久 | 风流少妇按摩来高潮 | 一本久道久久综合婷婷五月 | av无码不卡在线观看免费 | 久久久久久久久蜜桃 | 熟妇女人妻丰满少妇中文字幕 | 亚洲第一无码av无码专区 | 图片小说视频一区二区 | 欧美猛少妇色xxxxx | 性开放的女人aaa片 | 人人妻人人澡人人爽精品欧美 | 国产精品亚洲专区无码不卡 | 97精品国产97久久久久久免费 | 一本久道高清无码视频 | 亚洲码国产精品高潮在线 | 国产真人无遮挡作爱免费视频 | 免费无码肉片在线观看 | 四虎国产精品一区二区 | 久久综合给合久久狠狠狠97色 | 日日干夜夜干 | 免费观看又污又黄的网站 | 欧美老熟妇乱xxxxx | 久久精品一区二区三区四区 | 亚洲综合在线一区二区三区 | 亚洲成av人在线观看网址 | 露脸叫床粗话东北少妇 | 天天摸天天透天天添 | 成熟女人特级毛片www免费 | 老太婆性杂交欧美肥老太 | 亚洲s色大片在线观看 | 精品人妻av区 | 亚洲色欲色欲欲www在线 | 免费看男女做好爽好硬视频 | 欧美放荡的少妇 | 动漫av一区二区在线观看 | 亚洲国产精品一区二区美利坚 | 2019午夜福利不卡片在线 | 狂野欧美性猛交免费视频 | 欧洲极品少妇 | 国产精品亚洲专区无码不卡 | 久9re热视频这里只有精品 | 东京热无码av男人的天堂 | 成人欧美一区二区三区 | 无码人妻出轨黑人中文字幕 | 色综合久久中文娱乐网 | 亚洲成熟女人毛毛耸耸多 | 久久99精品国产.久久久久 | 国产乱人无码伦av在线a | 国产精品久久久久9999小说 | 亚洲爆乳大丰满无码专区 | 日日摸日日碰夜夜爽av | 亚洲精品中文字幕久久久久 | 久久97精品久久久久久久不卡 | 西西人体www44rt大胆高清 | 在线а√天堂中文官网 | 国产国语老龄妇女a片 | 精品亚洲韩国一区二区三区 | 精品国产一区二区三区四区在线看 | 中文无码精品a∨在线观看不卡 | 久久人人爽人人人人片 | 76少妇精品导航 | 九九热爱视频精品 | 亚洲成av人片天堂网无码】 | 国产精品无码成人午夜电影 | 性欧美疯狂xxxxbbbb | 亚洲熟妇色xxxxx亚洲 | 欧美性猛交内射兽交老熟妇 | 性生交大片免费看女人按摩摩 | 日韩欧美成人免费观看 | 熟女俱乐部五十路六十路av | 亚洲 欧美 激情 小说 另类 | 中国女人内谢69xxxx | 无码一区二区三区在线观看 | 丰满少妇人妻久久久久久 | 亚洲性无码av中文字幕 | 一本一道久久综合久久 | 内射欧美老妇wbb | 精品国产成人一区二区三区 | 国产人妻精品一区二区三区 | 一本大道久久东京热无码av | 亚洲国产欧美日韩精品一区二区三区 | 精品成人av一区二区三区 | 日韩av无码一区二区三区 | 国产人妻精品一区二区三区 | 亚欧洲精品在线视频免费观看 | 久久久久免费看成人影片 | 久久午夜无码鲁丝片 | 狠狠亚洲超碰狼人久久 | 国产精品高潮呻吟av久久 | 亚洲一区二区观看播放 | 综合激情五月综合激情五月激情1 | 国产区女主播在线观看 | 成人精品视频一区二区 | 国产热a欧美热a在线视频 | 亚洲一区av无码专区在线观看 | 无遮挡啪啪摇乳动态图 | 亚洲精品一区二区三区四区五区 | 精品午夜福利在线观看 | 国产亚洲美女精品久久久2020 | 亚洲国产精品久久久久久 | 亚洲精品一区二区三区在线 | 国产精品99久久精品爆乳 | 国产艳妇av在线观看果冻传媒 | 欧美xxxx黑人又粗又长 | 日本大香伊一区二区三区 | 久久亚洲日韩精品一区二区三区 | 成人免费无码大片a毛片 | 亚洲男女内射在线播放 | 国产欧美精品一区二区三区 | 精品人妻人人做人人爽 | 欧美性色19p | 免费播放一区二区三区 | 久久亚洲日韩精品一区二区三区 | 欧美老人巨大xxxx做受 | 99久久无码一区人妻 | 伊人久久大香线蕉亚洲 | 日韩av激情在线观看 | 日日躁夜夜躁狠狠躁 | 亚洲小说春色综合另类 | 国产成人无码午夜视频在线观看 | 亚洲精品综合一区二区三区在线 | 初尝人妻少妇中文字幕 | 老熟女重囗味hdxx69 | 蜜桃av抽搐高潮一区二区 | 97色伦图片97综合影院 | 十八禁真人啪啪免费网站 | 国产三级精品三级男人的天堂 | 西西人体www44rt大胆高清 | 成人精品视频一区二区 | 国产97色在线 | 免 | 一二三四在线观看免费视频 | 亚洲熟熟妇xxxx | 国产亚洲精品久久久久久大师 | 野狼第一精品社区 | 国产人妻精品午夜福利免费 | 日日鲁鲁鲁夜夜爽爽狠狠 | 欧美日韩视频无码一区二区三 | 男人扒开女人内裤强吻桶进去 | 欧美熟妇另类久久久久久多毛 | 国产精品va在线播放 | v一区无码内射国产 | 亚洲欧美综合区丁香五月小说 | 国产一区二区三区影院 | 少妇高潮喷潮久久久影院 | 精品偷拍一区二区三区在线看 | 成人性做爰aaa片免费看 | 狠狠色色综合网站 | 一本久久伊人热热精品中文字幕 | 色欲综合久久中文字幕网 | 欧美人与动性行为视频 | 国产精品高潮呻吟av久久4虎 | 国产精品久久国产精品99 | 婷婷丁香六月激情综合啪 | 国产精品va在线观看无码 | 欧美精品一区二区精品久久 | 狠狠色色综合网站 | 国产精品福利视频导航 | 青青草原综合久久大伊人精品 | 无码任你躁久久久久久久 | 国内综合精品午夜久久资源 | 国产人妻精品一区二区三区 | 无码一区二区三区在线 | 国产美女精品一区二区三区 | 色噜噜亚洲男人的天堂 | 亚洲乱码国产乱码精品精 | 四虎国产精品一区二区 | 伊人色综合久久天天小片 | 美女张开腿让人桶 | 狠狠色色综合网站 | 欧美性猛交xxxx富婆 | 亚洲小说春色综合另类 | 精品国产乱码久久久久乱码 | 国产精品久久久久久亚洲毛片 | 成年女人永久免费看片 | 亚洲午夜福利在线观看 | 精品国产国产综合精品 | 强开小婷嫩苞又嫩又紧视频 | 野外少妇愉情中文字幕 | a国产一区二区免费入口 | 亚洲 欧美 激情 小说 另类 | 国内精品人妻无码久久久影院蜜桃 | 日本大乳高潮视频在线观看 | 男人和女人高潮免费网站 | 久久精品人妻少妇一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 鲁鲁鲁爽爽爽在线视频观看 | 久久 国产 尿 小便 嘘嘘 | 欧美日韩综合一区二区三区 | 久久精品国产日本波多野结衣 | 无码人妻精品一区二区三区不卡 | 日本爽爽爽爽爽爽在线观看免 | 丰满少妇女裸体bbw | 国产无遮挡又黄又爽免费视频 |