国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

ThreadLocal全攻略:使用實(shí)戰(zhàn),源碼分析,內(nèi)存泄露分析

共 8561字,需瀏覽 18分鐘

 ·

2021-04-28 21:40

前言

說起ThreadLocal即便你沒有直接用到過,它也間接的出現(xiàn)在你使用過的框架里,比如Spring的事物管理,Hibernate的Session管理、logback(和log4j)中的MDC功能實(shí)現(xiàn)等。而在項(xiàng)目開發(fā)中,比如用到的一些分頁功能的實(shí)現(xiàn)往往也會借助于ThreadLocal。

正是因?yàn)門hreadLocal的無處不在,所以在面試的時候也經(jīng)常會被問到它的實(shí)現(xiàn)原理、核心API使用以及內(nèi)存泄露的問題。

而且基于這些問題還可以拓展到線程安全方面、JVM內(nèi)存管理與分析、Hash算法等等知識點(diǎn)??梢奣hreadLocal對開發(fā)人員來說是多么的重要的。如果你還沒有全面的了解,那么這篇文章值得你深入學(xué)習(xí)一下。

什么是ThreadLocal

ThreadLocal是Therad的局部變量的維護(hù)類,在Java中是作為一個特殊的變量存儲在。當(dāng)使用ThreadLocal維護(hù)變量時,ThreadLocal為每個使用該變量的線程提供獨(dú)立的變量副本,所以每一個線程都可以獨(dú)立地改變自己的副本,而不會影響其它線程所對應(yīng)的副本。

因?yàn)槊總€Thread內(nèi)有自己的實(shí)例副本,且該副本只能由當(dāng)前Thread使用,也就不存在多線程間共享的問題。

總的來說,ThreadLocal適用于每個線程需要自己獨(dú)立的實(shí)例且該實(shí)例需要在多個方法中被使用,也即變量在線程間隔離而在方法或類間共享的場景。

比如,有一個變量count,在多線程并發(fā)時操作count++會出現(xiàn)線程安全問題。但是通過ThreadLocal就可以為每個線程創(chuàng)建只屬于當(dāng)前線程的count副本,各自操作各自的副本,不會影響到其他線程。

從另外一個角度來說,ThreadLocal是一個數(shù)據(jù)結(jié)構(gòu),有點(diǎn)像HashMap,可以保存"key:value"鍵值對,但是一個ThreadLocal只能保存一個鍵值對,各個線程的數(shù)據(jù)互不干擾。

@Test
public void test1(){
ThreadLocal<String> localName = new ThreadLocal<>();
// 只提供了一個set方法;
localName.set("程序新視界");
// 同時只提供了一個get方法
String name = localName.get();
System.out.println(name);
}

上述代碼中線程A初始化了一個ThreadLocal對象,并調(diào)用set方法,保持了一個值。而這個值只能線程A調(diào)用get方法才能獲取到。如果此時線程B調(diào)用get方法是無法獲取到的。至于如何實(shí)現(xiàn)這一功能的,我們在后面源代碼分析中進(jìn)行講解,這里知道其功能即可。

ThreadLocal使用實(shí)例

上面介紹了使用場景和基本的實(shí)現(xiàn)理論,下面我們就來通過一個簡單的實(shí)例看一下如何使用ThreadLocal。

public class ThreadLocalMain {

/**
* ThreadLocal變量,每個線程都有一個副本,互不干擾
*/

public static final ThreadLocal<String> HOLDER = new ThreadLocal<>();

public static void main(String[] args) throws Exception {
new ThreadLocalMain().execute();
}

public void execute() throws Exception {
// 主線程設(shè)置值
HOLDER.set("程序新視界");
System.out.println(Thread.currentThread().getName() + "線程ThreadLocal中的值:" + HOLDER.get());

new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "線程ThreadLocal中的值:" + HOLDER.get());
// 設(shè)置當(dāng)前線程中的值
HOLDER.set("《程序新視界》");
System.out.println("重新設(shè)置之后," + Thread.currentThread().getName() + "線程ThreadLocal中的值:" + HOLDER.get());
System.out.println(Thread.currentThread().getName() + "線程執(zhí)行結(jié)束");
}).start();
// 等待所有線程執(zhí)行結(jié)束
Thread.sleep(1000L);
System.out.println(Thread.currentThread().getName() + "線程ThreadLocal中的值:" + HOLDER.get());
}

}

示例中定義了一個static final的ThreadLocal變量HOLDER,在main方法中模擬通過兩個線程來操作HOLDER中存儲的值。先對HOLDER設(shè)置一個值,然后打印獲取得到的值,然后新起一個線程去修改HOLDER中的值,然后分別在新線程和主線程兩處獲取對應(yīng)的值。

執(zhí)行程序,打印結(jié)果如下:

main線程ThreadLocal中的值:程序新視界
Thread-0線程ThreadLocal中的值:null
重新設(shè)置之后,Thread-0線程ThreadLocal中的值:《程序新視界》
Thread-0線程執(zhí)行結(jié)束
main線程ThreadLocal中的值:程序新視界

對照程序和輸出結(jié)果,你會發(fā)現(xiàn),主線程和Thread-0各自獨(dú)享自己的變量存儲。主線程并沒有因?yàn)門hread-0調(diào)用了HOLDER的set方法而被改變。

之所以能達(dá)到這個效果,正是因?yàn)樵赥hreadLocal中,每個線程Thread擁有一份自己的副本變量,多個線程互不干擾。那么,你會疑惑,ThreadLocal是如何實(shí)現(xiàn)這一功能的呢?

ThreadLocal原理分析

在學(xué)習(xí)ThreadLocal的原理之前,我們先來看一些相關(guān)的理論知識和數(shù)據(jù)結(jié)構(gòu)。

基本流程與源碼實(shí)現(xiàn)

一個線程內(nèi)可以存多個ThreadLocal對象,存儲的位置位于Thread的ThreadLocal.ThreadLocalMap變量,在Thread中有如下變量:

/* ThreadLocal values pertaining to this thread. This map is maintained
* by the ThreadLocal class. */
ThreadLocal.ThreadLocalMap threadLocals = null;

ThreadLocalMap是由ThreadLocal維護(hù)的靜態(tài)內(nèi)部類,正如代碼中注解所說這個變量是由ThreadLocal維護(hù)的。

我們在使用ThreadLocal的get()、set()方法時,其實(shí)都是調(diào)用了ThreadLocalMap類對應(yīng)的get()、set()方法。

Thread中的這個變量的初始化通常是在首次調(diào)用ThreadLocal的get()、set()方法時進(jìn)行的。

public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}

上述set方法中,首先獲取當(dāng)前線程對象,然后通過getMap方法來獲取當(dāng)前線程中的threadLocals:

ThreadLocalMap getMap(Thread t) {
return t.threadLocals;
}

如果Thread中的對應(yīng)屬性為null,則創(chuàng)建一個ThreadLocalMap并賦值給Thread:

void createMap(Thread t, T firstValue) {
t.threadLocals = new ThreadLocalMap(this, firstValue);
}

如果已經(jīng)存在,則通過ThreadLocalMap的set方法設(shè)置值,這里我們可以看到set中key為this,也就是當(dāng)前ThreadLocal對象,而value值則是我們要存的值。

對應(yīng)的get方法源碼如下:

public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings("unchecked")
T result = (T)e.value;
return result;
}
}
return setInitialValue();
}

可以看到同樣通過當(dāng)前線程,拿到當(dāng)前線程的threadLocals屬性,然后從中獲取存儲的值并返回。在get的時候,如果Thread中的threadLocals屬性未進(jìn)行初始化,則也會間接調(diào)用createMap方法進(jìn)行初始化操作。

下面我們通過一個流程圖來匯總一下上述流程: 

上述流程中給Thread的threadLocals屬性初始化的操作,在JDK8和9中通過debug發(fā)現(xiàn),都沒有走createMap方法,暫時還不清楚JVM是如何進(jìn)行初始化賦值的。而在測試JDK13和JDK14的時候,很明顯走了createMap方法。

ThreadLoalMap的數(shù)據(jù)結(jié)構(gòu)

ThreadLoalMap是ThreadLocal中的一個靜態(tài)內(nèi)部類,類似HashMap的數(shù)據(jù)結(jié)構(gòu),但并沒有實(shí)現(xiàn)Map接口。

ThreadLoalMap中初始化了一個大小16的Entry數(shù)組,Entry對象用來保存每一個key-value鍵值對。通過上面的set方法,我們已經(jīng)知道其中的key永遠(yuǎn)都是ThreadLocal對象。

看一下相關(guān)的源碼:

static class ThreadLocalMap {

static class Entry extends WeakReference<ThreadLocal<?>> {
/** The value associated with this ThreadLocal. */
Object value;

Entry(ThreadLocal<?> k, Object v) {
super(k);
value = v;
}
}

private static final int INITIAL_CAPACITY = 16;

// ...
}

ThreadLoalMap的類圖結(jié)構(gòu)如下: 

這里需要留意的是,ThreadLocalMap類中的Entry對象繼承自WeakReference,也就是說它是弱引用。這里會出現(xiàn)內(nèi)存泄露的情況,后續(xù)會講到。

由于hreadLocalMaps是延遲創(chuàng)建的,因此在構(gòu)造時至少要創(chuàng)建一個Entry對象。這里可以從構(gòu)造方法中看到:

ThreadLocalMap(ThreadLocal<?> firstKey, Object firstValue) {
table = new Entry[INITIAL_CAPACITY];
int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);
table[i] = new Entry(firstKey, firstValue);
size = 1;
setThreshold(INITIAL_CAPACITY);
}

上述構(gòu)造方法,創(chuàng)建了一個默認(rèn)長度為16的Entry數(shù)組,通過hashCode與length位運(yùn)算確定索引值i。而上面也提到,每個Thread都有一個ThreadLocalMap類型的變量。

至此,結(jié)合Thread,我們可以看到整個數(shù)據(jù)模型如下:

hash沖突及解決

我們留意到構(gòu)造方法中Entry在table中存儲位置是通過hashcode算法獲得。每個ThreadLocal對象都有一個hash值threadLocalHashCode,每初始化一個ThreadLocal對象,hash值就增加一個固定的大小0x61c88647。

在向ThreadLocalMap中的Entry數(shù)值存儲Entry對象時,會根據(jù)ThreadLocal對象的hash值,定位到table中的位置i。這里分三種情況:

  • 如果當(dāng)前位置為空的,直接將Entry存放在對應(yīng)位置;

  • 如果位置i已經(jīng)有值且這個Entry對象的key正好是即將設(shè)置的key,那么重新設(shè)置Entry中的value;

  • 如果位置i的Entry對象和即將設(shè)置的key沒關(guān)系,則尋找一個空位置;

計算hash值便會有hash沖突出現(xiàn),常見的解決方法有:再哈希法、開放地址法、建立公共溢出區(qū)、鏈?zhǔn)降刂贩ǖ取?/span>

上面的流程可以看出這里采用的是開放地址方法,如果當(dāng)前位置有值,就繼續(xù)尋找下一個位置,注意table[len-1]的下一個位置是table[0],就像是一個環(huán)形數(shù)組,所以也叫閉散列法。如果一直都找不到空位置就會出現(xiàn)死循環(huán),發(fā)生內(nèi)存溢出。當(dāng)然有擴(kuò)容機(jī)制,一般不會找不到空位置的。

ThreadLocal內(nèi)存泄露

ThreadLocal使用不當(dāng)可能會出現(xiàn)內(nèi)存泄露,進(jìn)而可能導(dǎo)致內(nèi)存溢出。下面我們就來分析一下內(nèi)存泄露的原因及相關(guān)設(shè)計思想。

內(nèi)存引用鏈路

根據(jù)前面對ThreadLocal的分析,得知每個Thread維護(hù)一個ThreadLocalMap,它key是ThreadLocal實(shí)例本身,value是業(yè)務(wù)需要存儲的Object。也就是說ThreadLocal本身并不存儲值,它只是作為一個key來讓線程從ThreadLocalMap獲取value。

仔細(xì)觀察ThreadLocalMap,這個map是使用ThreadLocal的弱引用作為Key的,弱引用的對象在GC時會被回收。因此使用了ThreadLocal后,引用鏈如圖所示:

其中虛線表示弱引用。下面我們先來了解一下Java中引用的分類。

Java中的引用

Java中通常會存在以下類型的引用:強(qiáng)引用、弱引用、軟引用、虛引用。

  • 強(qiáng)引用:通常new出來的對象就是強(qiáng)引用類型,只要引用存在,垃圾回收器將永遠(yuǎn)不會回收被引用的對象,哪怕內(nèi)存不足的時候;

  • 軟引用:使用SoftReference修飾的對象被稱為軟引用,軟引用指向的對象在內(nèi)存要溢出的時候被回收。如果回收之后,還沒有足夠的內(nèi)存,才會拋出內(nèi)存溢出異常;

  • 弱引用:使用WeakReference修飾的對象被稱為弱引用,只要發(fā)生垃圾回收,無論當(dāng)前內(nèi)存是否足夠,都會回收掉只被弱引用關(guān)聯(lián)的對象實(shí)例。

  • 虛引用:虛引用是最弱的引用,在Java中使用PhantomReference進(jìn)行定義。虛引用中唯一的作用就是用隊(duì)列接收對象即將死亡的通知。

泄露原因分析

正常來說,當(dāng)Thread執(zhí)行完會被銷毀,Thread.threadLocals指向的ThreadLocalMap實(shí)例也隨之變?yōu)槔锩娲娣诺腅ntity也會被回收。這種情況是不會發(fā)生內(nèi)存泄漏的。

發(fā)生內(nèi)存泄露的場景一般存在于線程池的情況下。此時,Thread生命周期比較長(存在循環(huán)使用),threadLocals引用一直存在,當(dāng)其存放的ThreadLocal被回收(弱引用生命周期比較短)后,對應(yīng)的Entity就成了key為null的實(shí)例,但value值不會被回收。如果此Entity一直不被get()、set()、remove(),就一直不會被回收,也就發(fā)生了內(nèi)存泄漏。

所以,通常在使用完ThreadLocal后需要調(diào)用remove()方法進(jìn)行內(nèi)存的清除。

比如在web請求當(dāng)中,我們可以通過過濾器等進(jìn)行回收方法的調(diào)用:

public void doFilter(ServeletRequest request, ServletResponse){
try{
//設(shè)置ThreadLocal變量
localName.set("程序新視界");
chain.doFilter(request, response)
}finally{
//調(diào)用remove方法溢出threadLocal中的變量
localName.remove();
}
}

為什么使用弱引用而不是強(qiáng)引用?

從表面上看內(nèi)存泄漏的根源在于使用了弱引用,但為什么JDK采用了弱引用的實(shí)現(xiàn)而不是強(qiáng)引用呢?

先來看ThreadLocalMap類上的一段注釋:

To help deal with very large and long-lived usages, the hash table entries use WeakReferences for keys. 

為了協(xié)助處理數(shù)據(jù)比較大并且生命周期比較長的場景,hash table的條目使用了WeakReference作為key。

這跟我們想象的有些不同,弱引用反而是為了解決內(nèi)存存儲問題而專門使用的。

我們先來假設(shè)一下,如果key使用強(qiáng)引用,那么在其他持有ThreadLocal引用的對象都回收了,但ThreadLocalMap依舊持有ThreadLocal的強(qiáng)引用,這就導(dǎo)致ThreadLocal不會被回收,從而導(dǎo)致Entry內(nèi)存泄露。

對照一下,弱引用的情況。持有ThreadLocal引用的對象都回收了,ThreadLocalMap持有的是ThreadLocal的弱引用,會被自動回收。只不過對應(yīng)的value值,需要在下次調(diào)用set/get/remove方法時會被清除。

綜合對比會發(fā)現(xiàn),采用弱引用反而多了一層保障,ThreadLocal被清理后key為null,對應(yīng)的value在下一次ThreadLocalMap調(diào)用set、get、remove的時候可能會被清除。

所以,內(nèi)存泄露的根本原因是是否手動清除操作,而不是弱引用。

ThreadLocal應(yīng)用場景

最后,我們再來回顧一下ThreadLocal的應(yīng)用場景:

  • 線程間數(shù)據(jù)隔離,各線程的ThreadLocal互不影響;

  • 方便同一個線程使用某一對象,避免不必要的參數(shù)傳遞;

  • 全鏈路追蹤中的traceId或者流程引擎中上下文的傳遞一般采用ThreadLocal;

  • Spring事務(wù)管理器采用了ThreadLocal;

  • Spring MVC的RequestContextHolder的實(shí)現(xiàn)使用了ThreadLocal;

小結(jié)

本篇文章我們從ThreadLocal的使用場景、源碼、類結(jié)構(gòu)、內(nèi)存結(jié)構(gòu)等進(jìn)行分析說明,最后分析了其引起內(nèi)存泄露的根本原因。通過本篇文章的學(xué)習(xí),基本上能掌握ThreadLocal百分之百九十的核心知識點(diǎn)。你學(xué)到了嗎?

往期推薦

來來來,聊聊7種內(nèi)存泄露場景和13種解決方案

這一篇文章,可以把Java中的類加載器了解的七七八八了

沒有監(jiān)控過JVM內(nèi)存的職場生涯,是不完美的

基于SpringBoot實(shí)現(xiàn)讓日志像詩一樣有韻律

與面試官聊try-catch-finally關(guān)閉資源,你的答案還是10年前的?



如果你覺得這篇文章不錯,那么,下篇通常會更好。添加微信好友,可備注“加群”(微信號:zhuan2quan)

一篇文章就看透技術(shù)本質(zhì)的人,
  和花一輩子都看不清的人,
  注定是截然不同的搬磚生涯。
▲ 按關(guān)注”程序新視界“,洞察技術(shù)內(nèi)幕
瀏覽 52
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产AⅤ| 国产精品国产自产拍高清AV| 豆花视频logo进入官网| 久操亚洲| 久久免费视频网站| 毛片在线看片| 亚洲无码视频免费观看| 日韩精品视频在线免费观看 | 春宵福利导航| 青春草在线免费视频| www九九| 日韩无码人妻一区二区三区 | 中文字幕首页| 大香蕉尹人网| 特黄aaaaaaaa真人毛片| 久久久WWW成人免费精品| 日韩中文字幕视频在线观看| 国产夫妻av| 亚洲在线高清视频| 91av电影| 9i看片成人免费视频| 91精品人妻少妇无码影院| 在线观看精品视频| 国产—级a毛—a毛免费视频| 久久精品禁一区二区三区四区五区 | 91视频免费在线观看| 日韩在线电影| 囯产精品久久久久久久| 爱逼综合网| 日日夜夜无码| 日韩无码中文字| 色色欧美色色| 97超碰人人| 2025中文字幕| 中文字幕+乱码+中文乱码电影 | 丁香四月婷婷| 天天色播| 天天干,夜夜操| 97超碰人妻| 91ThePorn国产在线观看| 无码动漫av| 成人精品一区日本无码网站suv/| 2019中文字幕mv第三季歌词| 久久久无码精品亚洲日韩男男| 波多野结衣毛片| 成人做爰A片一区二区app | 青青草免费观看视频| 成人网站www污污污网站公司| 99三级片| 动漫操逼视频| 久久综合久久鬼色| 蜜桃av秘一区二区三区| 男女拍拍拍| 嫩BBB嫩BBB嫩BBBn嫩| 东京热一区二区三区| 一区二区三区视频在线| 亚洲欧美在线免费观看| 暖暖日本在线| 黄色一级视频在线观看| 亚洲无码免费网站| 先锋av资源在线| 欧美aaaaaa| 日韩性爱视屏| 2025精品精品视频| 亚洲精品成人无码| 精品视频在线免费观看| 日韩黄页网站| 欧日无码| 中文字幕国产精品| 成人激情在线视频| 亚洲人妻无码一区| 69福利视频| 亚洲AV永久无码成人| 天天爽夜夜爽夜夜爽精品| 大香蕉偷拍视频| 欧美wwwww| 91精品国产一区二区三区四区大| 德国肥妇熟妇BBwBBw| 免费的黄色录像| 一级无码专区| 初学影院WWWBD英语完整版在线观看| 欧美成人一区二区| 欧美精品性爱| 日韩激情网| 亚洲a在线观看| 日本精品码喷水在线看| 99激情视频| 69国产| 日韩一级高清| 伊人小视频| 最近中文字幕在线| 久久久久久97| 天天色天天色天天色| 99久久婷婷| 国产综合一区二区| 东方av在线免费观看| 久久夜色精品国产噜噜亚洲AV| 91丨九色丨老熟女探花| 成人一区在线观看| 香蕉成人网站| 日韩中文字幕av在线| 久久尹人| 亚洲高清电影| 极品少妇久久久| 又黄又色的视频| 大色AV| 欧美精品A片| 亚洲午夜成人精品一区二区| 国产成人精品无码片子的价格| 北京熟妇搡BBBB搡BBBB电影| 国产成人精品免高潮在线观看| 久久超碰99| 99无码精品| 99无码精品| 免费草逼网站| 中文字幕在线成人| 免费观看一级毛一片| 成人av免费观看| 国内精品内射| 国产日韩一区二区三区| 久久成人国产| 日皮视频在线| 日韩成人一区二区| 亚洲AV秘无码苍井空| 好色婷婷| 东京热一区二区三区| 久久久久久成人电影| 午夜在线观看视频18| 日韩AV无码电影| 91精品久久人妻一区二区夜夜夜 | 可以免费看av的网站| 成人亚洲欧美| 求欧美精品网址| 狠狠插视频| 国产成人ab| 免费成人大片| 91三级视频| 中文字幕第83页| 人人干人人爽| 青娱乐超碰| 日本人人操人人摸| 免费国产h| 大香蕉在线视频75| 中文字幕一级片| 日韩在线免费看| 狼色视频| 色小说在线| 成人爱爱免费视频| 亚洲美女视频在线观看| 狠狠草狠狠干| 九色PORNY自拍视频| 一道本在线观看| 日韩小视频| 欧美日韩狠狠操在线观看视频| 久草社区在线| 好逼123| 一级a毛片| 免费人成在线观看视频播放| 精品国产久久久久久| 草B网| 99东京热| 97一区二区三区| 99视频网| 亚欧无码| 国产乱伦精品视频| 人人摸人人操人人爱| 超碰成人欧美| 人妻斩り43歳| 先锋影音中文字幕| 三级成人网| 伊人大香蕉在线视频| 蜜桃av.38| 欧美激情婷婷| 在线天堂a| 91黑人丨人妻丨国产丨| 色婷婷视频网站| 人人操人人草| 欧美精品久久久久久| 国产精品999| 日日操天天操夜夜操| 亚洲欧美91| 三级在线网站| 黄色免费看视频| 中文在线字幕免费观看电视剧大全| 日韩av电影在线观看| 成人一级片| 国内自拍2025| 欧美AAAAAAAA| 欧美性猛交XXXX乱大交HD| 插菊花综合网站| www.超碰在线| 一级片在线| 黄色在线网| 你懂得视频在线观看| 欧美区亚洲区| 97三级| 成人在线一区二区| 午夜3D动漫AV| 撸撸综合网| 日韩中文字幕av在线| 福利在线| A级网站| 亚洲欧美在线观看| 亚洲一区二区三区免费视频| 亲子伦一区二区三区观看方式| 猛男大粗猛爽h男人味| 久操免费在线观看| 欧美三级一级| 天堂综合| 成人在线免费观看视频| 3d动漫一区二区| 色色网的五月天| 三级片高清无码| 国产精品av在线| 17.3c一起起草| 仙踪林777777野大粗| 亚洲午夜久久久| 精品无码一区二区Av蜜桃| 亚洲久久久久久| 国产第四页| 亚洲精品mv| 无码高清视频在线观看| 色骚综合| 久久综合热| 五月婷婷丁香| 欧美性生活视频| 日韩久久高清| 亚洲欧洲AV| 亚洲最大成人网站| 亚洲国产成人在线| 人妻黑人一区二区三区| 91九色首页| 特级西西西西4444级酉西88wwww特 | 国产精品51麻豆cm传媒| 大香蕉最新视频| 日本视频一区二区三区| 五月婷婷影院| 波多野结衣高潮| jizz免费在线观看| 内射91| 五月婷婷激情| www.seses| 成人不卡视频| 精品一区二区三区免费毛片 | 1024手机在线视频| 97人妻人人澡人人爽人人| 亚洲视频中文字幕在线观看| AV解说| 免费欧美黄片| 一区二区三区网站| 九色精品| 久久99草| 免费日比视频| 天堂综合| 欧美日本成人网站入口| 揉BBB搡BBB搡BBB| 久久草在线播放| 亚洲福利片| 人人操人人超碰| 日本啪啪网站| 日本成人精品| Av天堂图片在线| 成人理论片| 黄色激情在线| 精品无码一区二区三区四区| 天天干夜夜操| 超碰人人爱国产视| 性爱视频网址| 久久亚洲AV无码午夜麻豆| 三级AV网站| 水果派解说在线观看| 久久亚洲Aⅴ成人无码国产丝袜 | 日日骚影院| 国产一级二级在线观看| 国产精品久久777777| 成人激情久久| 深夜福利av| 欧美精品久久久久久久久老牛影院| 久久久久亚洲AV成人片乱码| 国产无码AV在线| 韩日在线| 91视频综合网| 在线看91| 日逼视频免费看| 亚洲免费视频在线看| 色婷婷激情视频| 免费a在线| 人人色人人草| 欧美日韩一级A片| 成人亚洲| 天天透天天干| 91人妻人人人人爽| 欧美美女视频网站| 国产操逼大片| 国产有码视频| 亚洲视频99| 波多野结衣一区二区三区在线观看| 高清无码18| 最新中文字幕AV| 麻豆亚洲AV成人无码久久精品 | 国产伦精品一区二区三区妓女 | 先锋影音资源av| 日韩和的一区二区| 开心色情| 国产精品久久777777是什么意思| 先锋影音资源一区| 中文字幕AⅤ在线| 免费人成年激情视频在线观看| 一本色道久久无码人妻精品69| 美日韩无码| 五十路義母| 综合网欧美| 精品福利在线观看| 国语精品自拍| www.俺来也| 人人操夜夜| 免费无码又爽又黄又刺激网站| 内射免费视频| av亚洲波多野结衣白嫩水多波| 五月天狠狠干| 中文字幕视频在线免费观看| 久久精品黄色| 操逼视频在线| 一级二级三级毛片| 亚洲免费在线播放| 先锋资源男人站| 色网站在线观看| 国产剧情一区二区av在线观看 | 在桌下含她的花蒂和舌头H视频| 亚洲无码视频免费在线观看| 日本成人免费电影| 亚洲成人AⅤ| 亚洲一区二区黄色电影视频网站| 日韩精品丰满无码一级A片∴| 亚洲AV在线免费观看| 国产日日日| 国产精品国产精品国产专区不| 中文字幕视频在线直播| 久久99精品久久久久久水蜜桃| 日韩一级黄色电影| 日韩熟妇无码| 操逼动漫| 色色综合热| av无码在线播放| 亚洲日本中文字幕在线观看 | 一区二区三区无码高清| 亚洲口味重一级黄片| 熟女人妻在线| 亚洲天堂无码在线| 亚洲秘无码一区二区三区| 99色视频| 国产精品一级a毛视频| 成人黄色一级片| 麻豆天美蜜桃91| 丁香五月激情五月| 影音先锋女人资源| 国产无码免费在线观看| AA片免费看| 久久亚洲免费视频| 精品国产乱子伦一区二区三区,小小扐 | 中文字幕高清免费看| 国产黄色视频免费看| 激情无码视频| 国产色视频| 在线观看免费a片| 91乱子伦国产乱子伦海的味道 | 色999网址| 99久久夜色精品国产亚洲| 99re| 欧美精品一卡二卡| 久久91| 喷水视频在线观看| 日韩中文字幕| 无码日韩人妻精品久久蜜桃| 日韩无码专区| 国产一级a毛一级a毛视频在线网站)| 久久久婷婷| 欧美囗交大荫蒂免费| 日日夜夜精品| 欧美日韩免费在线| 国精品无码人妻一区二区三区免费 | 99久久爱re热6在播放| 杨贵妃一级婬片90分钟| 欧美日韩精品一区二区三区| 成人小视频18| 成人午夜小电影| 7777影视电视剧在线观看官网| 欧美三级不卡| 午夜福利成人视频| 丁香五月成人网| 中文av字幕| 另类国产| 大香蕉国产在线| 五月天久久久久| 韩国GOGOGO高清| 国产高潮在线| 18禁网站网址| 一区二区视频在线| 16一17女人毛片| 中国操逼视频| 最近中文字幕在线观看| 中文字幕在线观看免费| 精品亚洲一区二区三区四区五区| 狼友视频一国产| 俺也去大香蕉| 嫖中国站街老熟女HD| 西西人体大胆ww4444多少集| 国产精品男女| 人人妻人人草| 欧美精产国品一二三产品价格| 亚洲欧美在线观看| 欧洲亚洲免费视频| 亚洲俺去了| 天天艹夜夜艹| 天堂8在线视频| 欧美成人精品一区二区| 久久理论| 黄色在线网| 亚洲天堂成人网| 大肉大捧一进一出免费阅读| 国产一级AAAAA片免费| 国产丰满乱子伦无码| 青草社区在线观看| 在线观看免费成人网站| av影音先锋| 久久国产av| 国产成人无码一区二区在线观看| 夜夜撸| 亚欧洲精品| 免费AV网站在线| 欧美大香蕉在线| 88在线无码精品秘入口九色| 黄频免费观看| 亚洲精品无码视频在线观看| 免费看黄色A片| 一级电影网| 大香蕉AV在线观看| 可以免费观看的AV| 久久cao| 乱伦乱码| 欧美打炮网| 成人性爱免费视频| 中文字幕丰满的翔田千里| 蜜桃av秘无码一区三区四| 东京热无码一区| 黄色录像一级带| 西西人体大胆ww4444| 欧美成人电影在线观看| 最新va在线观看| 99精品视频免费看| 麻豆午夜福利视频| 综合一区二区| 波多野结衣无码一区二区| 国产精品一区二区AV日韩在线 | 国产在线视频你懂的| 天堂在线9| 日本成人中文字幕在线观看 | 91在线无码精品秘国产三年| 婷婷五月丁香色| 69激情网| 综合网亚洲| 高清无码视频观看| 996热re视频精品视频这里 | 日韩免费中文字幕A片| 99久久精品一区二区成人| 亚洲一区二区在线免费观看| 一区二区三区精品无码| 欧美肏逼网| 自拍视频网| 中国黄色一级A片| 大香蕉人人| 一本一本久久a久久精品牛牛影视| 人妻无码精品久久人妻成人| 99视频内射三四| 亚洲成人无码网站| 特一级黄A片| 亚洲最大黄色| 亚洲免费一级| 三级无码高清| 韩国GOGOGO高清| 91在线无码精品秘蜜桃入口| 在线三级片视频| 日韩黄色A级片| 亚洲性爱视频在线观看| 日本精品黄色视频| 日韩国产综合| 九九九免费视频| 一道本高清无码视频| 久视频在线观看| 亚洲做爱视频| 久久成人无码| 高颜值呻吟给力| 黑人无码AV黑人天堂无码AV| 伊人黄色片| 国产老熟女高潮毛片A片仙踪林| 2021无码| 99一区| 久久久久成人视频| 日韩www| 亚洲无码制服| 日本理论片一道本| 青草在线视频| 日韩视频一区| 国产精品无码成人AV在线播放| 波多野59部无码喷潮| 中国一级黄片| 亚洲在线视频观看| 久久丁香五月| BBw日本熟妇BBwHD| 国产精品无码久久久久成人app | 婷婷激情丁香五月天| 久久美女视频| 美女大香蕉| 欧美大鸡巴在线观看| 97色色得| 99久久视频| 在线毛片网站| 17c白丝喷水自慰| 欧美精品无码一区二区| 伊人大香蕉在线视频| 日韩精品久久久久久久酒店| 欧美A级成人婬片免费看| 免费av一区二区| 51成人网站| 国产乱子伦视频国产印度| 久久9视频| 特级西西444www高清大胆免费看 | 久久精品视频播放| www.91av| av三级片在线观看| 成人精品一区二区三区中文字幕| 日韩一区二区无码视频| 两根茎一起进去好爽A片在线观看| 国产成人AV片| 在线观看免费无码| 羽月希奶水饱胀在线播放| 欧美天天性| 国产高清视频| 九九九精品视频| 91成人无码看片在线观看网址 | av在线无码观看| 日韩无码专区电影| 加勒比久久综合| 亚洲av男人天堂| 欧美日韩亚洲天堂| 国产乱色精品成人免费视频| 韩日黄色| 免费毛片基地| 99精品久久久久久无码| 亚洲精选中文字幕| 偷拍视频图片综合网| 青青草免费福利视频| 中文字幕有码在线观看| 欧美级毛片一夜| 91.www91成人影视在线观看91成人网址9 | 国产欧美在线视频| 中文字幕第一页av| 色99网站| H版视频| 人妻中文无码| 精品视频国产| 日本91| 国产欧美成人在线| 成人天天爽| 免费国产h| 啪啪啪免费网站| 91久久综合亚洲鲁鲁五月天| 丰满人妻无码| 囯产精品久久久| 日本无码成人片在线播放| 亚洲AV色香蕉一区二区三区| 综合久久99| 特级西西人体大胆无码| 天天综合网久久综合网| 亚洲日本中文| 免费国产成人看片在线| 在线观看一级片| 欧美成人色| 中文字幕av在线| 亚洲vs无码秘蜜桃少妇| 久久精品9| 一区二区日本| 天天干妹子| 欧美日韩高清丝袜| 久草精品在线| 91黄色毛片| 热逼视频| 少妇搡BBBB搡BBB搡澳门| 国产伊人久久| 北条麻妃在线中文字幕| 久久怡春院| 91人人妻人人爽| 亚洲aaaaaa| 免费黄色大片网站| H片在线观看| 久色| 熟妇自拍| 影音先锋国产| 久青草资源福利视频| 国产黄片免费视频| 欧美成人三级在线播放| 日本一级婬片A片免费播放一| 中文字幕日韩无码片| 欧美footjob高跟脚交| 内射免费视频| 自拍偷拍国产| 黑人大香蕉| 久久99久久99精品免视看婷婷| 一道本无码在线视频| 亚洲免费黄| 另类欧美| 中文字幕AV在线免费观看| 婷婷五月激情小说| 樱桃码一区二区三区| 最美孕交vivoestv另类| 日韩一级在线观看| 一区二区三区视频免费| 国产传媒三级| 1级毛片| 天天色色综合| 国产一区二区成人久久919色 | 精品国产一二三| 久久丁香五月天| 国产曰韩欧美综合另类在线| 婷婷涩嫩草鲁丝久久午夜精品| 精品在线免费观看| 2021无码| 日韩特级片| 色欲亚洲| 网址你懂得| 91在线无码精品秘国产| 欧美精品一卡| 亚洲黄色免费| 日本中文字幕免费| av在线资源播放| 欧美中文在线观看| 久久久久99精品成人片欧美一区| 欧美久久大香蕉| 色天使AV| 国产午夜无码视频在线观看| 91视频免费网站| 久久精品美臀| 东京热视频在线观看| 人人妻人人澡人人爽久久| jizz在线观看免费视频| 成人免费在线电影| 国产精品久久久久精| 羽月希无码| 国产熟妇搡BBBB搡BBBB毛片| 手机AV网站| 免费av观看| 一级黄色在线| 人妻骚逼| 中出欧美亚洲| 日本中文无码| 欧美第一视频| 五月丁香狠狠爱| 午夜激情视频| 国产精品久久久久久久久A| 大肉大捧视频免费观看| 四虎成人网址| 亚洲成人免费视频| 精品国产AV色一区二区深夜久久 | 国产com| 91黄色电影| 亚洲精品无码人妻| 在线成人AV| 豆花视频成人精品视频| 久久中文字幕电影| 特级西西西88大胆无码| 亚洲视频免费在线| 激情淫荡少妇| 中文在线A∨在线| 日韩人妻在线视频| 久操综合视频在线| 丰满熟妇人妻无码视频| 一级欧美| 久久草草热国产精| 九九热视频在线观看| 天天干天天撸| 国产特级婬片免费看| 久久99精品久久久久久水蜜桃| 午夜国产在线| 亚洲操屄| 欧美精品18| 青榴视频免费观看| 国产ts| 国产成人无码一区二区在线| 日本少妇激情视频| 一级黄色毛片视频| 99精品在线| 一级看片免费视频| 91口爆| 成人操b视频| 亚洲va视频| 成人a一级片| 北京熟妇搡BBBB搡BBBB| 亚洲国产成人精品女人| 日韩成人AV电影| 亚洲有码在线播放| www天天操| 动漫一区二区| 日韩三级在线| 激情五月天激情网| 午夜黄色影院| 欧美黄色操逼| 亚洲成色A片77777在线小说| 丁香五月av| 亚洲综合中文字幕在线播放| 亚洲成人免费在线观看| 黄色爱爱| 欧美日韩爱爱| 久久99久久视频| 国产传媒精品| 夜夜骑婷婷91| 久久成人国产| 白洁91视频| 久久狼人| 大鸡巴黄色视频免费观看| 欧美天天性爱| 99re视频| 东方av在| 乱码中文字幕日韩欧美在线| 特级欧美AAAAAA| 日逼视频| 最新黄色av| 很很日| 东方AV在线免费观看| 亚洲搞清视频日本| 婷婷精品国产一区二区三区日韩| 色94色.欧美.setu| a片免费网站| 久久久999精品视频| 亚洲美女免费视频| 校园春色成人| 国产精品久久久久久久久久久久久久 | 亚洲五月六月| 91三级视频| 欧美日韩肏屄视频| 天天艹逼| 国产黄色视频免费看| 日韩在线免费视频| AV网站在线免费观看| 人妻少妇91精品一区黑人| 一级性爱| 色色色免费视频| 日韩人妻一区| 国产高清无码福利| 午夜精品一区二区三区在线视频| 黄色片视频免费| 强波多野结衣黑人| 麻豆高清无码| 亚洲网站免费在线观看| 五月婷婷色色| 青青草黄色视频| 日韩精品| 91精品久久久久久久久| 水果派解说AV无码一区| 亚洲sese| 亚洲高清视频免费| 老师机性爱视频在线播放| 国产精品无码av| 天天射中文| 香蕉福利视频| 免费无码又爽又黄又刺激网站| 中文字幕视频在线免费观看| 国产婷婷色一区二区在线观看| 手机av网站| 蜜臀久久99精品久久久巴士| 肏屄视频免费| 91精品国产91久久久久久吃药| 99热国产在线| 欧美AA视频| 无码人妻av一区| 无码人妻一区二区三区| 极品一线天小嫩嫩真紧| 亚州一级二级| 久久高清无码视频| 在线免费观看视频黄| 在线免费亚洲视频| 中文字幕在线观看视频www| 亚洲无码精品一区二区三区| 能看的操逼网站| 高潮喷水在线观看| 日韩人妻av| 国产性受XXXXXYX性爽| 中文字幕视频| 亚洲精品久久久蜜桃| 三级片AV在线| 欧美性交一区二区| 日韩精品三级片| 91香蕉国产视频| 国产三级黄色片| 成人爱爱视频| 欧美亚洲日韩一区二区三区| 干老女人逼| 成人视频123| 17c.白丝喷水自慰| 夜色视频网| 水果派解说AV无码一区| 狼友在线视频| 在线观看视频黄| 国产女人18毛片水真多成人如厕| 猫咪亚洲AV成人无码电影 | 久久久久999| 日韩黄色电影在线免费观看| 亚洲做爱视频| 免费69视频看片| 好爽~要尿了~要喷了~同桌| 男女www视频| 老湿机福利院| 一级片电影网站| 91成人片| 欧美在线综合| 日韩成人精品在线| 五月丁香婷婷激情综合| 最新中文字幕在线| 蜜桃av无码一区二区三区| 欧美老女人性| 日韩无码二级| 97人人艹| 在线免费观看毛片| 五月天激情小说网| 亚洲免费小电影| 亚洲激情精品| 99视频在线免费观看| 偷拍第一页| 久久久久久97| 日韩欧美中文字幕公布| 亚欧美日韩| 色伊人久操视频| 黄色福利网站| 亚洲综合一区二区| 成人亚洲综合| 日韩性无码| 欧美肏屄视频| 中文字幕AV在线观看| 精品免费在线观看| 欧美日韩亚洲一区二区| 精品尤物在线| 人人干人| 淫荡五月天视频导航| 亚洲精品欧美| 亚洲清高毛无码毛片| 丁香五月综合网| 欧洲美一区二区三区亚洲| 精品啪啪| 麻豆天美蜜桃91| 中文成人在线| 无码一区二区三区四季| 欧美性爱在线观看| 亚洲自拍偷拍视频| 九色国产在线| 国产精品视频网站| 亚洲综合在线播放| 在线男人天堂| 91麻豆国产福利在线观看| 色哟哟视频在线观看| 91精品老司机| 加勒比无码人妻| 欧美天天干| 亚洲成人高清| 安徽妇女BBBWBBBwm| 亚洲成人性爱网| 黄色美女网站| 日韩色道| 蜜桃av无码一区二区三区| wwwsesese| 色网站在线| 波多野吉衣高清无码| 在线播放国产精品| 无码五月天| 中文字幕亚洲专区| 91久久人澡人妻人人澡人人爽 | 伊人毛片| 77Q视频| 丝袜无码| 91精品国产综合久久久蜜臀酒店| 国产怡红院| 久久久噜噜噜久久中文字幕色伊伊| 青青操逼视频| 天天射天天爽| 肉乳无码A片av| 激情视频国产| 国产精品一区二区性色AV| 日韩黄色无码视频| 亚洲AV无码久久精品色无码蜜桃| 日本国产在线观看| 人人干干| 免费成人大片| 亚洲综合天堂| 日本A片免费看| 亚洲黄片免费| 波多野结衣成人在线| 亚洲,制服,综合,中文| 51午夜| 男女www| 欧美亚洲一区| 日日干日日操| 伊人在线视频|