精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

從Java的視角看閉包以及內(nèi)存泄漏

存儲 存儲軟件
無論上是Java還是Kotlin咱們基本都沒聽說過閉包這個概念的存在。但是如果我們?nèi)チ私忾]包解決的問題,咱們就會明白閉包:這不就是匿名內(nèi)部類會持有外部對象的引用嗎?

[[385774]]

本文轉(zhuǎn)載自微信公眾號「咸魚正翻身」,作者M(jìn)Dove。轉(zhuǎn)載本文請聯(lián)系咸魚正翻身公眾號。    

前言

主要聊幾個點(diǎn):

  • 什么是閉包,為什么有的語言無時無刻都在提閉包這個概念(比如:JS)?
  • Java中有沒有閉包?
  • 內(nèi)存泄漏

正文

無論上是Java還是Kotlin咱們基本都沒聽說過閉包這個概念的存在。但是如果我們?nèi)チ私忾]包解決的問題,咱們就會明白閉包:這不就是匿名內(nèi)部類會持有外部對象的引用嗎?

一、閉包

兩段類似的代碼,先看一段Kotlin代碼:

  1. val arr = arrayListOf<() -> Unit>() 
  2. for (index in 0..10) { 
  3.     arr.add(object : () -> Unit { 
  4.         override fun invoke() { 
  5.             print(index
  6.         } 
  7.  
  8.     }) 
  9. arr[6].invoke() 

輸出結(jié)果6,沒什么異議。但是,有趣的來了,這段代碼在JS里:

  1. var arr=[] 
  2. for(var i = 0; i<10; i++){ 
  3.     arr[i] = function(){ 
  4.         console.log(i) 
  5.     } 
  6. arr 
  7. arr[6]() 

這里運(yùn)行是10。(據(jù)我前端的同學(xué)說,這是一道必考的前端面試題??)

為了方便代碼理解,這里針對上述JS代碼展開兩個JS的規(guī)則:

變量提升:

for(var i = 0; i<10; i++)里邊的i會進(jìn)行一個叫做“變量提升”的操作,上述代碼實(shí)際是這樣:

  1. var i 
  2. for(i = 0; i<10; i++){} 

作用域:

函數(shù)體里的console.log(i)為什么能引用到i,是因?yàn)镴S是按作用域查找變量,如果當(dāng)前作用域沒有這個變量就會向父級查找,以此類推。

有了上邊兩個點(diǎn),大家應(yīng)該就能get到為啥arr6的時候,通過父作用域找到了i,而此時的i = 10。

那么問題來了,JS里邊怎么讓console.log(i)打印6?答案是:閉包。

  1. var arr=[] 
  2. for(var i = 0; i<10;i++){ 
  3.     (function(i){ 
  4.         arr[i]=function(){ 
  5.             console.log(i) 
  6.         } 
  7.     })(i) 
  8. arr[6]() 

簡單看一下代碼發(fā)生了什么改動?用一個有一個參數(shù)的函數(shù)包了一下。每次for循環(huán)的時候都調(diào)用這個函數(shù)并傳遞一個當(dāng)前的i進(jìn)去。

此后對于console.log(i)來說,父級作用域就是包裹的那個函數(shù),而找到的i也就是正確的i。

這就是JS的閉包。咱們再回憶一下Java是不是也是類似的處理方式?

做法出奇的相似,這里用了一個名為TestKt$main$1的類包裹了我們的Function。并且構(gòu)造函數(shù)里接收我們需要的i。

所以無論上閉包,還是持有外部對象引用。本質(zhì)想要解決的問題都是:正確的變量引用。這里還有一個題外話:匿名內(nèi)部類持有外部引用的時候,為啥要加final?

這里了解了二者的實(shí)現(xiàn)原理,咱們再來聊一聊二者都會遇到的潛在問題:內(nèi)存泄漏。

二、內(nèi)存泄漏

出現(xiàn)內(nèi)存泄漏的原因也很簡單:

  1. 函數(shù)內(nèi)要使用外部變量,那么勢必要持有外部變量
  2. 而函數(shù)的執(zhí)行時機(jī)有可能在外部變量生命周期外執(zhí)行
  3. 為了保證2步驟的正常,那么原本應(yīng)該被回收的外部變量就不能被回收了,因?yàn)楹瘮?shù)還在引用。所以外部變量就內(nèi)存泄漏了

我們來看一個比較常見的代碼,在一個UI組件里delay一段時間,然后再拿到這個組件里的某個View做delay之后的事情:

  1. class TestActivity : Activity() { 
  2.     override fun onCreate(savedInstanceState: Bundle?) { 
  3.         super.onCreate(savedInstanceState) 
  4.         setContentView(R.layout.activity_fragment_container) 
  5.  
  6.         window.decorView.postDelayed({ 
  7.             Log.d("TEST", findViewById<FrameLayout>(R.id.container).toString()) 
  8.         }, 3000) 
  9.     } 

這段代碼至少存在兩個相關(guān)的問題:

  1. 3秒內(nèi)退出這個Activity,在第3秒時會出現(xiàn)空指針異常。
  2. TestActivity這個實(shí)例會被泄漏3秒鐘。

這倆個問題的原因都很直接:因?yàn)閜ostDelayed的代碼塊需要調(diào)用findViewById,所以隱式的持有了TestActivity實(shí)例。而Activity走完onDestroy()內(nèi)部的View已經(jīng)被remove了。所以postDelayed的代碼塊雖然能拿到Activity但是已經(jīng)find不到View了。

由上述的代碼,咱們來客觀的思考內(nèi)存泄漏:

客觀的看待內(nèi)存泄漏

個人觀點(diǎn):內(nèi)存泄漏不是洪水猛獸。因?yàn)槲覀內(nèi)粘V泻芏鄡?yōu)化手段的本質(zhì)都會產(chǎn)生內(nèi)存泄漏。

  • 單例的緩存池

很多時候,內(nèi)存泄漏并不會產(chǎn)生太大的影響,畢竟大家都沒有刻意的針對內(nèi)存泄漏的場景進(jìn)行優(yōu)化過。原因也很簡單:我們一般泄漏的內(nèi)存都很小。

但也有例外,我猜大家多少都聽說過一個原則:需要傳遞Context的時候優(yōu)先傳Application的Context。

很多時候Context的背后是Activity/Fragment等UI組件,這些組件相對來說內(nèi)存占用相對比較大。比如ImageView,ImageView本身不大,但是它會強(qiáng)引用Bitmap這種極大內(nèi)存的對象。

如果我們Activity/Fragment中碰巧又強(qiáng)引用這種大內(nèi)存的對象(比如:ImageView)。此Context一旦泄露就是毀滅級的。

因此一些ImageView為了兜底內(nèi)存泄漏問題,有如下的優(yōu)化方案。

  1. override fun onDetachedFromWindow() { 
  2.     super.onDetachedFromWindow() 
  3.     recycleBackground(this) 
  4.     recycleImageView(this) 
  5.  
  6. private static void recycleBackground(View view) { 
  7.     if (view == null) { 
  8.         return
  9.     } 
  10.     Drawable drawable = view.getBackground(); 
  11.     if (drawable != null) { 
  12.         drawable.setCallback(null); 
  13.         view.setBackground(null); 
  14.     } 
  15.  
  16. private static void recycleImageView(ImageView iv) { 
  17.     if (iv == null) { 
  18.         return
  19.     } 
  20.     Drawable drawable = iv.getDrawable(); 
  21.     if (drawable != null) { 
  22.         drawable.setCallback(null); 
  23.         iv.setImageDrawable(null); 
  24.     } 

如何解決內(nèi)存泄漏

我們都知道JVM中的垃圾回收一般使用 :根搜索算法。也就是咱們常聽到的可行性分析。

一句話理解:當(dāng)該觸發(fā)垃圾回收的時候,嘗試確定哪些對象已經(jīng)不再引用,一波將這些對象帶走就完事了。(而我們的內(nèi)存泄漏的本質(zhì):該被帶走的對象被還活著的對象引用著)

上邊說的簡單,但是會帶來額外的問題:

1. 垃圾的回收不是實(shí)時的

  • 極端情況下會頻繁觸發(fā)gc(比如常說的內(nèi)存抖動)

2. gc時對全部內(nèi)存進(jìn)行可達(dá)性分析是很耗時的(而出現(xiàn)gc的時候是會stop-the-world,停掉除gc線程外的所有線程)

針對問題1,JVM的配置里是有一些配置,可以更細(xì)粒度的控制回收時機(jī)。

針對問題2,也就出現(xiàn)了各式各樣的垃圾回收器,來優(yōu)化耗時

堆內(nèi)存和棧內(nèi)存

為啥要聊這個話題。主要引出來堆/棧內(nèi)存的區(qū)別。

函數(shù)中new出來的變量只要不發(fā)生逃逸,都會隨棧幀的出入棧來走過自己“華麗的一生”。所以局部變量一般不太需要考慮。

而成員變量都是伴隨著類出現(xiàn)。類的實(shí)例化是在堆上,堆上內(nèi)存的“生老病死”是由gc說的算。正常情況下類中成員變量都是強(qiáng)引用,所以這就構(gòu)成了引用鏈。只要還掛在GC-Root這條鏈上,那么就意味著可達(dá)。這種case從gc的視角來說這些內(nèi)存就該活著。

強(qiáng)引用和弱引用

根據(jù)上述的分析,其實(shí)我們已經(jīng)明白內(nèi)存泄漏的根本就是本該壽終正寢的對象,由于錯誤的強(qiáng)引用,導(dǎo)致“延年益壽”了。

強(qiáng)/弱引用很好理解:

  • 強(qiáng)引用:擁有免死金牌(引用),只要免死金牌不到期,不死不滅
  • 弱引用:如同韭菜,需要割(釋放)的時候就被割(釋放)了

而這個錯誤的強(qiáng)引用,在一定情況下可以用弱引用來解決。

解決方案1:弱引用(不推薦)

咱們明確了錯誤的強(qiáng)引用導(dǎo)致內(nèi)存泄漏,那我們很自然的想到把強(qiáng)引用改成弱引用:

  1. // 強(qiáng)引用 
  2. val ctx = context 
  3. // 弱引用 
  4. val weakCtx = WeakReference<Context>(context) 

當(dāng)觸發(fā)GC的時候,讓GC自己去回收吧。很簡單,改造成本也很小。但是存在問題:

  • 弱引用只有觸發(fā)GC的時候才會釋放,因此它沒有根本解決存在泄漏的問題,只是一種兜底方案而已。
  • GC后發(fā)生弱引用回收,此時業(yè)務(wù)get()就是null,有可能不符合業(yè)務(wù)場景。

解決方案2:切斷引用

這一條是正路,從根本上解決問題。

但凡需要注冊回調(diào)(產(chǎn)生匿名內(nèi)部類),都要考慮一下這個注冊進(jìn)去的對象,是不是生命周期比隱式持有的對象長?如果是那就存在內(nèi)存泄漏。

而解決起來也很簡單,就是把被長生命周期對象強(qiáng)引用的短生命周期對象在合適的時機(jī)置為null即可。

三、LeakCanary原理

在一個Activity執(zhí)行完onDestroy()之后,將它放入WeakReference中,然后將這個WeakReference類型的Activity對象與ReferenceQueque關(guān)聯(lián)。這時再從ReferenceQueque中查看是否有沒有該對象,如果沒有,執(zhí)行g(shù)c,再次查看,還是沒有的話則判斷發(fā)生內(nèi)存泄露了。最后用HAHA(Headless Android Heap Analyzer)這個開源庫去分析dump之后的heap內(nèi)存。

  • ReferenceQueque:當(dāng)被 WeakReference 引用的對象的生命周期結(jié)束,一旦被 GC 檢查到,GC 將會把該對象添加到 ReferenceQueue 中,待 ReferenceQueue 處理。當(dāng) GC 過后對象一直不被加入 ReferenceQueue,說明它可能存在內(nèi)存泄漏。
  1. @Synchronized private fun moveToRetained(key: String) { 
  2.   removeWeaklyReachableObjects() 
  3.   val retainedRef = watchedObjects[key
  4.   if (retainedRef != null) { 
  5.     retainedRef.retainedUptimeMillis = clock.uptimeMillis() 
  6.     // 主動gc/判斷是否存在泄漏->dump內(nèi)存 
  7.     onObjectRetainedListeners.forEach { it.onObjectRetained() } 
  8.   } 
  9.  
  10. private fun removeWeaklyReachableObjects() { 
  11.   var ref: KeyedWeakReference? 
  12.   do { 
  13.     ref = queue.poll() as KeyedWeakReference? 
  14.     if (ref != null) { 
  15.       watchedObjects.remove(ref.key
  16.     } 
  17.   } while (ref != null
  • 最新的庫已經(jīng)不用HAHA了,新搞了一套。有興趣的同學(xué)可以github自行搜索

結(jié)語

內(nèi)存泄漏不是洪水猛獸,但也不應(yīng)該視而不見。理論上來說不應(yīng)該寫出存在內(nèi)存泄漏的代碼,但是如果真的需要,可以問自己兩個問題:

  1. 這里內(nèi)存泄漏是必須的嗎?
  2. 這里內(nèi)存泄漏的對象大嗎?

如果你的答案是true,那么泄漏也不算什么大事。

 

責(zé)任編輯:武曉燕 來源: 咸魚正翻身
相關(guān)推薦

2016-10-31 20:56:57

Javascript閉包內(nèi)存泄漏

2025-07-28 02:11:00

2025-03-26 09:41:19

2019-01-30 18:24:14

Java內(nèi)存泄漏編程語言

2022-02-17 08:16:23

MMU內(nèi)存管理

2022-01-13 10:19:34

軟件汽車 技術(shù)

2024-03-11 08:22:40

Java內(nèi)存泄漏

2009-06-16 11:17:49

內(nèi)存泄漏

2012-06-19 15:12:20

Java內(nèi)存泄露

2021-07-30 19:07:27

大數(shù)據(jù)云計算云原生化

2024-01-22 09:51:32

Swift閉包表達(dá)式尾隨閉包

2011-10-14 10:08:27

2022-05-04 10:38:58

React閉包組件

2017-08-09 21:04:56

2009-06-16 11:20:22

內(nèi)存泄漏

2024-01-30 10:12:00

Java內(nèi)存泄漏

2015-08-18 13:42:42

js作用域鏈變量

2022-05-05 08:31:48

useRefuseEffecthook

2015-03-30 11:18:50

內(nèi)存管理Android

2022-05-27 12:42:31

網(wǎng)絡(luò)安全工業(yè)企業(yè)工控安全領(lǐng)域
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

蜜桃a∨噜噜一区二区三区| 污网站在线免费看| 日本在线不卡一区| 日韩午夜在线视频| 亚洲热在线视频| 国模雨婷捆绑高清在线| 99久久99久久精品免费看蜜桃| 欧美洲成人男女午夜视频| av男人的天堂av| 国产精品3区| 天天做天天摸天天爽国产一区| 日韩电影天堂视频一区二区| 国产黄色免费大片| 香蕉成人久久| 久久精品成人欧美大片古装| 99re这里只有| 日韩黄色在线| 精品国产乱码久久久久久婷婷| 亚洲精品一区二区三区四区五区 | 色综合天天做天天爱| 亚洲欧美久久久久一区二区三区| 亚洲国产综合网| 奇米影视一区二区三区小说| 亚洲成av人影院在线观看网| 欧美国产一二三区| 91福利免费视频| 国产欧美不卡| 免费91麻豆精品国产自产在线观看| 在线免费观看a级片| 台湾天天综合人成在线| 一本色道**综合亚洲精品蜜桃冫| 中文字幕超清在线免费观看| 日韩在线无毛| 成人午夜在线播放| 亚洲综合av影视| 国产在线观看第一页| 最新日韩av| 免费91在线视频| 91精品国自产在线| 亚洲免费专区| 亚洲成人av中文字幕| 污污视频网站在线| 国产91在线播放精品| 婷婷开心久久网| 久青草视频在线播放| 午夜视频在线看| 成人国产精品免费观看动漫 | 国产一级18片视频| 午夜欧美精品| 久久久国产精品免费| 日本免费www| 免费电影一区二区三区| 亚洲精品一区二区三区婷婷月| 国产精品成人免费一区久久羞羞| 精品午夜视频| 制服丝袜国产精品| 中文字幕丰满乱码| 久久人体av| 欧美三片在线视频观看 | а天堂中文在线资源| 国产欧美日韩在线一区二区| 国产午夜精品理论片a级探花| 国产伦精品一区二区免费| 亚洲成av人片在线观看www| 欧美一区二区播放| 国偷自产av一区二区三区麻豆| 三级欧美日韩| 精品国产一区二区在线观看| 中文字幕制服丝袜| 九九热播视频在线精品6| 精品国产免费久久| 99久久国产精| 久久99国内| 中文字幕免费精品一区高清| 手机免费观看av| 欧美一区91| 久久久久久久久久久人体| 国产午夜视频在线| 宅男噜噜噜66国产日韩在线观看| 青青草原成人在线视频| 无码人妻丰满熟妇精品| 青青草国产成人av片免费| 国产精品亚洲综合天堂夜夜| 国产精品久久777777换脸| 精品综合久久久久久8888| 亚洲xxx大片| 亚洲精品国产精品乱码不卡| 91在线免费播放| 色噜噜一区二区| 国产黄色在线网站| 香蕉加勒比综合久久| 亚洲综合在线网站| 99久久这里有精品| 亚洲国产精品国自产拍av秋霞| 91国模少妇一区二区三区| 久久理论电影| 欧美精品videos| 黄色片中文字幕| 另类人妖一区二区av| 91传媒在线免费观看| 天天射,天天干| 国产精品国产三级国产有无不卡 | 亚洲黄页一区| 国产精品久久久av久久久| 一级特黄特色的免费大片视频| 国产精品123| 日本视频一区二区在线观看| 伊人影院蕉久影院在线播放| 欧美丝袜一区二区三区| 在线播放av中文字幕| 日本欧美三级| 久久久精品国产一区二区| 国产a∨精品一区二区三区仙踪林| 青青草成人在线观看| 91偷拍精品一区二区三区| 免费a在线观看| 一区二区三区四区在线播放 | 欧美成人高清电影在线| 亚洲欧洲久久久| 亚洲午夜激情在线| 国产免费亚洲高清| 青青久草在线| 亚洲国产色一区| 色婷婷.com| 亚洲精品一级二级三级| 久久露脸国产精品| 国产视频aaa| 国产精品色哟哟| 超碰97人人射妻| 成人精品毛片| 欧美日韩爱爱视频| 在线免费看av片| 久久精品免视看| av免费观看网| 久久365资源| 久久久久中文字幕| 国产成人三级一区二区在线观看一 | 亚洲国产一区视频| 欧美性猛交xxxx乱大交91| 国内精品伊人久久久| 欧美主播福利视频| 偷拍25位美女撒尿视频在线观看| 亚洲午夜免费电影| 久久久久久久久久久影视| 亚洲精品二区三区| 国产欧美日韩丝袜精品一区| 国产大片在线免费观看| 日韩欧美aaa| jizz欧美性20| 99在线观看免费视频精品观看| 国产精品一区二区免费| 青青草原av在线| 精品国产第一区二区三区观看体验 | 澳门成人av| 久久男人的天堂| 日批免费在线观看| 亚洲一区二区三区自拍| 国模无码视频一区| 在线观看日韩av电影| 国产自产在线视频一区| 都市激情国产精品| 亚洲裸体xxxx| 国产一级片毛片| 久久久久88色偷偷免费| 黄色免费观看视频网站| 日韩av网址大全| 欧美精品久久久久| 深夜福利视频网站| 日韩欧美在线免费| 日本黄色激情视频| 国产九色精品成人porny| 中文字幕色一区二区| 精品一区二区三区中文字幕在线 | 日韩精品乱码av一区二区| 日韩免费电影一区二区| 久久久久久久性潮| 欧美成人精品在线| 秋霞网一区二区| 一本大道久久a久久精品综合| 无码h肉动漫在线观看| 日韩激情一区二区| 欧美 另类 交| 精品福利一区| 国产精品第一视频| 黄色片免费在线观看| 日韩一区二区三区免费看| 日韩经典在线观看| 国产午夜亚洲精品不卡 | 91蜜桃免费观看视频| chinese少妇国语对白| 999久久久91| 电影午夜精品一区二区三区| 女人高潮被爽到呻吟在线观看| 中文字幕国产精品久久| 亚洲成熟女性毛茸茸| 色综合婷婷久久| 日本福利片在线观看| 97久久精品人人做人人爽50路| a在线观看免费视频| 欧美日本一区二区视频在线观看| 免费日韩电影在线观看| 国产精品免费精品自在线观看| 性亚洲最疯狂xxxx高清| 香蕉视频免费在线播放| 亚洲精品一区二区三区蜜桃下载| 精品欧美一区二区三区免费观看| 亚洲三级在线免费观看| 亚洲一区二区三区四区五区六区| 久久99精品久久久| 精品国产免费av| 在线精品视频在线观看高清| 日韩资源av在线| 国产精品115| 川上优av一区二区线观看| 日韩电影毛片| 欧美成人免费全部观看天天性色| 国产无套粉嫩白浆在线2022年| 91精品国产欧美一区二区| 涩涩视频在线观看| 精品久久久久久久久久ntr影视| 暗呦丨小u女国产精品| 国产视频一区在线播放| 亚洲色偷偷色噜噜狠狠99网| 韩国av一区二区三区在线观看| 成年人视频网站免费观看| 国产精品mm| 五月天色婷婷综合| jiujiure精品视频播放| 裸模一区二区三区免费| 国产厕拍一区| 97人人干人人| av一级久久| 国产91在线播放精品91| 国产三级电影在线播放| 久久久久久亚洲精品| 爱爱爱免费视频在线观看| 精品国产伦一区二区三区免费| 国产美女免费视频| 欧美日韩成人高清| 中文字幕乱码人妻二区三区| 色妹子一区二区| 国产又大又黑又粗免费视频| 18欧美亚洲精品| 日本视频在线免费| 国产精品看片你懂得| 成年人在线免费看片| 国产亚洲一本大道中文在线| 国精产品一区一区三区免费视频| 99精品视频一区二区三区| 国产人成视频在线观看| 不卡影院免费观看| 无码精品一区二区三区在线播放| www.成人网.com| 激情综合激情五月| 9i在线看片成人免费| 欧美在线一级片| 91色乱码一区二区三区| 人妻少妇精品视频一区二区三区| 久久嫩草精品久久久久| 久久久久久久久久久久| 国产精品拍天天在线| 欧美a级片免费看| 亚洲欧美日韩国产中文在线| 久久精品无码人妻| 天涯成人国产亚洲精品一区av| 亚洲欧美综合另类| 在线观看视频一区二区| 中文字幕在线一| 91精品欧美综合在线观看最新| 精品人妻一区二区三区日产乱码| 精品国产一区二区三区av性色 | 中文字幕欧美日韩| 久操免费在线| 国内精品久久久久久中文字幕| 一二三四视频在线中文| 国产精品吹潮在线观看| 午夜不卡一区| 国产欧美日韩伦理| 欧美日韩播放| 99亚洲国产精品| aⅴ色国产欧美| 亚洲一级免费观看| 福利电影一区二区三区| 37p粉嫩大胆色噜噜噜| 国产精品不卡一区二区三区| 久久久久香蕉视频| 色综合色综合色综合 | 欧美伦理91| 国产美女被下药99| 国产精品天天看天天狠| 日本一区二区三区免费观看| 一本精品一区二区三区| 国产91在线免费| 九色综合狠狠综合久久| 精品少妇人妻av一区二区三区| 国产精品视频一区二区三区不卡| 久草成人在线视频| 在线观看成人小视频| 性生活黄色大片| 一色桃子一区二区| 国产拍在线视频| 成人淫片在线看| 亚洲欧美日本伦理| 黄色影视在线观看| 丝袜诱惑制服诱惑色一区在线观看| 香蕉网在线视频| 国产午夜精品福利| 日本免费观看视| 日韩视频一区二区三区在线播放| 国产视频精选在线| 午夜精品久久久久久久99热浪潮 | 欧美日韩国产成人在线免费| 日韩中文字幕免费观看| xxx成人少妇69| 美女福利一区二区| 国产久一道中文一区| 围产精品久久久久久久| 久久婷婷国产91天堂综合精品| 成人高清视频在线| 真实国产乱子伦对白在线| 欧美午夜不卡视频| 欧美色视频免费| 国内精品久久久久影院 日本资源| 91成人精品观看| 五月天综合网| 久久精品国语| 男男做爰猛烈叫床爽爽小说| 一区二区三区欧美在线观看| 一级做a爱片性色毛片| 亚洲欧美日韩综合| 国产在线88av| 国产精品免费看一区二区三区| 天天久久综合| 亚洲视频第二页| 欧美韩国日本综合| 午夜精品免费观看| 亚洲精品一区二区在线| 男人天堂视频在线观看| 国内精品二区| 日韩午夜av| 波多野结衣影院| 天天综合日日夜夜精品| 丰满肉嫩西川结衣av| 欧美国产日韩视频| 亚洲一区二区三区在线免费| 亚洲小视频在线播放| 国产中文一区二区三区| 日韩欧美123区| 欧美一区二区视频观看视频| 超碰人人在线| 97se在线视频| 亚洲视频福利| 天天插天天射天天干| 天天色 色综合| 亚洲av电影一区| 日本久久久久久久久久久| 精品一区在线| 成人性生生活性生交12| 国产精品天干天干在观线| 中文字幕av资源| 久久精品国产免费观看| 国产色99精品9i| 国产一二三在线视频| av资源网一区| 色一情一乱一伦| 在线电影欧美日韩一区二区私密| 国产欧美自拍| 伊人网在线免费| 成人短视频下载| 国产性生活视频| 深夜成人在线观看| 欧美影院视频| av动漫在线看| 国产精品三级久久久久三级| 国产精品女同一区二区| 欧美第一淫aaasss性| 天天做夜夜做人人爱精品| 日韩精品一区二区三区色欲av| 中文字幕av一区二区三区| 国产欧美日韩综合精品一区二区三区| 欧美片一区二区三区| 亲子伦视频一区二区三区| 亚洲视频在线a| 亚洲一区在线观看视频| 欧美精品久久久久久久久久丰满| 国产在线观看不卡| 亚洲二区在线| 看黄色录像一级片| 精品99999| 国产激情欧美| 欧美一级视频免费看| 国产婷婷精品av在线| 亚洲成人精品女人久久久| 国产成人激情视频| 国产精品99一区二区| 一级黄色片网址| 欧美变态口味重另类| 88xx成人网| 欧美三级在线观看视频| 亚洲三级理论片|