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

深入理解谷歌最強V8垃圾回收機制

開發
有很多人都聽說過V8引擎,但可能不是很了解,V8名稱叫Chrome V8,是由谷歌開源的一個高性能 JavaScript 引擎。該引擎采用 C++ 編寫,Google Chrome 瀏覽器用的就是這個引擎。V8 可以單獨運行,也可以嵌入 C++ 應用當中。和其他的 JavaScript 引擎一樣,V8 會編譯、執行 JavaScript 代碼,并一樣會管理內存、垃圾回收等。就是因為 V8 的高性能以及跨平臺等特性,所以它也是 Node.js 的 JavaScript 引擎。

[[344027]]

 V8引擎是前端開發者想升值加薪 必須越過的一個坎兒,因為涉及到性能,很多人認為沒必要,但現在性能卻是程序里最看重的事。作為當下使用最廣泛的 JavaScript 引擎,V8 的生態圈非常龐大,這與它革命性的設計密不可分。

閱讀本文之后,你可以了解到:

  • JavaScript的內存是怎么管理的?
  • Chrome是如何進行垃圾回收的?
  • Chrome對垃圾回收進行了哪些優化?

JavaScript的內存管理
不管什么程序語言,內存生命周期基本是一致的:

  1. 分配你所需要的內存
  2. 使用分配到的內存(讀、寫)
  3. 不需要時將其釋放歸還

與其他需要手動管理內存的語言不通,在JavaScript中,當我們創建變量(對象,字符串等)的時候,系統會自動給對象分配對應的內存。

  1. var n = 123; // 給數值變量分配內存 
  2. var s = "azerty"; // 給字符串分配內存 
  3.  
  4. var o = { 
  5.   a: 1, 
  6.   b: null 
  7. }; // 給對象及其包含的值分配內存 
  8.  
  9. // 給數組及其包含的值分配內存(就像對象一樣) 
  10. var a = [1, null"abra"];  
  11.  
  12. function f(a){ 
  13.   return a + 2; 
  14. } // 給函數(可調用的對象)分配內存 
  15.  
  16. // 函數表達式也能分配一個對象 
  17. someElement.addEventListener('click'function(){ 
  18.   someElement.style.backgroundColor = 'blue'
  19. }, false); 

當系統發現這些變量不再被使用的時候,會自動釋放(垃圾回收)這些變量的內存,開發者不用過多的關心內存問題。

雖然這樣,我們開發過程中也需要了解JavaScript的內存管理機制,這樣才能避免一些不必要的問題,比如下面代碼:

  1. {}=={} // false 
  2. []==[] // false 
  3. ''=='' // true 

在JavaScript中,數據類型分為兩類,簡單類型和引用類型,對于簡單類型,內存是保存在棧(stack)空間中,復雜數據類型,內存是保存在堆(heap)空間中。

  • 基本類型:這些類型在內存中分別占有固定大小的空間,他們的值保存在??臻g,我們通過按值來訪問的
  • 引用類型:引用類型,值大小不固定,棧內存中存放地址指向堆內存中的對象。是按引用訪問的。

而對于棧的內存空間,只保存簡單數據類型的內存,由操作系統自動分配和自動釋放。而堆空間中的內存,由于大小不固定,系統無法無法進行自動釋放,這個時候就需要JS引擎來手動的釋放這些內存。

為什么需要垃圾回收
在Chrome中,v8被限制了內存的使用(64位約1.4G/1464MB , 32位約0.7G/732MB),為什么要限制呢?

  1. 表層原因是,V8最初為瀏覽器而設計,不太可能遇到用大量內存的場景
  2. 深層原因是,V8的垃圾回收機制的限制(如果清理大量的內存垃圾是很耗時間,這樣回引起JavaScript線程暫停執行的時間,那么性能和應用直線下降)

前面說到棧內的內存,操作系統會自動進行內存分配和內存釋放,而堆中的內存,由JS引擎(如Chrome的V8)手動進行釋放,當我們代碼的按照正確的寫法時,會使得JS引擎的垃圾回收機制無法正確的對內存進行釋放(內存泄露),從而使得瀏覽器占用的內存不斷增加,進而導致JavaScript和應用、操作系統性能下降。

Chrome 垃圾回收算法
在JavaScript中,其實絕大多數的對象存活周期都很短,大部分在經過一次的垃圾回收之后,內存就會被釋放掉,而少部分的對象存活周期將會很長,一直是活躍的對象,不需要被回收。為了提高回收效率,V8 將堆分為兩類新生代和老生代,新生代中存放的是生存時間短的對象,老生代中存放的生存時間久的對象。

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

  • 副垃圾回收器 - Scavenge:主要負責新生代的垃圾回收。
  • 主垃圾回收器 - Mark-Sweep & Mark-Compact:主要負責老生代的垃圾回收。

新生代垃圾回收器 - Scavenge
在JavaScript中,任何對象的聲明分配到的內存,將會先被放置在新生代中,而因為大部分對象在內存中存活的周期很短,所以需要一個效率非常高的算法。在新生代中,主要使用Scavenge算法進行垃圾回收,Scavenge算法是一個典型的犧牲空間換取時間的復制算法,在占用空間不大的場景上非常適用。

Scavange算法將新生代堆分為兩部分,分別叫from-space和to-space,工作方式也很簡單,就是將from-space中存活的活動對象復制到to-space中,并將這些對象的內存有序的排列起來,然后將from-space中的非活動對象的內存進行釋放,完成之后,將from space 和to space進行互換,這樣可以使得新生代中的這兩塊區域可以重復利用。

簡單的描述就是:

  • 標記活動對象和非活動對象
  • 復制 from space 的活動對象到 to space 并對其進行排序
  • 釋放 from space 中的非活動對象的內存
  • 將 from space 和 to space 角色互換

那么,垃圾回收器是怎么知道哪些對象是活動對象和非活動對象的呢?

有一個概念叫對象的可達性,表示從初始的根對象(window,global)的指針開始,這個根指針對象被稱為根集(root set),從這個根集向下搜索其子節點,被搜索到的子節點說明該節點的引用對象可達,并為其留下標記,然后遞歸這個搜索的過程,直到所有子節點都被遍歷結束,那么沒有被標記的對象節點,說明該對象沒有被任何地方引用,可以證明這是一個需要被釋放內存的對象,可以被垃圾回收器回收。

新生代中的對象什么時候變成老生代的對象呢?

在新生代中,還進一步進行了細分,分為nursery子代和intermediate子代兩個區域,一個對象第一次分配內存時會被分配到新生代中的nursery子代,如果進過下一次垃圾回收這個對象還存在新生代中,這時候我們移動到 intermediate 子代,再經過下一次垃圾回收,如果這個對象還在新生代中,副垃圾回收器會將該對象移動到老生代中,這個移動的過程被稱為晉升。

老生代垃圾回收 - Mark-Sweep & Mark-Compact
新生代空間中的對象滿足一定條件后,晉升到老生代空間中,在老生代空間中的對象都已經至少經歷過一次或者多次的回收所以它們的存活概率會更大,如果這個時候再使用scavenge算法的話,會出現兩個問題:

  • scavenge為復制算法,重復復制活動對象會使得效率低下
  • scavenge是犧牲空間來換取時間效率的算法,而老生代支持的容量交大,會出現空間資源浪費問題

所以在老生代空間中采用了 Mark-Sweep(標記清除) 和 Mark-Compact(標記整理) 算法。

Mark-Sweep
Mark-Sweep處理時分為兩階段,標記階段和清理階段,看起來與Scavenge類似,不同的是,Scavenge算法是復制活動對象,而由于在老生代中活動對象占大多數,所以Mark-Sweep在標記了活動對象和非活動對象之后,直接把非活動對象清除。

  • 標記階段:對老生代進行第一次掃描,標記活動對象
  • 清理階段:對老生代進行第二次掃描,清除未被標記的對象,即清理非活動對象

看似一切 perfect,但是還遺留一個問題,被清除的對象遍布于各內存地址,產生很多內存碎片。

Mark-Compact
由于Mark-Sweep完成之后,老生代的內存中產生了很多內存碎片,若不清理這些內存碎片,如果出現需要分配一個大對象的時候,這時所有的碎片空間都完全無法完成分配,就會提前觸發垃圾回收,而這次回收其實不是必要的。

為了解決內存碎片問題,Mark-Compact被提出,它是在是在 Mark-Sweep的基礎上演進而來的,相比Mark-Sweep,Mark-Compact添加了活動對象整理階段,將所有的活動對象往一端移動,移動完成后,直接清理掉邊界外的內存。

全停頓 Stop-The-World
由于垃圾回收是在JS引擎中進行的,而Mark-Compact算法在執行過程中需要移動對象,而當活動對象較多的時候,它的執行速度不可能很快,為了避免JavaScript應用邏輯和垃圾回收器的內存資源競爭導致的不一致性問題,垃圾回收器會將JavaScript應用暫停,這個過程,被稱為全停頓(stop-the-world)。

在新生代中,由于空間小、存活對象較少、Scavenge算法執行效率較快,所以全停頓的影響并不大。而老生代中就不一樣,如果老生代中的活動對象較多,垃圾回收器就會暫停主線程較長的時間,使得頁面變得卡頓。

優化 Orinoco
orinoco為V8的垃圾回收器的項目代號,為了提升用戶體驗,解決全停頓問題,它利用了增量標記、懶性清理、并發、并行來降低主線程掛起的時間。

增量標記 - Incremental marking
為了降低全堆垃圾回收的停頓時間,增量標記將原本的標記全堆對象拆分為一個一個任務,讓其穿插在JavaScript應用邏輯之間執行,它允許堆的標記時的5~10ms的停頓。增量標記在堆的大小達到一定的閾值時啟用,啟用之后每當一定量的內存分配后,腳本的執行就會停頓并進行一次增量標記。

懶性清理 - Lazy sweeping
增量標記只是對活動對象和非活動對象進行標記,惰性清理用來真正的清理釋放內存。當增量標記完成后,假如當前的可用內存足以讓我們快速的執行代碼,其實我們是沒必要立即清理內存的,可以將清理的過程延遲一下,讓JavaScript邏輯代碼先執行,也無需一次性清理完所有非活動對象內存,垃圾回收器會按需逐一進行清理,直到所有的頁都清理完畢。

增量標記與惰性清理的出現,使得主線程的最大停頓時間減少了80%,讓用戶與瀏覽器交互過程變得流暢了許多,從實現機制上,由于每個小的增量標價之間執行了JavaScript代碼,堆中的對象指針可能發生了變化,需要使用寫屏障技術來記錄這些引用關系的變化,所以也暴露出來增量標記的缺點:

  • 并沒有減少主線程的總暫停的時間,甚至會略微增加
  • 由于寫屏障(Write-barrier)機制的成本,增量標記可能會降低應用程序的吞吐量

并發 - Concurrent
并發式GC允許在在垃圾回收的同時不需要將主線程掛起,兩者可以同時進行,只有在個別時候需要短暫停下來讓垃圾回收器做一些特殊的操作。但是這種方式也要面對增量回收的問題,就是在垃圾回收過程中,由于JavaScript代碼在執行,堆中的對象的引用關系隨時可能會變化,所以也要進行寫屏障操作。

并行 - Parallel
并行式GC允許主線程和輔助線程同時執行同樣的GC工作,這樣可以讓輔助線程來分擔主線程的GC工作,使得垃圾回收所耗費的時間等于總時間除以參與的線程數量(加上一些同步開銷)。

V8當前垃圾回收機制
2011年,V8應用了增量標記機制。直至2018年,Chrome64和Node.js V10啟動并發標記(Concurrent),同時在并發的基礎上添加并行(Parallel)技術,使得垃圾回收時間大幅度縮短。

副垃圾回收器
V8在新生代垃圾回收中,使用并行(parallel)機制,在整理排序階段,也就是將活動對象從from-to復制到space-to的時候,啟用多個輔助線程,并行的進行整理。由于多個線程競爭一個新生代的堆的內存資源,可能出現有某個活動對象被多個線程進行復制操作的問題,為了解決這個問題,V8在第一個線程對活動對象進行復制并且復制完成后,都必須去維護復制這個活動對象后的指針轉發地址,以便于其他協助線程可以找到該活動對象后可以判斷該活動對象是否已被復制。

主垃圾回收器
V8在老生代垃圾回收中,如果堆中的內存大小超過某個閾值之后,會啟用并發(Concurrent)標記任務。每個輔助線程都會去追蹤每個標記到的對象的指針以及對這個對象的引用,而在JavaScript代碼執行時候,并發標記也在后臺的輔助進程中進行,當堆中的某個對象指針被JavaScript代碼修改的時候,寫入屏障(write barriers)技術會在輔助線程在進行并發標記的時候進行追蹤。

當并發標記完成或者動態分配的內存到達極限的時候,主線程會執行最終的快速標記步驟,這個時候主線程會掛起,主線程會再一次的掃描根集以確保所有的對象都完成了標記,由于輔助線程已經標記過活動對象,主線程的本次掃描只是進行check操作,確認完成之后,某些輔助線程會進行清理內存操作,某些輔助進程會進行內存整理操作,由于都是并發的,并不會影響主線程JavaScript代碼的執行。

結束
其實,大部分JavaScript開發人員并不需要考慮垃圾回收,但是了解一些垃圾回收的內部原理,可以幫助你了解內存的使用情況,根據內存使用觀察是否存在內存泄露,而防止內存泄露,是提升應用性能的一個重要舉措。

 

 

責任編輯:姜華 來源: 晨曦大前端
相關推薦

2023-02-28 07:56:07

V8內存管理

2019-08-19 12:50:00

Go垃圾回收前端

2023-06-07 16:00:40

JavaScriptV8語言

2010-09-26 14:08:41

Java垃圾回收

2017-03-03 09:26:48

PHP垃圾回收機制

2017-08-17 15:40:08

大數據Python垃圾回收機制

2010-09-25 15:33:19

JVM垃圾回收

2009-06-23 14:15:00

Java垃圾回收

2024-03-14 09:40:14

2021-10-22 21:39:11

InspectorV8 JS

2021-11-05 15:23:20

JVM回收算法

2010-09-16 15:10:24

JVM垃圾回收機制

2011-07-04 16:48:56

JAVA垃圾回收機制GC

2021-05-27 21:47:12

Python垃圾回收

2010-09-25 15:26:12

JVM垃圾回收

2017-06-12 17:38:32

Python垃圾回收引用

2011-06-28 12:39:34

Java垃圾回收

2015-06-04 09:38:39

Java垃圾回收機

2022-04-29 08:00:51

V8垃圾回收

2011-07-04 13:12:04

JavaScript
點贊
收藏

51CTO技術棧公眾號

性色av无码久久一区二区三区| 国产精品www在线观看| 五月婷婷激情视频| 日韩伦理一区| 日韩欧美一区二区视频| 国产天堂视频在线观看| 精品久久av| 韩日欧美一区二区三区| 久久久久国产精品免费网站| 51调教丨国产调教视频| 成人一区视频| 亚洲欧洲一区二区三区| 国产在线欧美日韩| 老熟妇一区二区三区啪啪| 午夜精品久久久久99热蜜桃导演| 亚洲激情在线观看| 中文av字幕在线观看| 久久香蕉av| 中文字幕成人网| 国产亚洲自拍偷拍| 国产精品爽爽久久久久久| 韩日精品在线| 中文字幕在线视频日韩| www.啪啪.com| 91丨精品丨国产| 日韩人在线观看| 欧美极品少妇无套实战| 成人高清在线| 成人黄色在线视频| 91在线精品播放| 国产乱码77777777| 国产精品永久| 欧美夫妻性视频| 久久久久99精品成人| 欧美黑人做爰爽爽爽| 91精品国产综合久久久久久漫画| 日本一极黄色片| tube8在线hd| 亚洲欧洲日韩一区二区三区| 噜噜噜噜噜久久久久久91| 国产成人精品av在线观| 日韩av成人高清| 久久久久久18| 国产高清在线免费观看| 久久99国产精品视频| 精品国产一区二区在线观看| 国产永久免费网站| 日本综合视频| 日韩欧美亚洲国产一区| 欧美一区二区中文字幕| 污污影院在线观看| 综合亚洲深深色噜噜狠狠网站| 欧美资源一区| 日中文字幕在线| av亚洲精华国产精华精| 99久久精品免费看国产一区二区三区| 一级α片免费看刺激高潮视频| 久久精品在线| 琪琪亚洲精品午夜在线| 国产成人啪精品午夜在线观看| 女主播福利一区| 麻豆国产va免费精品高清在线| 9.1片黄在线观看| 精品免费视频| 在线观看久久久久久| 蜜臀av一区二区三区有限公司| 伦理一区二区三区| 亚洲激情视频在线观看| 中文字幕xxx| 丝袜美腿综合| 国产视频精品免费播放| 成人无码www在线看免费| 久久精品凹凸全集| 亚洲精品第一国产综合精品| 国产精品无码在线| 亚洲黄页在线观看| 亚洲开心激情网| 亚洲国产天堂av| 极品美女一区二区三区| 一级做a爰片久久毛片美女图片| 欧洲av一区二区三区| 成久久久网站| 久久精品精品电影网| 91日韩中文字幕| 国产一区二区三区自拍| 91黑丝高跟在线| 久久青青草原亚洲av无码麻豆 | 老司机午夜精品| 国产精品日韩在线播放| 国产又大又粗又硬| 成人免费看的视频| 欧美精品一区二区视频| www.亚洲.com| 一区二区三区成人| 男人操女人免费软件| 成人黄色毛片| 日韩欧美中文字幕精品| 少妇饥渴放荡91麻豆| 日韩大片在线播放| 欧美激情极品视频| 老熟妇一区二区三区| 韩国v欧美v亚洲v日本v| 国产视频99| 亚洲麻豆精品| 亚洲国产综合在线| 在线观看免费成人av| 国产精品一站二站| 日韩av最新在线观看| 91动漫免费网站| 1000部精品久久久久久久久| 国产精品精品一区二区三区午夜版| 国产女人高潮时对白| 91网站在线观看视频| 亚洲精品人成| 97人人在线视频| 欧美日韩你懂的| 国产高清成人久久| 91久久电影| 日本欧美爱爱爱| 国产黄色片免费观看| 国产区在线观看成人精品| 国产精品无码免费专区午夜| 99久久综合国产精品二区| 欧美精品一区二区久久久| 后入内射无码人妻一区| 美女精品一区| 国产区欧美区日韩区| 欧美午夜电影一区二区三区| 黑人欧美xxxx| 日本少妇xxxx软件| 99精品小视频| 国产精品久久久久久久久久久久| 熟妇人妻一区二区三区四区 | 欧美日韩一区二区三区在线| 亚洲一级av无码毛片精品| 国产精品97| 国产极品jizzhd欧美| 日日躁夜夜躁白天躁晚上躁91| 亚洲色图制服丝袜| 小明看看成人免费视频| 国产区精品区| 欧美在线视频免费| 韩国av电影在线观看| 成人欧美一区二区三区1314| 午夜激情福利在线| 一区三区在线欧| 欧美一级大片视频| 欧美少妇bbw| 一区二区三区不卡在线观看 | 日韩精品在线观看一区| 久久久久久久久久久97| 国产老肥熟一区二区三区| 亚洲精品一区二区毛豆| 成人在线免费| 中文日韩电影网站| 亚洲精品国产精品国自产网站按摩| 久久综合五月天婷婷伊人| 男人揉女人奶房视频60分| 精品无人区一区二区| 欧美极品少妇全裸体| 后入内射欧美99二区视频| 一区二区三区国产豹纹内裤在线| 26uuu国产| 国产精品豆花视频| 国内精品视频免费| 国产99在线观看| 日韩毛片中文字幕| 午夜精品一区二| 国产欧美一区二区三区沐欲 | 国产在线看一区| av电影一区二区三区| 国产精品久久久久久久久久久久久久久| 深夜福利91大全| 91精品视频免费在线观看| 成人免费在线观看入口| 51自拍视频在线观看| 国产精品www994| 国产视频在线观看一区| 在线手机中文字幕| 在线精品高清中文字幕| 国产精品久久久久精| 一区二区三区日韩精品| 国产不卡一二三| 玖玖在线精品| 尤物国产精品| 国产精品任我爽爆在线播放| 18久久久久久| av电影在线观看一区二区三区| 欧美美女bb生活片| 国产亚洲精品av| 91蜜桃在线观看| 国产一伦一伦一伦| 国户精品久久久久久久久久久不卡| 极品校花啪啪激情久久| 亚洲电影有码| 欧美大片免费看| 精品欧美不卡一区二区在线观看 | 国产女同性恋一区二区| 亚洲一区二区三区四区精品| 一区二区三区四区五区精品视频| 神马影院我不卡午夜| 青草伊人久久| 国产99久久精品一区二区| 宅男在线观看免费高清网站| 日韩精品中文在线观看| 99热这里只有精品1| 日韩欧美国产黄色| 国产乱国产乱老熟300| 久久久久国色av免费看影院| 久久精品一二三四| 久久久久久色| 久久av高潮av| 欧美日韩有码| 精品综合久久久| 麻豆精品在线| 国产精品久久久久久久天堂| 国产乱码在线| 久久精品国产久精国产一老狼| 亚洲欧美丝袜中文综合| 69堂国产成人免费视频| 精品国产xxx| 亚洲高清免费在线| 熟女av一区二区| 久久久一区二区三区捆绑**| 制服.丝袜.亚洲.中文.综合懂| 蜜臀av一级做a爰片久久| aa在线观看视频| 欧美私人啪啪vps| 中文字幕不卡每日更新1区2区| 中文字幕伦av一区二区邻居| 国产精品v欧美精品∨日韩| 日韩毛片免费看| 国产大片精品免费永久看nba| 国产免费拔擦拔擦8x高清在线人 | 欧美一卡2卡3卡4卡| 国产精品欧美综合| 欧美日韩中文字幕日韩欧美| 亚洲国产精品成人无久久精品| 亚洲人成影院在线观看| 快灬快灬一下爽蜜桃在线观看| 久久亚洲综合av| 艳妇乳肉亭妇荡乳av| 国产99久久精品| 男生和女生一起差差差视频| 精品一区二区三区不卡| 69久久久久久| 蜜臀av一区二区在线免费观看| 91蝌蚪视频在线观看| 久久看片网站| 99re在线视频免费观看| 性欧美videos另类喷潮| 国产精品自拍片| 国产欧美日韩综合一区在线播放 | 中文字幕在线观看播放| 久久精品国产精品亚洲| 黄色网在线免费看| 久久久国产精品视频| 麻豆视频在线观看免费| 精品国偷自产在线视频| 欧洲不卡av| 久久这里有精品视频| 成年视频在线观看| 不卡毛片在线看| 欧美黑人猛交| 久久久女女女女999久久| av伦理在线| 91精品国产乱码久久久久久蜜臀| 国产美女精品写真福利视频| 日本韩国在线不卡| 国产日韩另类视频一区| 国产精品久久久久影院日本| 婷婷久久综合九色综合99蜜桃| 91精品国产综合久久香蕉的用户体验 | 三上悠亚久久精品| 羞羞视频在线观看欧美| 亚洲人成色77777| 另类调教123区| 久久aaaa片一区二区| 成人一级片网址| 波多野结衣办公室33分钟| 日本一区二区三区国色天香| jizzjizz日本少妇| 一区二区激情视频| 青青草av在线播放| 在线观看日产精品| 99riav国产| 亚洲精品国产精品国自产观看浪潮 | 日韩一区二区在线看| 隣の若妻さん波多野结衣| 国产视频一区在线| 欧美jizz18hd性欧美| 久久久久亚洲精品成人网小说| 亚洲天堂导航| 成人疯狂猛交xxx| 国产精品17p| 日韩欧美亚洲精品| 欧美激情一级片一区二区| 国产在线青青草| 国产一区二区三区免费播放| 91黄色免费视频| 中文字幕一区二区三区在线播放 | 精品久久久久久久久中文字幕| 欧美性受xxx黑人xyx性爽| 日韩欧美中文字幕一区| 福利在线视频导航| 欧美激情手机在线视频 | 91av免费观看| 久久精品一区蜜桃臀影院| 欧美黄色aaa| 在线中文字幕一区| 国模人体一区二区| www.日韩免费| 中文不卡1区2区3区| 91中文精品字幕在线视频| 一区三区在线欧| 日韩精品免费一区| 蜜臀av一区二区| 欧美高清性xxxx| 一区二区成人在线观看| 国产情侣呻吟对白高潮| 亚洲精品国精品久久99热 | 中文字幕在线不卡一区二区三区| 日本熟妇毛茸茸丰满| 欧美肥妇毛茸茸| 成人亚洲性情网站www在线观看| 久久久免费电影| 欧美一级大片在线视频| 亚洲欧洲一区二区福利| 午夜亚洲视频| 一起草在线视频| 一区二区三区不卡在线观看| 国产精品玖玖玖| 国产一区二区三区免费视频| 日韩欧美精品一区二区三区| 亚洲aaaaaa| 午夜精品毛片| 高清av免费看| 国产三级久久久| 欧美精品韩国精品| 日韩成人性视频| 超碰97免费在线| 成人久久18免费网站漫画| 亚洲影视一区二区三区| 久久国产这里只有精品| 国产精品天干天干在线综合| 国产一级淫片a视频免费观看| 日韩成人中文字幕| 国产在线观看www| 国产日韩欧美一区二区三区四区| 欧美天天在线| 久久久国产精品久久久| 亚洲三级小视频| 国产乱淫av免费| 久久成人18免费网站| 国产精区一区二区| 日本a在线天堂| 国产成人8x视频一区二区 | 欧美性久久久| 91人人澡人人爽| 亚洲国产精品自拍| 免费观看的毛片| 亚洲3p在线观看| 农村少妇一区二区三区四区五区| 国产综合中文字幕| 91丨九色丨尤物| 无码一区二区三区| 国产亚洲欧美视频| 日本久久一区| 91精品一区二区三区四区| 国产不卡在线视频| 黄色小视频在线免费看| 亚洲国产美女精品久久久久∴| 看黄在线观看| 日韩偷拍一区二区| 蜜桃视频第一区免费观看| 色哟哟一一国产精品| 日韩欧美国产一区二区在线播放 | 欧美在线视频一二三| 国产一区二区三区网| 亚洲黄色av片| 亚洲动漫第一页| 国产在线观看高清视频| 91在线观看免费观看 | 1769国产精品视频| 精品视频免费在线播放| 久久久亚洲高清| 91福利免费视频| 久久久久一本一区二区青青蜜月| 欧洲在线一区| 777一区二区| 性久久久久久久| 国产免费av高清在线| 亚洲一区免费网站| 亚洲在线视频| 国精品人伦一区二区三区蜜桃| 日韩欧美www| 六月婷婷综合| 国产精品av免费观看| 91丝袜美腿高跟国产极品老师| 一级淫片免费看|