精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

国产亚洲精品7777| 99久精品视频在线观看视频| 夜夜揉揉日日人人青青一国产精品| 91精品国产综合久久国产大片| 91在线观看免费高清| 日韩三级在线观看视频| 精品国产亚洲日本| 亚洲国产精品久久久久婷婷884| 91精品国产91久久久久久吃药 | 欧美大片第1页| 欧美色图校园春色| 蜜桃av在线| 91麻豆精品一区二区三区| 日本久久久久久| 性欧美一区二区| 国产精品亚洲四区在线观看| 精品福利在线观看| 亚洲一区三区| 人人妻人人澡人人爽久久av| 亚洲一区国产| 色老头一区二区三区在线观看| 国产在线精品91| 99免在线观看免费视频高清| 国产乱码精品1区2区3区| 久久久久久久久久国产| 无码一区二区三区在线| 美女日韩一区| 日本乱人伦aⅴ精品| 秋霞在线一区二区| 嫩草研究院在线观看| 免费视频最近日韩| 韩国一区二区电影| 很污很黄的网站| 色婷婷av一区二区三区丝袜美腿| 亚洲动漫第一页| 亚洲看片网站| 艳母动漫在线看| 国产一区二区三区在线观看精品| 中文字幕欧美日韩精品| 在线免费看黄色片| 一级片中文字幕| 99久久久久国产精品| 亚洲国产欧美一区二区丝袜黑人 | 人妖精品videosex性欧美| 波多野吉衣中文字幕| 精品91福利视频| 欧美日韩亚洲精品一区二区三区| 成人免费在线看片| 人人爽人人爽人人片| 大奶在线精品| 91精品国产一区二区三区香蕉| 超碰97免费观看| 蜜桃视频在线播放| av在线一区二区三区| 亚洲a∨日韩av高清在线观看| 亚洲区一区二区三| 综合亚洲色图| 日韩av有码在线| 日韩欧美中文视频| 免费视频观看成人| 色综合久久综合网97色综合 | 亚洲精品观看| 欧美放荡的少妇| 午夜久久久精品| 日韩精品第一| 色噜噜狠狠色综合欧洲selulu| 欧美一区二区三区四区夜夜大片 | 欧美亚洲综合另类| 日韩欧美精品在线观看视频| 成人免费网站观看| 亚洲成av人影院| 在线观看日韩羞羞视频| 国产69久久| 国产精品区一区二区三区| 日本黑人久久| 国产福利小视频在线观看| 成人综合在线观看| 国产精品三区www17con| 人妻一区二区三区| 91视频com| 青青草原亚洲| 欧美被日视频| 国产精品电影院| 日本一区二区免费高清视频| 黄色小网站在线观看| 1024亚洲合集| 一区二区不卡视频| jizzjizz亚洲| 亚洲成人免费电影| 国产高清精品在线观看| 天天综合网站| 欧美在线视频你懂得| jizz大全欧美jizzcom| 99国内精品久久久久| 欧美日韩大陆一区二区| 一区二区三区国产好的精华液| 午夜伦理福利在线| 91成人看片片| 91精品视频国产| 久久男人av| 亚洲最新视频在线| 欧美成人aaa片一区国产精品| 精品国产一区二区三区噜噜噜| 欧美一区二区免费视频| 精品久久久久久久久久久下田| 亚洲国产视频在线| 国产精品亚洲a| 午夜视频在线观看精品中文| 亚洲免费电影一区| 538精品在线观看| 久久国产直播| 国产成人精品一区二区三区福利| 成人av免费播放| 欧美—级在线免费片| 黄色一级片在线看| 激情五月综合婷婷| 中文字幕视频在线免费欧美日韩综合在线看 | 国产又粗又长又大视频| 成人激情午夜影院| 天天操天天干天天玩| 97人人做人人爽香蕉精品| 亚洲精品久久在线| 久草国产在线视频| 久久99精品国产.久久久久| 欧美精品中文字幕一区二区| 欧美人与禽性xxxxx杂性| 欧美日韩国产美女| 欧美黄色高清视频| 国产精品女主播一区二区三区| 91精品国产色综合| 午夜免费福利视频| 亚洲美女免费在线| 亚洲第一色av| 久久日文中文字幕乱码| 国产精品www| 国产综合在线观看| 色综合天天性综合| 美国黄色a级片| 国产欧美精品| 精品蜜桃一区二区三区| ririsao久久精品一区| 日韩欧美国产系列| 国内偷拍精品视频| 国产精品77777| 无码人妻精品一区二区蜜桃百度| 天堂中文av在线资源库| 亚洲黄页视频免费观看| 日韩av综合在线| 99久久精品久久久久久清纯| 丁香花在线影院观看在线播放| 成人性教育av免费网址| 国产视频精品xxxx| 色屁屁影院www国产高清麻豆| 久久成人久久爱| 这里只有精品66| 国产精一区二区| 欧美日本在线视频中文字字幕| 久久黄色精品视频| 91视频在线观看免费| 成人午夜视频免费在线观看| 国产欧美一区二区三区精品观看| 久久精品国产欧美亚洲人人爽| 国产一级特黄a高潮片| 成人午夜激情影院| 337p粉嫩大胆噜噜噜鲁| 台湾色综合娱乐中文网| 国产精品福利无圣光在线一区| 亚洲AV无码一区二区三区少妇| 久久精品欧美一区二区三区麻豆| www成人免费| 女同另类激情重口| 国产精品成av人在线视午夜片| www.国产精品视频| 五月激情综合色| 无码 人妻 在线 视频| 老司机精品视频导航| 黄色一级片av| 亚洲精品播放| 91免费人成网站在线观看18| 黄色动漫在线观看| 亚洲成人av片在线观看| 亚洲天堂五月天| 亚洲免费视频中文字幕| 欧美大喷水吹潮合集在线观看| 99久久99热这里只有精品| 91精品在线一区| 成人ssswww在线播放| 中文字幕欧美在线| 亚洲高清精品视频| 91久久精品一区二区三| 人妻人人澡人人添人人爽| 99久久综合99久久综合网站| 久久婷婷国产91天堂综合精品| 婷婷亚洲成人| 91精品美女在线| 欧美xxxx少妇| 中文字幕亚洲第一| 四虎在线视频免费观看| 欧美日韩精品一区二区| 日韩乱码在线观看| 综合在线观看色| 国产三级视频网站| 蜜桃av噜噜一区| 国产深夜男女无套内射| 91精品蜜臀一区二区三区在线| 成人精品视频99在线观看免费| 成人激情电影在线看| 精品国产凹凸成av人网站| 免费又黄又爽又猛大片午夜| 亚洲一区视频在线| 一级片黄色录像| 2023国产一二三区日本精品2022| 日本国产在线播放| 亚洲草久电影| 日韩电影大全在线观看| 亚洲一区二区三区中文字幕在线观看| 另类美女黄大片| 亚洲无码精品国产| 偷拍与自拍一区| 欧美色图亚洲天堂| 综合久久综合久久| av手机在线播放| 92国产精品观看| 欧美日韩人妻精品一区在线| 国精产品一区一区三区mba桃花| 91视频成人免费| 日韩理论电影院| 水蜜桃亚洲一二三四在线| 亚洲理论电影片| 精品无码久久久久久久动漫| jizz性欧美23| 99视频网站| 一区二区三区免费在线看| 成人一区二区电影| 嫩草伊人久久精品少妇av杨幂| 日韩亚洲欧美成人| 日韩理伦片在线| 中文字幕日韩欧美在线| 在线日本中文字幕| 色噜噜狠狠色综合网图区| 一级毛片视频在线观看| 这里只有精品视频在线| 在线免费看av| 久久精品国产69国产精品亚洲| www.久久成人| 日韩视频在线你懂得| 99在线精品视频免费观看软件| 亚洲一区在线观看免费| 国产亚洲欧美精品久久久久久| 99久久精品情趣| 久久久国产精品无码| 成人国产精品免费观看动漫| 丰满岳乱妇一区二区| 99久久精品国产毛片| 亚洲最大的黄色网| 久久亚洲一级片| 摸摸摸bbb毛毛毛片| 国产精品电影院| 精品99久久久久成人网站免费| 国产亚洲制服色| 国产jjizz一区二区三区视频| 国产乱人伦偷精品视频不卡| 性色av浪潮av| 99在线精品一区二区三区| 一本加勒比波多野结衣| 99re成人在线| 亚洲av无码一区二区三区人 | 91网站免费入口| 中文一区二区完整视频在线观看| 无码人妻一区二区三区精品视频| 亚洲女人av| 天天影视综合色| 国产乱人伦精品一区二区在线观看| 18岁网站在线观看| 男女av一区三区二区色多| 欧美成人黄色网址| 国产精品一区不卡| 国内精品久久99人妻无码| 欧美国产日韩亚洲一区| 成人18视频免费69| 亚洲丰满少妇videoshd| 男操女视频网站| 日韩一区和二区| 日本a一级在线免费播放| www.亚洲天堂| 蜜桃视频在线观看免费视频| 国产精品免费一区豆花| 91蜜桃臀久久一区二区| 日韩欧美亚洲区| 狠狠入ady亚洲精品经典电影| 在线免费观看成人| 在线成人www免费观看视频| 日韩中文字幕二区| 国产乱码精品一区二区三区av| 国产喷水theporn| 成人三级伦理片| 欧美激情久久久久久久| 亚洲不卡av一区二区三区| 在线观看国产区| 精品裸体舞一区二区三区| 福利在线观看| 欧美在线免费观看| 日韩精品一级| 亚洲人成网站在线观看播放| 妖精视频成人观看www| 一级做a免费视频| 91在线精品一区二区| 麻豆明星ai换脸视频| 91高清视频在线| 少妇精品视频一区二区| 日韩视频欧美视频| 666av成人影院在线观看| 国产精品免费视频一区二区| 国产精品x453.com| 亚洲高清在线免费观看| 99久久99久久免费精品蜜臀| 免费中文字幕在线| 欧美日韩的一区二区| 国产原创av在线| 欧美影院久久久| 另类春色校园亚洲| 99国产精品白浆在线观看免费| 国内精品久久久久国产盗摄免费观看完整版| 亚洲欧洲另类精品久久综合| 国产亚洲福利| 蜜臀av粉嫩av懂色av| 中文字幕永久在线不卡| 成人a v视频| 国产午夜精品免费一区二区三区| 番号在线播放| 日产精品久久久一区二区福利| 日本欧美韩国| 欧美高清视频一区| 国产亚洲一级| 中文字幕5566| 欧美日韩国产综合新一区| 亚洲乱码精品久久久久..| 欧美成人免费一级人片100| 色8久久久久| 正义之心1992免费观看全集完整版| 伊人久久大香线| www.污网站| 亚洲男人的天堂在线观看| 在线观看日韩一区二区| xxxxx91麻豆| 国产精品亚洲四区在线观看| 综合视频在线观看| 韩国理伦片一区二区三区在线播放| 久久久久亚洲av成人网人人软件| 久久亚洲免费视频| 人人草在线观看| 这里精品视频免费| 国产 日韩 欧美| 欧美亚洲黄色片| 91视频观看视频| 中文字幕精品无码亚| 久久精品视频网站| 国产乱人伦精品一区| 精品国产免费av| 国产欧美一区二区在线| 五月激情丁香网| 中文字幕亚洲在线| 麻豆精品久久| 精品视频免费在线播放| 久久久www成人免费毛片麻豆 | 欧美性xxxx在线播放| 欧美老女人性开放| 国产人妖伪娘一区91| 欧美激情1区| www.久久国产| 欧美影视一区在线| 最新国产在线拍揄自揄视频| 国产精品一区二区你懂得| 性娇小13――14欧美| 亚洲精品视频网址| 欧美大胆人体bbbb| 3d欧美精品动漫xxxx无尽| 亚洲国产成人不卡| 国产成人在线视频网站| 国产精品21p| 麻豆乱码国产一区二区三区 | 色天天综合久久久久综合片| h网站视频在线观看| 亚洲999一在线观看www| 亚洲日本欧美| 懂色av蜜臀av粉嫩av永久| 337p日本欧洲亚洲大胆色噜噜| 人人干在线视频| 国产精品视频免费观看| 日韩av中文字幕一区二区| 搜索黄色一级片| 亚洲欧美成人在线| 国产精品**亚洲精品| 国产a级一级片| 亚洲精品国产精华液| 黄上黄在线观看| 国产伦精品一区二区三区| 免费人成精品欧美精品| 日韩女同强女同hd| 欧美精品一区二区三区国产精品|