亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 開(kāi)發(fā) > Java > 正文

淺談Java引用和Threadlocal的那些事

2024-07-14 08:43:58
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1 背景

某一天在某一個(gè)群里面的某個(gè)群友突然提出了一個(gè)問(wèn)題:"threadlocal的key是虛引用,那么在threadlocal.get()的時(shí)候,發(fā)生GC之后,key是否是null?"屏幕前的你可以好好的想想這個(gè)問(wèn)題,在這里我先賣個(gè)關(guān)子,先講講Java中引用和ThreadLocal的那些事。

2 Java中的引用

對(duì)于很多Java初學(xué)者來(lái)說(shuō),會(huì)把引用和對(duì)象給搞混淆。下面有一段代碼,

User zhangsan = new User("zhangsan", 24);

這里先提個(gè)問(wèn)題zhangsan到底是引用還是對(duì)象呢?很多人會(huì)認(rèn)為zhangsan是個(gè)對(duì)象,如果你也是這樣認(rèn)為的話那么再看一下下面一段代碼

User zhangsan;zhangsan = new User("zhangsan", 24);

這段代碼和開(kāi)始的代碼其實(shí)執(zhí)行效果是一致的,這段代碼的第一行User zhangsan,定義了zhangsan,那你認(rèn)為zhangsan還是對(duì)象嗎?如果你還認(rèn)為的話,那么這個(gè)對(duì)象應(yīng)該是什么呢?的確,zhangsan其實(shí)只是一個(gè)引用,對(duì)JVM內(nèi)存劃分熟悉的同學(xué)應(yīng)該熟悉下面的圖片:

Java,引用,Threadlocal

 其實(shí)zhangsan是棧中分配的一個(gè)引用,而new User("zhangsan", 24)是在堆中分配的一個(gè)對(duì)象。而'='的作用是用來(lái)將引用指向堆中的對(duì)象的。就像你叫張三但張三是個(gè)名字而已并不是一個(gè)實(shí)際的人,他只是指向的你。

我們一般所說(shuō)的引用其實(shí)都是代指的強(qiáng)引用,在JDK1.2之后引用不止這一種,一般來(lái)說(shuō)分為四種:強(qiáng)引用,軟引用,弱引用,虛引用。而接下來(lái)我會(huì)一一介紹這四種引用。

2.1 強(qiáng)引用

上面我們說(shuō)過(guò)了 User zhangsan = new User("zhangsan", 24);這種就是強(qiáng)引用,有點(diǎn)類似C的指針。對(duì)強(qiáng)引用他的特點(diǎn)有下面幾個(gè):

強(qiáng)引用可以直接訪問(wèn)目標(biāo)對(duì)象。

只要這個(gè)對(duì)象被強(qiáng)引用所關(guān)聯(lián),那么垃圾回收器都不會(huì)回收,那怕是拋出OOM異常。

容易導(dǎo)致內(nèi)存泄漏。

2.2 軟引用

在Java中使用SoftReference幫助我們定義軟引用。其構(gòu)造方法有兩個(gè):

public SoftReference(T referent);public SoftReference(T referent, ReferenceQueue<? super T> q);

兩個(gè)構(gòu)造方法相似,第二個(gè)比第一個(gè)多了一個(gè)引用隊(duì)列,在構(gòu)造方法中的第一個(gè)參數(shù)就是我們的實(shí)際被指向的對(duì)象,這里用新建一個(gè)SoftReference來(lái)替代我們上面強(qiáng)引用的等號(hào)。 下面是構(gòu)造軟引用的例子:

 softZhangsan = new SoftReference(new User("zhangsan", 24));

2.2.1軟引用有什么用?

如果某個(gè)對(duì)象他只被軟引用所指向,那么他將會(huì)在內(nèi)存要溢出的時(shí)候被回收,也就是當(dāng)我們要出現(xiàn)OOM的時(shí)候,如果回收了一波內(nèi)存還不夠,這才拋出OOM,弱引用回收的時(shí)候如果設(shè)置了引用隊(duì)列,那么這個(gè)軟引用還會(huì)進(jìn)一次引用隊(duì)列,但是引用所指向的對(duì)象已經(jīng)被回收。這里要和下面的弱引用區(qū)分開(kāi)來(lái),弱引用是只要有垃圾回收,那么他所指向的對(duì)象就會(huì)被回收。下面是一個(gè)代碼例子:

public static void main(String[] args) { ReferenceQueue<User> referenceQueue = new ReferenceQueue(); SoftReference softReference = new SoftReference(new User("zhangsan",24), referenceQueue); //手動(dòng)觸發(fā)GC System.gc(); Thread.sleep(1000); System.out.println("手動(dòng)觸發(fā)GC:" + softReference.get()); System.out.println("手動(dòng)觸發(fā)的隊(duì)列:" + referenceQueue.poll()); //通過(guò)堆內(nèi)存不足觸發(fā)GC makeHeapNotEnough(); System.out.println("通過(guò)堆內(nèi)存不足觸發(fā)GC:" + softReference.get()); System.out.println("通過(guò)堆內(nèi)存不足觸發(fā)GC:" + referenceQueue.poll()); } private static void makeHeapNotEnough() { SoftReference softReference = new SoftReference(new byte[1024*1024*5]); byte[] bytes = new byte[1024*1024*5]; } 輸出: 手動(dòng)觸發(fā)GC:User{name='zhangsan', age=24} 手動(dòng)觸發(fā)的隊(duì)列:null 通過(guò)堆內(nèi)存不足觸發(fā)GC:null 通過(guò)堆內(nèi)存不足觸發(fā)GC:java.lang.ref.SoftReference@4b85612c

通過(guò)-Xmx10m設(shè)置我們堆內(nèi)存大小為10,方便構(gòu)造堆內(nèi)存不足的情況。可以看見(jiàn)我們輸出的情況我們手動(dòng)調(diào)用System.gc并沒(méi)有回收我們的軟引用所指向的對(duì)象,只有在內(nèi)存不足的情況下才能觸發(fā)。

2.2.2軟應(yīng)用的應(yīng)用

在SoftReference的doc中有這么一句話:

Soft references are most often used to implement memory-sensitive caches

也就是說(shuō)軟引用經(jīng)常用來(lái)實(shí)現(xiàn)內(nèi)存敏感的高速緩存。怎么理解這句話呢?我們知道軟引用他只會(huì)在內(nèi)存不足的時(shí)候才觸發(fā),不會(huì)像強(qiáng)引用那用容易內(nèi)存溢出,我們可以用其實(shí)現(xiàn)高速緩存,一方面內(nèi)存不足的時(shí)候可以回收,一方面也不會(huì)頻繁回收。在高速本地緩存Caffeine中實(shí)現(xiàn)了軟引用的緩存,當(dāng)需要緩存淘汰的時(shí)候,如果是只有軟引用指向那么久會(huì)被回收。不熟悉Caffeine的同學(xué)可以閱讀深入理解Caffeine

2.3 弱引用

弱引用在Java中使用WeakReference來(lái)定義一個(gè)弱引用,上面我們說(shuō)過(guò)他比軟引用更加弱,只要發(fā)生垃圾回收,若這個(gè)對(duì)象只被弱引用指向,那么就會(huì)被回收。這里我們就不多廢話了,直接上例子:

public static void main(String[] args) { WeakReference weakReference = new WeakReference(new User("zhangsan",24)); System.gc(); System.out.println("手動(dòng)觸發(fā)GC:" + weakReference.get()); }輸出結(jié)果:手動(dòng)觸發(fā)GC:null

可以看見(jiàn)上面的例子只要垃圾回收一觸發(fā),該對(duì)象就被回收了。

2.3.1 弱引用的作用

在WeakReference的注釋中寫(xiě)到:

Weak references are most often used to implement canonicalizing mappings.

從中可以知道虛引用更多的是用來(lái)實(shí)現(xiàn)canonicalizing mappings(規(guī)范化映射)。在JDK中WeakHashMap很好的體現(xiàn)了這個(gè)例子:

public static void main(String[] args) throws Exception { WeakHashMap<User, String> weakHashMap = new WeakHashMap(); //強(qiáng)引用 User zhangsan = new User("zhangsan", 24); weakHashMap.put(zhangsan, "zhangsan"); System.out.println("有強(qiáng)引用的時(shí)候:map大小" + weakHashMap.size()); //去掉強(qiáng)引用 zhangsan = null; System.gc(); Thread.sleep(1000); System.out.println("無(wú)強(qiáng)引用的時(shí)候:map大小"+weakHashMap.size()); }輸出結(jié)果為:有強(qiáng)引用的時(shí)候:map大小1無(wú)強(qiáng)引用的時(shí)候:map大小0

可以看出在GC之后我們?cè)趍ap中的鍵值對(duì)就被回收了,在weakHashMap中其實(shí)只有Key是虛引用做關(guān)聯(lián)的,然后通過(guò)引用隊(duì)列再去對(duì)我們的map進(jìn)行回收處理。

2.4 虛引用

虛引用是最弱的引用,在Java中使用PhantomReference進(jìn)行定義。弱到什么地步呢?也就是你定義了虛引用根本無(wú)法通過(guò)虛引用獲取到這個(gè)對(duì)象,更別談?dòng)绊戇@個(gè)對(duì)象的生命周期了。在虛引用中唯一的作用就是用隊(duì)列接收對(duì)象即將死亡的通知。

 public static void main(String[] args) throws Exception { ReferenceQueue referenceQueue = new ReferenceQueue(); PhantomReference phantomReference = new PhantomReference(new User("zhangsan", 24), referenceQueue); System.out.println("什么也不做,獲取:" + phantomReference.get()); }輸出結(jié)果:什么也不做,獲取:null

在PhantomReference的注釋中寫(xiě)到:

Phantom references are most often used for scheduling pre-mortem cleanup actions in a more flexible way than is possible with the Java finalization mechanism.

虛引用得最多的就是在對(duì)象死前所做的清理操作,這是一個(gè)比Java的finalization梗靈活的機(jī)制。 在DirectByteBuffer中使用Cleaner用來(lái)回收對(duì)外內(nèi)存,Cleaner是PhantomReference的子類,當(dāng)DirectByteBuffer被回收的時(shí)候未防止內(nèi)存泄漏所以通過(guò)這種方式進(jìn)行回收,有點(diǎn)類似于下面的代碼:

public static void main(String[] args) throws Exception { Cleaner.create(new User("zhangsan", 24), () -> {System.out.println("我被回收了,當(dāng)前線程:{}"+ Thread.currentThread().getName());}); System.gc(); Thread.sleep(1000); }輸出:我被回收了,當(dāng)前線程:Reference Handler

3 ThreadLocal

ThreadLocal是一個(gè)本地線程副本變量工具類,基本在我們的代碼中隨處可見(jiàn)。這里就不過(guò)多的介紹他了。

3.1 ThreadLocal和弱引用的那些事

上面說(shuō)了這么多關(guān)于引用的事,這里終于回到了主題了我們的ThreadLocal和弱引用有什么關(guān)系呢?

在我們的Thread類中有下面這個(gè)變量:

ThreadLocal.ThreadLocalMap threadLocals

ThreadLocalMap本質(zhì)上也是個(gè)Map,其中Key是我們的ThreadLocal這個(gè)對(duì)象,Value就是我們?cè)赥hreadLocal中保存的值。也就是說(shuō)我們的ThreadLocal保存和取對(duì)象都是通過(guò)Thread中的ThreadLocalMap來(lái)操作的,而key就是本身。在ThreadLocalMap中Entry有如下定義:

 static class Entry extends WeakReference<ThreadLocal<?>> { /** The value associated with this ThreadLocal. */ Object value; Entry(ThreadLocal<?> k, Object v) { super(k); value = v; } }

可以看見(jiàn)Entry是WeakReference的子類,而這個(gè)虛引用所關(guān)聯(lián)的對(duì)象正是我們的ThreadLocal這個(gè)對(duì)象。我們又回到上面的問(wèn)題:

"threadlocal的key是虛引用,那么在threadlocal.get()的時(shí)候,發(fā)生GC之后,key是否是null?"
這個(gè)問(wèn)題晃眼一看,虛引用嘛,還有垃圾回收那肯定是為null,這其實(shí)是不對(duì)的,因?yàn)轭}目說(shuō)的是在做threadlocal.get()操作,證明其實(shí)還是有強(qiáng)引用存在的。所以key并不為null。如果我們的強(qiáng)引用不存在的話,那么Key就會(huì)被回收,也就是會(huì)出現(xiàn)我們value沒(méi)被回收,key被回收,導(dǎo)致value永遠(yuǎn)存在,出現(xiàn)內(nèi)存泄漏。這也是ThreadLocal經(jīng)常會(huì)被很多書(shū)籍提醒到需要remove()的原因。

你也許會(huì)問(wèn)看到很多源碼的ThreadLocal并沒(méi)有寫(xiě)remove依然再用得很好呢?那其實(shí)是因?yàn)楹芏嘣创a經(jīng)常是作為靜態(tài)變量存在的生命周期和Class是一樣的,而remove需要再那些方法或者對(duì)象里面使用ThreadLocal,因?yàn)榉椒;蛘邔?duì)象的銷毀從而強(qiáng)引用丟失,導(dǎo)致內(nèi)存泄漏。

3.2 FastThreadLocal

FastThreadLocal是Netty中提供的高性能本地線程副本變量工具。在Netty的io.netty.util中提供了很多牛逼的工具,后續(xù)會(huì)一一給大家介紹,這里就先說(shuō)下FastThreadLocal。

FastThreadLocal有下面幾個(gè)特點(diǎn):

使用數(shù)組代替ThreadLocalMap存儲(chǔ)數(shù)據(jù),從而獲取更快的性能。(緩存行和一次定位,不會(huì)有hash沖突)
由于使用數(shù)組,不會(huì)出現(xiàn)Key回收,value沒(méi)被回收的尷尬局面,所以避免了內(nèi)存泄漏。

總結(jié)

文章開(kāi)頭的問(wèn)題,為什么會(huì)被問(wèn)出來(lái),其實(shí)是對(duì)虛引用和ThreadLocal理解不深導(dǎo)致,很多時(shí)候只記著一個(gè)如果是虛引用,在垃圾回收時(shí)就會(huì)被回收,就會(huì)導(dǎo)致把這個(gè)觀念先入為主,沒(méi)有做更多的分析思考。所以大家再分析一個(gè)問(wèn)題的時(shí)候還是需要更多的站在不同的場(chǎng)景上做更多的思考。

以上所述是小編給大家介紹的Java引用和Threadlocal的那些事,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲人成伊人成综合网小说| 亚洲欧美网站在线观看| 精品美女在线观看| 美日韩在线视频| 91传媒在线免费观看| 国产美女免费视频| 国产精品久久久久7777| 国产做受高潮69| 成年人视频网站| 日韩亚洲精品在线| 黄色高清视频网站| 国产精品高潮呻吟视频| 精品1区2区在线观看| 68精品国产免费久久久久久婷婷| 亚洲一区二区在线免费观看| 欧美性活一级视频| 四虎影视18库在线影院| 岛国最新视频免费在线观看| 6080午夜| 三妻四妾的电影电视剧在线观看| 日韩在线视频线视频免费网站| 狠狠色噜噜狠狠狠狠色吗综合| 天堂美国久久| 国产免费av高清在线| 国产精品久久777777毛茸茸| 九九热在线观看视频| 性欧美精品一区二区三区在线播放| 亚洲精品一区av在线播放| 久久综合九色综合久久久精品综合| 日韩欧美中文字幕一区二区| 国内精品嫩模av私拍在线观看| 97欧美精品一区二区三区| 欧美在线视频第一页| 大地资源第二页在线观看高清版| 久久视频在线免费观看| 欧美中文字幕在线播放| 国产在线乱码一区二区三区| 中文字幕在线播出| 成人午夜在线观看视频| 久草视频一区二区| 国产91精品久久久久久久网曝门| 91av入口| 色综合视频一区中文字幕| 国内精品在线视频| 欧美日韩五区| 亚洲国产成人av好男人在线观看| av三级在线播放| 麻豆明星ai换脸视频| 免费看av不卡| 久久精品国产理论片免费| 国产91免费看| 久久人人爽爽人人爽人人片av| 粉嫩aⅴ一区二区三区| 亚洲男人天堂网| 水蜜桃一区二区| 无码国产精品久久一区免费| 精品久久久久久无码中文野结衣| 亚洲一区二区三区在线播放| 5566日本婷婷色中文字幕97| 日韩欧美在线一区二区三区| 久久久精品美女| 福利视频在线| 伊人中文字幕在线观看| 国产.com| 日本精品裸体写真集在线观看| 免费又爽又黄禁片视频1000片| 亚洲欧洲美洲av| 欧美日韩亚洲国产| 日韩影视在线观看| 欧美xxxxhdvideosex| 男生草女生视频| 欧美天堂一区二区三区| 日本中文字幕中出在线| 亚洲网中文字幕| 亚洲第一黄色片| 国产黄色大片网站| 老司机午夜激情| 日本免费在线一区| 日韩精品视频在线观看视频| 我爱我色成人网| 久久97超碰国产精品超碰| 成人毛片在线播放| 久久久久久尹人网香蕉| 性生活免费在线观看| www三级免费| 久久99国产精品一区| 国产高清不卡| 中文字幕无码乱码人妻日韩精品| 亚洲情侣在线| 含羞草www国产在线视频| 中文在线一区二区三区| mm1313亚洲国产精品美女| 成人亚洲欧美激情在线电影| 日本一区二区三区四区在线视频| 国产乱码在线观看| av软件在线观看| 国产男男gay网站| 91国产免费视频| 国产精品伦一区二区三区| 欧美三级黄美女| 亚洲欧洲日产国码无码久久99| 免费日韩视频| 亚洲尤物影院| 三年中文在线观看免费大全中国| 天天操天天射天天插| 欧美性猛交乱大交| 成年人性生活视频| av免费在线播放网站| 亚洲国产成人在线视频| 波多野结衣在线观看一区| av第一福利大全导航| 国产不卡一卡2卡三卡4卡5卡在线| 最新四虎影在线在永久观看www| 色综合视频一区二区三区高清| 国产精品19乱码一区二区三区| 国产精品日韩精品中文字幕| 国产成人视屏| 成人涩涩免费视频| 日韩一二三区| 精品美女久久久久| 岛国片免费看| 在线观看国产黄| 啦啦啦免费高清视频在线观看| 91久久国产综合久久91猫猫| 中文字幕在线视频一区二区三区| 精品中文字幕一区二区三区av| 婷婷五月综合激情| 四虎永久免费观看| 国产精品免费一区豆花| 日韩电影在线免费观看| 成人片在线播放| 日韩影视在线| 国产精品一区二区三区不卡| 福利在线视频网站| 亚洲欧美日韩国产精品| 日韩av中文| 国产精品欧美久久久久一区二区| 一区二区三区视频免费视频观看网站| 欧美日韩伦理片| 成人在线小视频| 精品国产乱码久久久久久浪潮| 中文字幕有码在线观看| 黄色污网站在线免费观看| 性欧美69式xxxxx| 午夜精品毛片| 国产精品一区二区男女羞羞无遮挡| 国产精品久久久久一区二区国产| 95视频在线观看| 成年人免费看毛片| 日本不卡一区视频| 94色蜜桃网一区二区三区| 久久久久女教师免费一区| 在线性视频日韩欧美| 国产精品日韩电影| 日本va欧美va瓶| 欧美视频成人| 精品美女调教视频| 综合色中文字幕| 国产日韩欧美综合精品| 后入内射欧美99二区视频| 亚洲精选在线| 91浏览器在线视频| 欧美放荡的少妇| 电影一区中文字幕| 欧美大片一区二区三区| 国产精品羞羞答答| 最新成人av网站| 狠狠干婷婷色| 桃乃木香奈av在线| 国产精品视区| 1000部精品久久久久久久久| 欧美韩国日本在线观看| 国产精品国模大尺度视频| 秋霞影院一区二区三区| 国产伦精品一区二区三区四区| 日韩精品视频免费看| 欧美高跟鞋交xxxxxhd| 麻豆国产一区二区三区四区| 亚洲人成77777在线观看网| 欧美日韩尤物久久| 青青视频在线播放| 亚洲免费影视第一页| 国产youjizz在线| 国产亚洲一卡2卡3卡4卡新区| 欧美国产日韩一区| 在线免费av网站| 欧美黄免费看| 欧洲乱码伦视频免费| 欧美福利一区| 亚洲精品电影久久久| 五月婷婷激情久久| 一区二区三区网址| www.av网站| 日韩精品一级二级| 亚洲精品在线观看免费| 欧美日产在线观看| 免费在线成人av| 日本高清视频免费在线观看| 久久夜色精品国产亚洲aⅴ| 蜜臀av国内免费精品久久久夜夜| 国产精品日日做人人爱| 久草网视频在线观看| 精品久久久久久久久中文字幕| 国产精品视频久久| 欧美成人全部免费| 日韩视频中午一区| 亚洲精品国产一区二区精华液| 日本a级片视频| 久久久999久久久| 中文字幕人妻一区二区在线视频| 色综合视频一区二区三区高清| 中文字幕无码乱码人妻日韩精品| 亚洲人成电影网站色mp4| 午夜精品一区二区在线观看| 男女猛烈无遮挡| 超碰91在线观看| 亚洲一区av| 中文字幕在线观看免费高清| 国产ts人妖调教重口男| 一区二区三区在线观看av| 一区二区黄色片| 91av在线视频观看| 午夜久久av| 精品久久久久久久久久久久久| 五月久久久综合一区二区小说| 五月婷婷激情网| 精品一区二区三区欧美| 中文字幕有码热在线视频| 青青一区二区| 天天操天天干天天操| 亚洲天堂中文字幕在线观看| 国产亚洲精品久久久久久豆腐| 国产l精品国产亚洲区久久| 亚洲国产精品福利| 精品亚洲永久免费| 男人插女人下面免费视频| 国产乱码在线观看| 日韩美女视频一区二区在线观看| 国产成人午夜精品| 国产一级片一区二区| 欧美性猛交xxxx乱大交极品| 久久久久久爱| 日韩一二三区不卡在线视频| 中文字幕9999| 91福利精品视频| 51国产偷自视频区视频| 日韩大陆毛片av| 亚洲字幕成人中文在线观看| 国产九一精品| 欧美成人激情视频免费观看| av在线导航| 亚洲精品视频在线观看视频| 国产在线一二| 黄色一级片免费看| 日本韩国在线不卡| 私人玩物在线观看| 嗯用力啊快一点好舒服小柔久久| 欧美丝袜激情| 美女把腿扒开让男人桶免费| 久久久影院免费| 色爱av综合网| 午夜av在线免费观看| 狠狠爱www人成狠狠爱综合网| 国产精品815.cc红桃| 中文字幕在线日亚洲9| 国内老熟妇对白hdxxxx| 人人干人人插| 亚洲精品一区二区三区av| 日韩一级在线| 欧美情侣性视频| 岛国av免费观看| 91精品婷婷国产综合久久竹菊| 最新亚洲国产| 色综合一个色综合| 欧美激情在线观看| 99热自拍偷拍| 激情久久综合网| 欧美sm一区| 精品美女一区| 亚洲欧美校园春色| 视频一区二区三区在线| 女教师高潮黄又色视频| 97超碰青青草| 中文字幕中文字幕在线中高清免费版| 天堂中文在线免费观看| 99久久国产宗和精品1上映| 日韩资源在线| 精品无人区一区二区三区| 久久99精品久久久久久野外| 伊人成年综合电影网| 人妻一区二区视频| 91精品国产欧美一区二区| 日韩一区二区视频在线观看| 欧美怡红院视频| 国产精品一区二三区| 国产成人无码av在线播放dvd| 色老汉一区二区三区| 三上悠亚av一区二区三区| 日本在线精品视频| 国产三级视频在线| 欧美性极品xxxx娇小| 欧美韩国一区二区| 午夜av免费观看| 亚洲天堂男人av| 人与人69性欧美三人交| 一区二区三区美女xx视频| 丰满少妇被猛烈进入| 欧美精品一区二区蜜臀亚洲| 日韩中文字幕不卡| 国产在线高清精品| 色综合久久88色综合天天免费| 国内揄拍国内精品| 成人免费在线观看入口| 午夜视频在线观看精品中文| 黄瓜视频污在线观看| 黄页网站视频在线观看| jizzjizz亚洲| 国产精品大全| 国产精品嫩草影院久久久| 色综合久久天天| 中文字幕视频免费在线观看| 日韩三级久久| 日韩视频在线视频| 一色桃子久久精品亚洲| 黄色一级片一级片| 久久新电视剧免费观看| 国产成人在线精品| 精品久久久久中文字幕小说|