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

Javascript的垃圾回收機制知多少?

開發 前端
本文主要圍繞JS引擎相關知識,來深入了解底層運行邏輯,這對于日常開發維護高性能Javascript代碼以及排查代碼性能問題有著很好的幫助。

[[438972]]

1 寫在前面

本文主要圍繞JS引擎相關知識,來深入了解底層運行邏輯,這對于日常開發維護高性能Javascript代碼以及排查代碼性能問題有著很好的幫助。關于JS引擎底層的垃圾回收機制,后面才能理解內存泄漏的問題以及手動預防和優化,實現對JS內存管理以及內存溢出的處理。

  • 那么我們需要考慮幾個問題:
  • 什么是垃圾回收機制(GC)?
  • 垃圾是怎樣產生的?
  • 為什么要進行垃圾回收?
  • Javascript的內存是如何管理的?
  • Chrome瀏覽器又是如何進行垃圾回收的?

2 內存管理

在Javascript編程中,內存管理大概分成三個步驟,也是內存的生命周期:

  • 分配你所需系統內存的空間
  • 使用分配到的內存進行讀寫操作
  • 不需要使用內存時,將空間進行釋放和歸還

內存的生命周期

與其它手動管理內存的語言不一樣的是,在Javascript中,當我們創建變量時,系統會給對象進行自動分配對應的內存空間以及閑置資源回收,也就是不需要我們手動進行分配。但是,正是因為垃圾回收機制導致開發者有著錯誤的感覺,就是他們不用關心內存管理。

  1. const name = "yichuan";//給字符串分配棧內存 
  2. const age = 18;//給數值分配棧內存 
  3.  
  4. //給對象以及包含的值分配堆內存 
  5. const user = { 
  6.   name"onechuan"
  7.   age: 19 
  8. //給數組以及包含的值分配堆內存 
  9. const arr = ["yichuan","onechuan",18]; 
  10. //給函數對象分配堆內存 
  11. function sum(x,y){ 
  12.   return x + y; 

在前面《Javascript的數據類型知多少》文中,我們知道了基礎數據類型和引用數據類型的分配機制,即:

  • 簡單數據類型內存保存在固定的棧空間中,可直接通過值進行訪問
  • 引用數據類型的值大小不固定,其引用地址保存在棧空間、引用所指向的值保存在堆空間中,需要通過引用進行訪問

棧內存中的基本數據類型,可以直接通過操作系統進行處理,而堆內存中的引用數據類型的值大小不確定,因此需要JS的引擎通過垃圾回收機制進行處理。

3 內存回收機制(GC)

Javascript的V8引擎被限制了內存的使用,因此根據不同操作系統的內存大小會不一樣。

V8引擎最初設計是作為瀏覽器的引擎,并未考慮占據過多的內存空間,隨著web技術工程化的發展,占據了越來越多的內存空間。又由于被v8的會回收機制所限制,這樣就引起了js執行的線程被掛起,會影響當前執行的頁面應用性能。

垃圾回收算法:就是垃圾收集器按照固定的時間間隔,周期性地尋找那些不再使用的變量,然后將其清楚或釋放內存。但是垃圾回收算法是個不完美的方案,因為某塊內存是否還可用,屬于不可預判的問題,也就意味著單純依靠算法是解決不了的。還有為什么不是實時的找出無用內存并釋放呢?其實很簡單,實時開銷太大了。

我們知道了垃圾是如何產生的,那么我們應該如何清除呢?在瀏覽器的發展歷史上有兩種解決策略:

  • 標記清除
  • 引用計數

標記清除

標記清除分為:標記階段和清除階段。

首先它會遍歷堆內存上所有的對象,分別給它們打上標記,然后在代碼執行過程結束之后,對所使用過的變量取消標記。在清除階段再把具有標記的內存對象進行整體清除,從而釋放內存空間。

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

  • 垃圾收集器在運行時會給內存中的所有變量都加上一個標記
  • 然后從各個根對象開始遍歷,把還在被上下文變量引用的變量標記去掉標記
  • 清理所有帶有標牌機的變量,銷毀并回收它們所占用的內存空間
  • 最后垃圾回收程序做一次內存清理

使用標記清除策略的最重要的優點在于簡單,無非是標記和不標記的差異。通過標記清除之后,剩余的對象內存位置是不變的,也會導致空閑內存空間是不連續的,這就造成出現內存碎片的問題。內存碎片多了后,如果要存儲一個新的需要占據較大內存空間的對象,就會造成影響。對于通過標記清除產生的內存碎片,還是需要通過標記整理策略進行解決。

簡而言之:

  • 優點:簡單
  • 缺點:內存碎片化、分配速度慢

標記整理

經過標記清除策略整理后,老生代內存中因此產生了許多內存碎片,如果不進行清理內存碎片,就會對存儲造成影響。

標記整理(Mark-Compact)算法 就可以有效地解決標記清除的兩個缺點。它的標記階段和標記清除算法沒有什么不同,只是標記結束后,標記整理算法會將活著的對象(即不需要清理的對象)向內存的一端移動,最后清理掉邊界的內存。

引用計數

引用計數是一種不常見的垃圾回收策略,其思路就是對每個值都記錄其的引用次數。具體的:

  • 當變量進行聲明并賦值后,值的引用數為1。
  • 當同一個值被賦值給另一個變量時,引用數+1
  • 當保存該值引用的變量被其它值覆蓋時,引用數-1
  • 當該值的引用數為0時,表示無法再訪問該值了,此時就可以放心地將其清除并回收內存。
  1. let a = new Object()  // 此對象的引用計數為 1(a引用) 
  2. let b = a   // 此對象的引用計數是 2(a,b引用) 
  3. a = null    // 此對象的引用計數為 1(b引用) 
  4. b = null    // 此對象的引用計數為 0(無引用) 
  5. ...   // GC 回收此對象 

這種回收策略看起來很方便,但是當其進行循環引用時就會出現問題,會造成大量的內存不會被釋放。當函數結束后,兩個對象都不在作用域中,A 和 B 都會被當作非活動對象來清除掉,相比之下,引用計數則不會釋放,也就會造成大量無用內存占用,這也是后來放棄引用計數,使用標記清除的原因之一。

4 V8對于垃圾回收機制的優化

大多數瀏覽器都是基于標記清除算法,不同的只是在運行垃圾回收的頻率具有差異。V8 對其進行了一些優化加工處理,那接下來我們主要就來看 V8 中對垃圾回收機制的優化。

分代式垃圾回收

V8 的垃圾回收策略主要基于分代式垃圾回收機制,V8 中將堆內存分為新生代和老生代兩區域,采用不同的垃圾回收器也就是不同的策略管理垃圾回收。

新生代的對象為存活時間較短的對象,簡單來說就是新產生的對象,通常只支持 1~8M 的容量,而老生代的對象為存活事件較長或常駐內存的對象,簡單來說就是經歷過新生代垃圾回收后還存活下來的對象,容量通常比較大。

V8 整個堆內存的大小就等于新生代加上老生代的內存,對于新老兩塊內存區域的垃圾回收,V8 采用了兩個垃圾回收器來管控。

新生代和老生代

新生代內存回收

在64操作系統下分配為32MB,因為新生代中的變量存活時間短,不太容易產生太大的內存壓力,因此不夠大也是能夠理解。

對于新生代內存的回收,通常是通過Scavenge 的算法進行垃圾回收,就是將新生代內存進行一分為二,正在被使用的內存空間稱為使用區,而限制狀態的內存空間稱為空閑區。

新生代內存回收的原理是:

  • 新加入的對象都會存放在使用區,當使用區快寫滿時就進行一次垃圾清理操作。
  • 在開始進行垃圾回收時,新生代回收器會對使用區內的對象進行標記
  • 標記完成后,需要對使用區內的活動對象拷貝到空閑區進行排序
  • 而后進入垃圾清理階段,將非活動對象占用的內存空間進行清理
  • 最后對使用區和空閑區進行交換,使用區->空閑區,空閑區->使用區

新生代中的變量如果經過回收之后依然一直存在,那么會放入到老生代內存中,只要是已經經歷過一次Scavenge算法回收的,就可以晉升為老生代內存的對象。

老生代內存回收

當然,Scavenge算法也有其適用場景范圍,對于內存空間較大的就不適合使用Scavenge算法。此時應該使用Mark-Sweep(標記清除)和Mark-Compact(標記整理)的策略進行老生代內存中的垃圾回收。

首先是標記階段,從一組根元素開始,遞歸遍歷這組根元素,遍歷過程中能到達的元素稱為活動對象,沒有到達的元素就可以判斷為非活動對象。清除階段老生代垃圾回收器會直接將非活動對象,也就是數據清理掉。

同樣的標記清除策略會產生內存碎片,因此還需要進行標記整理策略進行優化。

5 內存泄漏與優化

內存泄漏,指在JS中已經分配內存地址的對象由于長時間未進行內存釋放或無法清除,造成了長期占用內存,使得內存資源浪費,最終導致運行的應用響應速度變慢以及最終崩潰的情況。

在代碼中創建對象和變量時會占據內存,但是JS基于自己的內存回收機制是可以確定哪些變量不再需要,并將其進行清除。但是,當你的代碼中存在邏輯缺陷時,你以為你已經不需要,但是程序中還存在這引用,這就導致程序運行完后并沒有進行合適的回收所占有的內存空間。運行時間越長占用內存越多,隨之出現的問題就是:性能不佳、高延遲、頻繁崩潰。

造成內存泄漏的常見原因有:

  • 過多的緩存。及時清理過多的緩存。
  • 濫用閉包。盡量避免使用大量的閉包。
  • 定時器或回調太多。與節點或數據相關聯的計時器不再需要時,DOM節點對象可以清除,整個回調函數也不再需要。可是,計時器回調函數仍然沒有被回收(計時器停止才會被回收)。當不需要setTimeout或setInterval時,定時器沒有被清除,定時器的糊掉函數以及其內部依賴的變量都不能被回收,會造成內存泄漏。解決方法:在定時器完成工作時,需要手動清除定時器。
  • 太多無效的DOM引用。DOM刪除了,但是節點的引用還在,導致GC無法實現對其所占內存的回收。解決方法:給刪除的DOM節點引用設置為null。
  • 濫用全局變量。全局變量是根據定義無法被垃圾回收機制進行收集的,因此需要特別注意臨時存儲和處理大量信息的全局變量。如果必須使用全局變量來存儲數據,請確保將其指定為null或在完成后重新分配它。解決方法:使用嚴格模式。
  • 從外到內執行appendChild。此時即使調用removeChild也無法進行釋放內存。解決方法:從內到外appendChild。
  • 反復重寫同一個數據會造成內存大量占用,但是IE瀏覽器關閉后會被釋放。
  • 注意程序邏輯,避免編寫『死循環』之類的代碼。
  • DOM對象和JS對象相互引用。

關于內存泄漏,如果你想要更好地排查以及提前避免問題的發生,最好的解決方法是通過熟練使用Chrome的內存剖析工具,多分析多定位Chrome幫你分析保留的內存快照,來查看持續占用大量內存的對象。

6 參考文章

  • 《「硬核JS」你真的了解垃圾回收機制嗎》
  • 《Javascript核心原理精講》
  • 《Javascript高級程序設計》

7 寫在后面

本篇文章聊了JS的內存管理機制,以及v8垃圾回收機制,最后我們也分析了一些日常編碼中經常遇到內存泄漏問題,根據不同的原因給出對應的解決方案。

【編輯推薦】

 

責任編輯:姜華 來源: 前端萬有引力
相關推薦

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垃圾回收引用

2021-11-05 15:23:20

JVM回收算法

2010-09-16 15:10:24

JVM垃圾回收機制

2010-09-25 15:26:12

JVM垃圾回收

2021-05-27 21:47:12

Python垃圾回收

2010-10-13 10:24:38

垃圾回收機制JVMJava

2011-06-28 12:39:34

Java垃圾回收

2015-06-04 09:38:39

Java垃圾回收機

2017-10-12 12:41:11

PHP圾回收機制變量容器

2009-12-09 17:28:34

PHP垃圾回收機制

2011-07-04 13:12:04

JavaScript

2024-10-28 13:18:54

2023-03-26 22:48:46

Python引用計數內存

2011-01-18 14:06:58

JavaScriptweb

2011-06-28 10:19:40

C#開發
點贊
收藏

51CTO技術棧公眾號

精品视频久久久久| 亚洲色成人www永久在线观看| av女人的天堂| 成人免费高清观看| 91麻豆国产福利在线观看| 国产精品精品一区二区三区午夜版 | 国产一区二区三区91| 欧美日韩一区成人| 久久男人资源站| 国产黄色在线| 成人黄色一级视频| 国产精品入口日韩视频大尺度| 特级西西人体4444xxxx| 天堂а√在线中文在线新版| caoporn成人| 在线视频国内一区二区| 欧美日韩dvd| 成在在线免费视频| 99综合电影在线视频| 国产精品综合网站| 一级黄色片大全| www.久久爱.com| 色综合久久88色综合天天6| 国产日韩欧美大片| 91美女视频在线| 水蜜桃久久夜色精品一区的特点| 亚洲国产高清自拍| 男人午夜视频在线观看| av日韩电影| 亚洲一线二线三线久久久| 亚洲高清视频一区| 蜜桃视频在线观看视频| 免费一区二区视频| 欧美中文字幕在线播放| 久久久久无码国产精品不卡| 香蕉国产成人午夜av影院| 日韩欧美中文一区| 久久久久久久久久久久久久久国产| 好了av在线| 成人性色生活片免费看爆迷你毛片| 午夜欧美不卡精品aaaaa| 国产女片a归国片aa| 久久在线播放| 色婷婷综合久久久久| 亚洲最大成人综合网| 国产精品日韩精品中文字幕| 日韩av中文字幕在线播放| 精品久久久久久中文字幕2017| 在线观看免费视频你懂的| 国产精品欧美一区二区三区| 日韩亚洲不卡在线| 国产香蕉在线| 国产日韩av一区二区| 欧美一区二区三区在线播放 | 国产日韩二区| 国产 欧美 自拍| 免费在线观看一区二区三区| 国产精品扒开腿爽爽爽视频| 国产一区二区视频网站| 久热精品视频| 国产精品美女在线| 影音先锋国产在线| 极品美女销魂一区二区三区免费| 欧美中文字幕第一页| 五月天综合激情网| 日韩影院在线观看| 国产精品看片资源| 91在线你懂的| 成人综合激情网| 91在线网站视频| www.蜜臀av| av欧美精品.com| 日本成人看片网址| 免费黄色网页在线观看| 一区二区成人在线| 春日野结衣av| 91九色综合| 色综合色狠狠天天综合色| av视屏在线播放| 成人豆花视频| 精品视频久久久久久久| chinese少妇国语对白| 欧美成a人片在线观看久| 欧美天堂一区二区三区| 污污视频在线免费| 久久av影院| 日韩欧美一二三区| 亚洲第一页av| 66视频精品| 2021国产精品视频| 一卡二卡在线视频| 91在线精品秘密一区二区| 91精品国产自产在线老师啪| 特级毛片www| 免费成人在线影院| 国产精品爽黄69| 亚洲AV午夜精品| 久久精品亚洲精品国产欧美| 欧美日韩一区二区三| 日本高清视频在线播放| 亚洲h在线观看| 色播五月综合网| 亚洲国产aⅴ精品一区二区三区| 欧美在线视频日韩| www.美色吧.com| 欧美理论在线播放| 欧美精品九九久久| 艳妇乳肉豪妇荡乳av无码福利 | 欧美成人一区在线| 国产极品国产极品| 欧美久久视频| 国产精品高潮粉嫩av| 亚洲成a人片77777精品| 中文成人av在线| 免费看日本毛片| 精品国产一区二区三区性色av| 欧美一级在线观看| 国产成人av一区二区三区不卡| 欧美精选视频在线观看| 自拍偷拍亚洲精品| 91精品国产高清一区二区三密臀| 日韩中文字幕av电影| 国产麻豆日韩| 欧美一卡二卡| 欧美日韩另类一区| 久久久久久久久福利| 久久久久综合| 精品国产乱码久久久久久郑州公司| 色播色播色播色播色播在线| 亚洲最新视频在线观看| 91猫先生在线| 女同久久另类99精品国产| 久久久国产精品x99av| 一级久久久久久| 久久影院午夜论| 日日碰狠狠添天天爽超碰97| 99热这里只有精品首页 | 色一区二区三区四区| 日本一区二区不卡| 日本精品专区| 狠狠干狠狠久久| 中文在线永久免费观看| 亚洲激情专区| 久久99影院| 日本不良网站在线观看| 日韩av网站导航| 亚洲综合一二三| 99热国产精品| 草草久久久无码国产专区| 日韩在线电影| 日韩一区二区久久久| 中文字幕在线日亚洲9| 丰满白嫩尤物一区二区| 色综合电影网| 9lporm自拍视频区在线| 精品福利一区二区三区| 国产无遮挡裸体免费视频| 精品一区二区三区不卡 | av网站在线观看不卡| 里番精品3d一二三区| 精品国产一区二区三区四区在线观看 | 国产成人av网| 在线免费看a| 正在播放一区二区| 麻豆亚洲av熟女国产一区二 | 你懂的在线观看一区二区| 国模视频一区二区三区| 欧美精品久久久久久久久久丰满| 一区二区三区中文字幕精品精品| 五月婷婷六月合| 97在线精品| 国产精品免费视频久久久| 欧美成人性生活视频| 日韩精品一区二区三区四区| 日韩xxx高潮hd| 国产亚洲欧美日韩日本| 亚洲欧美aaa| 在线精品一区| 日本一区二区在线视频| 人狥杂交一区欧美二区| 中文字幕综合一区| 亚洲国产精彩视频| 91福利精品第一导航| 91香蕉视频网| av亚洲精华国产精华精华| 黄色片在线免费| 99久久精品费精品国产| 好吊色欧美一区二区三区| 91欧美精品| 久久久久国产精品免费网站| 国产在线色视频| 日韩欧美在线综合网| 日本中文字幕第一页| 1区2区3区精品视频| 亚洲精品乱码久久| 另类小说综合欧美亚洲| 人人妻人人澡人人爽欧美一区双 | 欧美一级专区| 精品一区二区成人免费视频| 欧美天堂社区| 91香蕉电影院| 天天综合网站| 亚洲91精品在线| 五月色婷婷综合| 欧美日韩一级二级| 日本少妇xxxx动漫| 亚洲视频一区在线| av电影中文字幕| 天使萌一区二区三区免费观看| 欧洲一区二区日韩在线视频观看免费 | 亚洲精品亚洲人成在线观看| 欧美中文在线免费| 羞羞网站在线免费观看| 这里只有精品丝袜| 五月激情六月婷婷| 精品国产在天天线2019| 亚洲天堂网在线视频| 一本久道中文字幕精品亚洲嫩| 一级片久久久久| 国产一区二区导航在线播放| mm1313亚洲国产精品无码试看| 国产精品久久久久久久免费观看 | 日本一区二区三区久久| 亚洲大片免费看| 日本少妇高潮喷水xxxxxxx| 国产**成人网毛片九色 | 欧美中文字幕在线观看视频| 欧美国产美女| 五月天国产一区| 国产99亚洲| 久久久久资源| 日韩久久一区| 国产精品亚洲欧美导航| 欧美韩国亚洲| 国产精品高清在线| 自拍偷自拍亚洲精品被多人伦好爽| 久热精品视频在线免费观看 | 91九色在线看| 欧美精品www| av日韩国产| 国内精品久久久久影院优| caopon在线免费视频| 久久久精品久久久久| 黄在线免费看| 久久亚洲精品一区二区| 蜜桃av在线免费观看| 亚洲另类xxxx| 久久电影中文字幕| 亚洲天堂av在线免费观看| 成人在线小视频| 国产精品一区二区免费视频| 亚洲自拍与偷拍| 久草网在线观看| 亚洲综合图片区| 国产精品19乱码一区二区三区| 国产精品视频yy9299一区| 成人黄色免费网址| 国产女人aaa级久久久级| www.88av| 国产婷婷色一区二区三区| 蜜臀视频在线观看| bt欧美亚洲午夜电影天堂| 国产麻豆天美果冻无码视频| 国产午夜一区二区三区| 在线观看国产免费视频| 2017欧美狠狠色| 五月婷六月丁香| 亚洲欧美日韩国产另类专区 | 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 久久久久成人精品无码| 亚洲午夜视频在线| 中文字幕超碰在线| 亚洲图片欧美色图| 极品久久久久久| 姬川优奈aav一区二区| 一级片在线观看免费| 精品久久久久久久中文字幕 | 亚洲午夜伦理| 黄色免费视频大全| 麻豆精品久久精品色综合| 亚洲欧洲日韩综合| 久久无码av三级| 三级影片在线看| 色综合色狠狠天天综合色| 国产精品色综合| 亚洲免费成人av电影| 麻豆视频在线观看免费| 91高清视频免费观看| 绿色成人影院| 成人亲热视频网站| 色综合视频一区二区三区44| 国产一区视频在线播放| 亚洲综合网狠久久| 日韩理论片在线观看| 午夜精品婷婷| 国产精品日本一区二区| 天堂成人娱乐在线视频免费播放网站 | 色伦专区97中文字幕| 成人性生交大片免费看在线播放| 欧美多人乱p欧美4p久久| 激情开心成人网| 国产高清一区视频| 国产极品模特精品一二| 四虎永久国产精品| 亚洲狼人精品一区二区三区| 天天干天天av| 国产亚洲精品中文字幕| 国产亚洲精久久久久久无码77777| 午夜精品免费在线| 国产精品国产av| 日韩欧美精品三级| av午夜在线| 2021久久精品国产99国产精品| 巨茎人妖videos另类| 91视频免费进入| 欧美丰满日韩| 欧美一级特黄a| 91免费国产在线观看| 久久精品国产亚洲AV无码男同 | 成人手机视频在线| 日韩精品一二三| 蜜桃精品成人影片| 国产视频视频一区| 丰满少妇乱子伦精品看片| 一本色道a无线码一区v| 日韩中文字幕免费在线观看| 欧美剧在线观看| 精品国产亚洲日本| 国产在线资源一区| 成人3d动漫在线观看| 成年人黄色片视频| 99国产麻豆精品| 亚洲一区欧美在线| 亚洲国产成人久久综合一区| 免费在线中文字幕| 91精品综合久久| 欧美日韩免费观看一区=区三区| 欧美日韩精品在线一区二区| 成人国产精品免费观看视频| 久青草免费视频| 欧美成人a在线| 国产又色又爽又黄刺激在线视频| 国产精品视频免费观看www| 美日韩中文字幕| 日韩a级黄色片| 日韩高清国产一区在线| 色哟哟精品观看| 在线免费精品视频| seseavlu视频在线| 91精品久久久久久久久久久久久| 老司机精品视频在线播放| 国产素人在线观看| 2017欧美狠狠色| 老熟妇一区二区三区啪啪| 日韩在线观看免费全集电视剧网站 | 免费成人结看片| 日韩无套无码精品| 国产精品天干天干在线综合| 伦av综合一区| 精品国产自在久精品国产| 国模私拍一区二区国模曼安| 久久综合九色综合久99| 葵司免费一区二区三区四区五区| 日韩成人av影院| 高潮白浆女日韩av免费看| 精品视频二区| 成人国产精品色哟哟| 亚洲一级网站| brazzers精品成人一区| 欧美日韩精品一区二区在线播放| 久草在现在线| 国产日韩换脸av一区在线观看| 九一国产精品| 九九热免费在线观看| 亚洲午夜激情网站| 国产三级视频在线| 亚洲va国产va天堂va久久| 在线成人欧美| 在线观看日本中文字幕| 91麻豆精品国产自产在线观看一区| 户外极限露出调教在线视频| 成人在线视频网| 久久国产成人精品| jjzz黄色片| 亚洲v中文字幕| 国产区视频在线| 99久久精品无码一区二区毛片 | aaa国产精品视频| 男人揉女人奶房视频60分| 国产精品久线在线观看| 中文字幕激情视频| 欧美黑人xxxx| 欧美限制电影| 白嫩情侣偷拍呻吟刺激| 亚洲国产色一区| 成人在线播放视频| 国产激情一区二区三区在线观看| 9色精品在线| 成年人视频软件| 欧美一级片在线看|