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

一文搞懂V8引擎的垃圾回收機制

開發 前端
我們平時在寫代碼的過程中,好像很少需要自己手動進行垃圾回收,那么V8是如何來減少內存占用,從而避免內存溢出而導致程序崩潰的情況的。為了更高效地回收垃圾,V8引入了兩個垃圾回收器,它們分別針對不同場景進行工作。

前言

我們平時在寫代碼的過程中,好像很少需要自己手動進行垃圾回收,那么V8是如何來減少內存占用,從而避免內存溢出而導致程序崩潰的情況的。為了更高效地回收垃圾,V8引入了兩個垃圾回收器,它們分別針對不同場景進行工作。

垃圾從何而來

我們先來搞清楚這些‘垃圾’是怎么產生的

不管使用哪一種語言,我們勢必都會頻繁的操作數據,這些數據一般是存放在棧內存與堆內存中,通常是會在內存中創建一塊空間,使用這塊空間,再不需要的時候回收這塊空間。

比如:

var test = {}
test.a = new Array(100)

當執行這段代碼時,先會為全局對象(window)添加一個test屬性,并在堆內存中創建一個空對象,并將該對象的地址指向test屬性,隨后又創建了一個長度為100的數組,并將該數組地址指向了test.a的屬性值。

從上圖我們可以看出,棧中保存了指向window對象的指針,通過棧中window的地址可以找到window對象,通過window對象可以找到test對象,通過test對象可以找到a數組。

如果此時,我們將a屬性指向了另一個對象:

test.a = {}

那么此時的內存會變成這樣:

那么這個時候堆內存中的數組其實就變成了‘垃圾數據’,因為我們再也訪問不到它了,不過我們不必擔心它會一直占用內存,因為V8中的垃圾回收器會幫我們自動清理。

對于 JavaScript 而言,也正是這個“自動”釋放資源的特性帶來了很多困惑,也讓一些 JavaScript 開發者誤以為可以不關心內存管理,這是一個很大的誤解。

代際假說與分代收集

代際假說是垃圾回收領域中的一個重要術語,后續垃圾回收策略都是建立在該假說之上的。

特點

  • 第一個是大部分對象在內存中存在的時間很短,簡單來說,就是很多對象一經分配內存,很快就變得不可訪問
  • 第二個是不死的對象,會活得更久

為了達到最好的回收效果,V8會根據對象的生存周期的不同來應用不同的回收算法,所以在 V8 中會把堆分為新生代和老生代兩個區域,新生代中存放的是生存時間短的對象,老生代中存放的生存時間久的對象。

支持 1~8M 的容量,而老生區支持的容量就大很多了。對于這兩塊區域,V8 分別使用兩個不同的垃圾回收器,以便更高效地實施垃圾回收

  • 副垃圾回收器,主要負責新生代的垃圾回收
  • 主垃圾回收器,主要負責老生代的垃圾回收

垃圾回收器的工作流程

V8的內存結構

  • 新生代(new_space):大多數的對象開始都會被分配在這里,這個區域相對較小但是垃圾回收特別頻繁,該區域被分為兩半,一半用來分配內存,另一半用于在垃圾回收時將需要保留的對象復制過來。
  • 老生代(old_space):新生代中的對象在存活一段時間后就會被轉移到老生代內存區,相對于新生代該內存區域的垃圾回收頻率較低。老生代又分為老生代指針區和老生代數據區,前者包含大多數可能存在指向其他對象的指針的對象,后者只保存原始數據對象,這些對象沒有指向其他對象的指針。
  • 大對象區(large_object_space):存放體積超越其他區域大小的對象,每個對象都會有自己的內存,垃圾回收不會移動大對象區。
  • 代碼區(code_space):代碼對象,會被分配在這里,唯一擁有執行權限的內存區域。
  • map區(map_space):存放Cell和Map,每個區域都是存放相同大小的元素,結構簡單

垃圾回收的過程一般主要出現在「新生代」「老生代」

垃圾回收策略

標記清除

標記清除( Mark-Sweep ),目前在 JavaScript引擎 里這種算法是最常用的,到目前為止的大多數瀏覽器的 JavaScript引擎 都在采用標記清除算法,只是各大瀏覽器廠商還對此算法進行了優化加工,且不同瀏覽器的 JavaScript引擎 在運行垃圾回收的頻率上有所差異。此算法分為 標記 和 清除 兩個階段,標記階段即為所有活動對象做上標記,清除階段則把沒有標記(也就是非活動對象)銷毀。

引擎在執行 GC(使用標記清除算法)時,需要從出發點去遍歷內存中所有的對象去打標記,而這個出發點有很多,我們稱之為一組根對象,而所謂的根對象,其實在瀏覽器環境中包括又不止于 全局Window對象、文檔DOM樹等。

整個標記清除算法大致過程就像下面這樣:

  • 垃圾收集器在運行時會給內存中的所有變量都加上一個標記,假設內存中所有對象都是垃圾,全標記為0;
  • 然后從各個根對象開始遍歷,把不是垃圾的節點改成1;
  • 清理所有標記為0的垃圾,銷毀并回收它們所占用的內存空間;
  • 最后,把所有內存中對象標記修改為0,等待下一輪垃圾回收;

優點:

實現比較簡單,打標記也無非打與不打兩種情況,這使得一位二進制位(0和1)就可以為其標記,非常簡單

缺點:

在清除之后,剩余的對象內存位置是不變的,也會導致空閑內存空間是不連續的,出現了 內存碎片,并且由于剩余空閑內存不是一整塊,它是由不同大小內存組成的內存列表,這就牽扯出了內存分配的問題

引用計數

引用計數( Reference Counting ),這其實是早先的一種垃圾回收算法,它把對象是否不再需要簡化定義為對象有沒有其他對象引用到它,如果沒有引用指向該對象(零引用),對象將被垃圾回收機制回收,但因為它的問題很多,目前很少使用這種算法了。


它的策略是跟蹤記錄每個變量值被使用的次數

  • 當聲明了一個變量并且將一個引用類型賦值給該變量的時候這個值的引用次數就為 1;
  • 如果同一個值又被賦給另一個變量,那么引用數加 1;
  • 如果該變量的值被其他的值覆蓋了,則引用次數減 1;
  • 當這個值的引用次數變為 0 的時候,說明沒有變量在使用,這個值沒法被訪問了,回收空間,垃圾回收器會在運行的時候清理掉引用次數為 0 的值占用的內存;

優點:

  • 引用計數在引用值為 0 時,也就是在變成垃圾的那一刻就會被回收,所以它可以立即回收垃圾;
  • 標記清除算法需要每隔一段時間進行一次,那在應用程序(JS腳本)運行過程中線程就必須要暫停去執行一段時間的 GC,另外,標記清除算法需要遍歷堆里的活動以及非活動對象來清除,而引用計數則只需要在引用時計數就可以了;

缺點:

  • 需要一個計數器,而此計數器需要占很大的位置,因為我們也不知道被引用數量的上限;
  • 無法解決循環引用無法回收的問題;

工作流程

不論什么類型的垃圾回收器,它們都有一套相同的執行流程。

  • 第一步是「標記空間中活動對象和非活動對象」。所謂活動對象就是還在使用的對象,非活動對象就是可以進行垃圾回收的對象。
  • 第二步是「回收非活動對象所占據的內存」。其實就是在所有的標記完成之后,統一清理內存中所有被標記為可回收的對象。
  • 第三步是做「內存整理」。一般來說,頻繁回收對象后,內存中就會存在大量不連續空間,我們把這些不連續的內存空間稱為內存碎片。當內存中出現了大量的內存碎片之后,如果需要分配較大連續內存的時候,就有可能出現內存不足的情況。所以最后一步需要整理這些內存碎片,但這步其實是可選的,因為有的垃圾回收器不會產生內存碎片,比如接下來我們要介紹的副垃圾回收器。

副垃圾回收器

副垃圾回收器主要負責新生區的垃圾回收。而通常情況下,大多數小的對象都會被分配到新生區,所以說這個區域雖然不大,但是垃圾回收還是比較頻繁的。

新生代中用 Scavenge 算法來處理。所謂 Scavenge 算法,是把新生代空間對半劃分為兩個區域,一半是對象區域,一半是空閑區域,如下圖所示:

圖片

新加入的對象都會存放到對象區域,當對象區域快被寫滿時,就需要執行一次垃圾清理操作。

在垃圾回收過程中,首先要對對象區域中的垃圾做標記;標記完成之后,就進入垃圾清理階段,副垃圾回收器會把這些存活的對象復制到空閑區域中,同時它還會把這些對象有序地排列起來,所以這個復制過程,也就相當于完成了內存整理操作,復制后空閑區域就沒有內存碎片了。完成復制后,對象區域與空閑區域進行角色翻轉,也就是原來的對象區域變成空閑區域,原來的空閑區域變成了對象區域。這樣就完成了垃圾對象的回收操作,同時這種角色翻轉的操作還能讓新生代中的這兩塊區域無限重復使用下去。

由于新生代中采用的 Scavenge 算法,所以每次執行清理操作時,都需要將存活的對象從對象區域復制到空閑區域。但復制操作需要時間成本,如果新生區空間設置得太大了,那么每次清理的時間就會過久,所以為了執行效率,一般新生區的空間會被設置得比較小。也正是因為新生區的空間不大,所以很容易被存活的對象裝滿整個區域。為了解決這個問題,JavaScript 引擎采用了「對象晉升策略」,也就是經過兩次垃圾回收依然還存活的對象,會被移動到老生區中。

主垃圾回收器

主垃圾回收器主要負責老生區中的垃圾回收。除了新生區中晉升的對象,一些大的對象會直接被分配到老生區。因此老生區中的對象有兩個特點,一個是對象占用空間大,另一個是對象存活時間長。

由于老生區的對象比較大,若要在老生區中使用 Scavenge 算法進行垃圾回收,復制這些大的對象將會花費比較多的時間,從而導致回收執行效率不高,同時還會浪費一半的空間。因而,主垃圾回收器是采用「標記 - 清除(Mark-Sweep)」的算法進行垃圾回收的。

它的原理就是:

  • 首先是標記過程階段。標記階段就是從一組根元素開始,遞歸遍歷這組根元素,在這個遍歷過程中,能到達的元素稱為活動對象,沒有到達的元素就可以判斷為垃圾數據。
  • 接下來就是垃圾的清除過程。它和副垃圾回收器的垃圾清除過程完全不同,對一塊內存多次執行「標記 - 清除」算法后,可能會產生大量不連續的內存碎片。

圖片

  • 而碎片過多會導致大對象無法分配到足夠的連續內存,于是又產生了另外一種算法——「標記 - 整理(Mark-Compact)」,這個標記過程仍然與標記 - 清除算法里的是一樣的,但后續步驟不是直接對可回收對象進行清理,而是讓所有存活的對象都向一端移動,然后直接清理掉端邊界以外的內存。

圖片

全停頓

由于 JavaScript 是運行在主線程之上的,一旦執行垃圾回收算法,都需要將正在執行的 JavaScript 腳本暫停下來,待垃圾回收完畢后再恢復腳本執行。我們把這種行為叫做「全停頓(Stop-The-World)。

在 V8 新生代的垃圾回收中,因其空間較小,且存活對象較少,所以全停頓的影響不大,但老生代就不一樣了。如果在執行垃圾回收的過程中,占用主線程時間過久,將會造成頁面卡頓。

為了降低老生代的垃圾回收而造成的卡頓,V8 將標記過程分為一個個的子標記過程,同時讓垃圾回收標記和 JavaScript 應用邏輯交替進行,直到標記階段完成,我們把這個算法稱為增量標記(Incremental Marking)算法。

責任編輯:華軒 來源: 前端南玖
相關推薦

2023-02-28 07:56:07

V8內存管理

2020-09-27 07:32:18

V8

2021-02-26 05:24:35

Java垃圾回收

2023-10-10 10:23:50

JavaScriptV8

2020-05-14 13:39:19

Java 垃圾回收機制

2023-08-27 21:29:43

JVMFullGC調優

2009-08-21 10:09:02

Google ChroV8引擎linux系統

2017-03-03 09:26:48

PHP垃圾回收機制

2017-08-17 15:40:08

大數據Python垃圾回收機制

2010-09-25 15:33:19

JVM垃圾回收

2011-07-04 16:48:56

JAVA垃圾回收機制GC

2009-06-23 14:15:00

Java垃圾回收

2017-06-12 17:38:32

Python垃圾回收引用

2022-04-29 08:00:51

V8垃圾回收

2024-03-14 09:40:14

2020-10-12 06:35:34

V8JavaScript

2017-12-17 16:34:18

JavaScript代碼V8

2024-05-23 12:40:06

2021-11-05 15:23:20

JVM回收算法

2010-09-16 15:10:24

JVM垃圾回收機制
點贊
收藏

51CTO技術棧公眾號

日韩午夜三级在线| 国产欧美日韩不卡免费| 欧美精品在线第一页| 精品人妻一区二区三区免费| 免费看电影在线| 成人av在线看| 国产精品男女猛烈高潮激情| av成人免费网站| 国产精品tv| 色综合久久天天| 亚洲自拍的二区三区| www.av黄色| 国产午夜精品一区二区三区欧美| 欧美精品v国产精品v日韩精品| 亚洲精品9999| 午夜精品无码一区二区三区| 99精品久久| 国产午夜精品视频免费不卡69堂| 国产男女在线观看| 日韩精品黄色| 波多野结衣中文一区| 国产精品久久久久久久av电影| 国产精品酒店视频| 欧美交a欧美精品喷水| 欧美视频你懂的| 日韩精品视频在线观看视频| 成年人视频免费在线观看| 国产尤物一区二区| 日本午夜精品理论片a级appf发布| 天天躁夜夜躁狠狠是什么心态| 日韩毛片免费看| 偷偷要91色婷婷| 三年中文高清在线观看第6集| 人妻少妇精品无码专区| 丝袜亚洲另类欧美| 国外成人在线播放| 国产第一页浮力| 美女毛片一区二区三区四区最新中文字幕亚洲| 欧美情侣在线播放| 成人一级片网站| 欧美精品videossex少妇| 日本一二三四高清不卡| 久久精品国产理论片免费| 国产精品无码免费播放| 久久综合导航| 2020久久国产精品| 精品无码一区二区三区电影桃花| 精品久久精品| 日韩国产精品一区| 国产69视频在线观看| 国产精品3区| 欧美色区777第一页| 久草资源站在线观看| 91超碰免费在线| 一区二区三区在线免费视频| 伊人久久大香线蕉精品| 国产黄色片在线观看| 91小视频免费看| 国产亚洲二区| 乱精品一区字幕二区| 国产精品一区二区黑丝| 成人情趣片在线观看免费| 日韩久久久久久久久久| 久久夜色精品| 欧美中文在线观看| 啦啦啦免费高清视频在线观看| 精品国产一区二区三区久久久樱花 | 亚洲色图一区二区| 日韩和欧美的一区二区| 日韩av资源站| 97成人超碰视| 欧美性xxxx69| 黄网在线观看| 91一区二区三区在线观看| 韩国一区二区三区美女美女秀| 国产老妇伦国产熟女老妇视频| 美腿丝袜一区二区三区| 国产精品96久久久久久| 久久久久精彩视频| 另类人妖一区二区av| 国产免费成人av| 国产伦理吴梦梦伦理| 国产一区二区调教| 粉嫩精品一区二区三区在线观看 | 成人在线免费看| 日本一区二区免费在线观看视频| 蜜桃久久影院| 高清在线观看av| 一色桃子久久精品亚洲| 真人做人试看60分钟免费| 后进极品白嫩翘臀在线播放| 午夜视频久久久久久| 国产一区亚洲二区三区| 日本精品久久| 精品成a人在线观看| 国产伦精品一区二区三区妓女| 伦理一区二区三区| 国产亚洲人成a一在线v站| 女性裸体视频网站| 亚洲精品美女91| 日本成人精品在线| 国产精品久久欧美久久一区| 成人激情免费电影网址| 日产中文字幕在线精品一区 | 手机在线观看av网站| 欧美亚洲国产一区二区三区va| 在线黄色免费观看| 一区二区三区自拍视频| 日韩精品黄色网| 很污很黄的网站| 99精品国产福利在线观看免费| 日本韩国在线不卡| 99国产揄拍国产精品| 91小视频在线观看| 91精品国产吴梦梦| 欧美成a人片在线观看久| 欧美一级精品大片| 国产中年熟女高潮大集合| 欧美国产综合| 国产精品99久久久久久久久| 亚洲av无码乱码在线观看性色| 97久久精品人人做人人爽50路| 欧美日韩一区二区三| av中文字幕在线播放| 色屁屁一区二区| 国产精品99久久久精品无码| 欧美色图激情小说| 97精品欧美一区二区三区| 97人妻精品一区二区三区| 26uuu亚洲| 91免费国产精品| 日韩av一级| 日韩第一页在线| 九九视频免费在线观看| 久久成人免费网| 日本一区二区高清视频| 91九色在线看| 日韩午夜激情电影| 成年人一级黄色片| 久久99国内精品| 日本在线成人一区二区| 色黄视频在线观看| 亚洲成av人影院在线观看| 一级黄色片日本| 日本vs亚洲vs韩国一区三区| 麻豆av一区二区三区久久| 黄网av在线| 91精品国产乱码| 99久久久免费精品| 免费人成精品欧美精品 | 色欲色香天天天综合网www| 最新亚洲国产| 色偷偷9999www| 成年人视频免费| 久久精品亚洲国产奇米99| 北条麻妃69av| 色婷婷av一区二区三区丝袜美腿| 欧美理论片在线观看| av中文字幕免费| 亚洲色图丝袜美腿| 亚洲综合中文网| 欧美日韩亚洲一区| 国产高清精品一区二区| 欧美卡一卡二| 亚洲国产精品福利| 国产成人一区二区三区影院在线| 国产精品538一区二区在线| 国产四区在线观看| 日韩一区二区三区色| 欧美国产日本在线| 人妻无码中文字幕免费视频蜜桃| 夜夜精品浪潮av一区二区三区| 色黄视频免费看| 韩国一区二区三区在线观看| 国产久一道中文一区| 美女搞黄视频在线观看| 亚洲欧美国产精品久久久久久久 | 国产欧美日本一区视频| 杨幂毛片午夜性生毛片 | 亚洲成人免费网站| 日韩欧美成人一区二区三区| 国产欧美日本一区视频| 午夜av中文字幕| 激情丁香综合| 欧美午夜欧美| 9999精品免费视频| 久久久伊人欧美| 可以免费看污视频的网站在线| 在线免费观看视频一区| 精品亚洲乱码一区二区| 国产91精品入口| 亚洲欧洲日产国码无码久久99| 九九亚洲精品| 国产一区红桃视频| tube8在线hd| 亚洲香蕉成视频在线观看| 国产理论片在线观看| 亚洲成人自拍偷拍| 免费网站在线高清观看| 国产麻豆视频一区| 日韩a在线播放| 91精品久久久久久久蜜月 | 日本免费精品视频| 亚洲男人的天堂在线观看| 亚洲一级av无码毛片精品| 免费观看成人av| 男人天堂新网址| 国产一区二区三区四区五区传媒| 国产区精品在线观看| 99riav视频在线观看| 中文字幕日韩免费视频| 人妻精品无码一区二区| 欧美区一区二区三区| 亚洲伊人成人网| 亚洲欧美日韩系列| 人妻少妇一区二区| 国产精品一二三四五| 欧美一级裸体视频| 亚洲人体偷拍| 一道本在线观看视频| 欧美日韩一二三四| 国产午夜精品一区| 玖玖玖电影综合影院| 国产精品吊钟奶在线| 成人爽a毛片免费啪啪动漫| 日韩在线激情视频| 国产一二在线观看| 日韩精品999| 成人久久精品人妻一区二区三区| 91久久精品一区二区三区| 久热这里只有精品在线| 1024成人网| 中文字幕第20页| 99视频一区二区| 日韩av成人网| 精久久久久久久久久久| 激情六月丁香婷婷| 夜夜嗨一区二区三区| 免费的一级黄色片| 中文字幕免费一区二区三区| 亚洲ai欧洲av| 国产欧美日韩在线观看视频| 国产在线精品一区二区三区| 欧美另类中文字幕| 91精品视频在线看| 亚洲人成777| 国产日韩在线免费| 福利视频亚洲| 国产精品狼人色视频一区| free欧美| 日本精品视频在线观看| 伊伊综合在线| 日本三级韩国三级久久| 欧美舌奴丨vk视频| 日韩av电影国产| 手机看片久久| 国产a∨精品一区二区三区不卡| 国产盗摄在线视频网站| 欧美精品激情视频| av免费不卡国产观看| 久久理论片午夜琪琪电影网| av日韩国产| 午夜精品久久久99热福利| 91在线超碰| 午夜美女久久久久爽久久| 国产伦久视频在线观看| 8x海外华人永久免费日韩内陆视频| 欧美78videosex性欧美| 久久久欧美一区二区| 韩国精品一区| 日本精品久久中文字幕佐佐木| 激情aⅴ欧美一区二区欲海潮 | 1区2区在线观看| 欧美另类交人妖| 黄网在线免费看| 欧美综合一区第一页| 欧美特大特白屁股xxxx| 国产精品综合久久久| 91精品国产色综合久久不卡粉嫩| 国产乱肥老妇国产一区二| 伊人久久一区| 成人一区二区三区四区| 天堂在线精品| 亚洲a∨一区二区三区| 91成人免费| 丰满少妇大力进入| 久久久久免费| 污污的视频免费观看| 丁香婷婷综合色啪| 精品无码一区二区三区| 中文字幕五月欧美| 国产精品日日夜夜| 欧美在线观看一区二区| 精品国产免费无码久久久| 日韩av影片在线观看| 69久久夜色| 久久久久久亚洲精品| 色婷婷综合久久久中字幕精品久久| 国产精品久久久久影院日本| 国产精品一区免费在线| 久草一区二区| 久久精品高清| 精品丰满人妻无套内射| 蜜桃视频在线观看一区| 97精品人人妻人人| 欧美极品少妇xxxxⅹ高跟鞋| avtt天堂在线| 日本高清不卡aⅴ免费网站| 国产农村妇女毛片精品| 日韩激情视频在线播放| 尤物视频在线看| 国产成人小视频在线观看| 视频精品一区| 日韩欧美激情一区二区| 一区在线免费| av亚洲天堂网| 91免费看`日韩一区二区| 日韩视频中文字幕在线观看| 一本色道久久综合亚洲91| www.久久成人| 中文字幕亚洲一区在线观看| av中文字幕在线观看第一页| 91精品久久久久久久久久久久久| 国产精品香蕉| 日韩不卡视频一区二区| 日本aⅴ亚洲精品中文乱码| 欧美无人区码suv| 亚洲激情校园春色| 亚洲精品一区二区二区| 亚洲精品一区中文字幕乱码| 香蕉成人app免费看片| 国产区亚洲区欧美区| 国产区精品区| 美女日批免费视频| 国产成人精品aa毛片| chinese全程对白| 欧美日韩精品一二三区| 国产色在线 com| 热久久免费视频精品| 青青一区二区| 男女超爽视频免费播放| 国产91高潮流白浆在线麻豆| 日韩欧美国产成人精品免费| 欧美日韩精品免费观看视频| 国产精品一二三区视频| 青青青国产精品一区二区| 欧美三级午夜理伦三级小说| 日本五级黄色片| 国产成人在线观看| 欧美成人综合色| 日韩一区二区精品| 中文在线观看免费| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 高清免费成人av| 国产极品美女在线| 91精品国产麻豆| 国产精品剧情一区二区在线观看| 日韩免费观看视频| 国产99亚洲| 亚洲少妇第一页| 国产欧美日韩精品在线| 中文字幕一二区| 日韩中文字幕不卡视频| 四虎国产精品成人免费影视| 影音欧美亚洲| 国产一区二区三区精品欧美日韩一区二区三区 | 久久国内精品| 五月婷婷一区| 麻豆极品一区二区三区| 99热6这里只有精品| 91精品视频网| 免费在线观看的电影网站| 国产精品日韩欧美一区二区三区| 欧美精品三区| 色婷婷精品久久二区二区密| 狠狠爱在线视频一区| 国产小视频免费在线网址| 国产精品色视频| 亚洲精品a级片| 污污污www精品国产网站| 日韩欧美国产黄色| 1769视频在线播放免费观看| 亚洲一区二区三区四区在线播放| 天天射综合网视频| 无码人妻一区二区三区精品视频| 亚洲成人自拍一区| 国产黄在线观看免费观看不卡| 国产欧美精品va在线观看| 综合激情婷婷| 亚洲国产第一区| 欧美性受xxxx黑人xyx性爽| 菠萝菠萝蜜在线观看| 国产专区一区二区| 欧美aa在线视频| 久久久久99精品成人片毛片| 亚洲男人的天堂网站| 亚洲精品aa| 18岁网站在线观看| 18涩涩午夜精品.www| 四虎永久在线观看|