欧美午夜诱惑在线_一区二区三级片_国产成人综合v在线_国产91精品无码免费_高清综合亚洲三级_黄色软件下载观看_上萬網友分享国产精品高潮呻吟久久av心得_美女扒开尿眼无遮挡免费视频_好紧好湿好黄的视频免费_亚洲日韩欧美中字五月天

如何讀懂JS垃圾回收機制,知識點有哪些

Admin 2022-07-05 群英技術(shù)資訊 838 次瀏覽

這篇文章給大家分享的是如何讀懂JS垃圾回收機制,知識點有哪些。小編覺得挺實用的,因此分享給大家做個參考,文中的介紹得很詳細(xì),而要易于理解和學(xué)習(xí),有需要的朋友可以參考,接下來就跟隨小編一起了解看看吧。



1. 概述

隨著軟件開發(fā)行業(yè)的不斷發(fā)展,性能優(yōu)化已經(jīng)是一個不可避免的話題,那什么樣的行為才能算得上是性能優(yōu)化呢?

本質(zhì)上任何一種可以提高運行效率,降低運行開銷的行為,都可以看做是一種優(yōu)化操作。

這也就意味著,在軟件開放行業(yè)必然存在著很多值得優(yōu)化的地方,特別是在前端開發(fā)過程中,性能優(yōu)化可以認(rèn)為是無處不在的。例如請求資源時所用到的網(wǎng)絡(luò),以及數(shù)據(jù)的傳輸方式,再或者開發(fā)過程中所使用到的框架等都可以進行優(yōu)化。

本章探索的是JavaScript語言本身的優(yōu)化,是從認(rèn)知內(nèi)存空間的使用到垃圾回收的方式,從而可以編寫出高效的JavaScript代碼。

2. 內(nèi)存管理

隨著近些年硬件技術(shù)的不斷發(fā)展,高級編程語言中都自帶了GC機制,讓開發(fā)者在不需要特別注意內(nèi)存空間使用的情況下,也能夠正常的去完成相應(yīng)的功能開發(fā)。為什么還要重提內(nèi)存管理呢,下面就通過一段極簡單的代碼來進行說明。

首先定義一個普通的函數(shù)fn,然后在函數(shù)體內(nèi)聲明一個數(shù)組,接著給數(shù)組賦值,需要注意的是在賦值的時候刻意選擇了一個比較大的數(shù)字來作為下標(biāo)。這樣做的目的就是為了當(dāng)前函數(shù)在調(diào)用的時候可以向內(nèi)存盡可能多的申請一片比較大的空間。

function fn() {
    arrlist = [];
    arrlist[100000] = 'this is a lg';
}

fn()

在執(zhí)行這個函數(shù)的過程中從語法上是不存在任何問題的,不過用相應(yīng)的性能監(jiān)控工具對內(nèi)存進行監(jiān)控的時候會發(fā)現(xiàn),內(nèi)存變化是持續(xù)程線性升高的,并且在這個過程當(dāng)中沒有回落。這代表著內(nèi)存泄露。如果在寫代碼的時候不夠了解內(nèi)存管理的機制就會編寫出一些不容易察覺到的內(nèi)存問題型代碼。

這種代碼多了以后程序帶來的可能就是一些意想不到的bug,所以掌握內(nèi)存的管理是非常有必要的。因此接下來就去看一下,什么是內(nèi)存管理。

從這個詞語本身來說,內(nèi)存其實就是由可讀寫的單元組成,他標(biāo)識一片可操作的空間。而管理在這里刻意強調(diào)的是由人主動去操作這片空間的申請、使用和釋放,即使借助了一些API,但終歸可以自主的來做這個事。所以內(nèi)存管理就認(rèn)為是,開發(fā)者可以主動的向內(nèi)存申請空間,使用空間,并且釋放空間。因此這個流程就顯得非常簡單了,一共三步,申請,使用和釋放。

回到JavaScript中,其實和其他的語言一樣,JavaScript中也是分三步來執(zhí)行這個過程,但是由于ECMAScript中并沒有提供相應(yīng)的操作API。所以JavaScript不能像C或者C++那樣,由開發(fā)者主動調(diào)用相應(yīng)的API來完成內(nèi)存空間的管理。

不過即使如此也不能影響我們通過JavaScript腳本來演示一個空間的生命周期是怎樣完成的。過程很簡單首先要去申請空間,第二個使用空間,第三個釋放空間。

在JavaScript中并沒有直接提供相應(yīng)的API,所以只能在JavaScript執(zhí)行引擎遇到變量定義語句的時候自動分配一個相應(yīng)的空間。這里先定義一個變量obj,然后把它指向一個空對象。對它的使用其實就是一個讀寫的操作,直接往這個對象里面寫入一個具體的數(shù)據(jù)就可以了比如寫上一個yd。最后可以對它進行釋放,同樣的JavaScript里面并沒有相應(yīng)的釋放API,所以這里可以采用一種間接的方式,比如直接把他設(shè)置為null。

let obj = {}

obj.name = 'yd'

obj = null

這個時候就相當(dāng)于按照內(nèi)存管理的一個流程在JavaScript當(dāng)中實現(xiàn)了內(nèi)存管理。后期在這樣性能監(jiān)控工具當(dāng)中看一下內(nèi)存走勢就可以了。

3. 垃圾回收

首先在JavaScript中什么樣的內(nèi)容會被當(dāng)中是垃圾看待。在后續(xù)的GC算法當(dāng)中,也會存在的垃圾的概念,兩者其實是完全一樣的。所以在這里統(tǒng)一說明。

JavaScript中的內(nèi)存管理是自動的。每創(chuàng)建一個對象、數(shù)組或者函數(shù)的時候,就會自動的分配相應(yīng)的內(nèi)存空間。等到后續(xù)程序代碼在執(zhí)行的過程中如果通過一些引用關(guān)系無法再找到某些對象的時候那么這些對象就會被看作是垃圾。再或者說這些對象其實是已經(jīng)存在的,但是由于代碼中一些不合適的語法或者說結(jié)構(gòu)性的錯誤,沒有辦法再去找到這些對象,那么這種對象也會被稱之是垃圾。

發(fā)現(xiàn)垃圾之后JavaScript執(zhí)行引擎就會出來工作,把垃圾所占據(jù)的對象空間進行回收,這個過程就是所謂的垃圾回收。在這里用到了幾個小的概念,第一是引用,第二是從根上訪問,這個操作在后續(xù)的GC里面也會被頻繁的提到。

在這里再提一個名詞叫可達對象,首先在JavaScript中可達對象理解起來非常的容易,就是能訪問到的對象。至于訪問,可以是通過具體的引用也可以在當(dāng)前的上下文中通過作用域鏈。只要能找得到,就認(rèn)為是可達的。不過這里邊會有一個小的標(biāo)準(zhǔn)限制就是一定要是從根上出發(fā)找得到才認(rèn)為是可達的。所以又要去討論一下什么是根,在JavaScript里面可以認(rèn)為當(dāng)前的全局變量對象就是根,也就是所謂的全局執(zhí)行上下文。

簡單總結(jié)一下就是JavaScript中的垃圾回收其實就是找到垃圾,然后讓JavaScript的執(zhí)行引擎來進行一個空間的釋放和回收。

這里用到了引用和可達對象,接下來就盡可能的通過代碼的方式來看一下在JavaScript中的引用與可達是怎么體現(xiàn)的。

首先定義一個變量,為了后續(xù)可以修改值采用let關(guān)鍵字定一個obj讓他指向一個對象,為了方便描述給他起一個名字叫

let obj = {name: 'xiaoming'}

寫完這行代碼以后其實就相當(dāng)于是這個空間被當(dāng)前的obj對象引用了,這里就出現(xiàn)了引用。站在全局執(zhí)行上下文下obj是可以從根上來被找到的,也就是說這個obj是一個可達的,這也就間接地意味著當(dāng)前xiaoming的對象空間是可達的。

接著再重新再去定義一個變量,比如ali讓他等于obj,可以認(rèn)為小明的空間又多了一次引用。這里存在著一個引用數(shù)值變化的,這個概念在后續(xù)的引用計數(shù)算法中是會用到的。

let obj = {name: 'xiaoming'}

let ali = obj

再來做一個事情,直接找到obj然后把它重新賦值為null。這個操作做完之后就可以思考一下了。本身小明這對象空間是有兩個引用的。隨著null賦值代碼的執(zhí)行,obj到小明空間的引用就相當(dāng)于是被切斷了?,F(xiàn)在小明對象是否還是可達呢?必然是的。因為ali還在引用著這樣的一個對象空間,所以說他依然是一個可達對象。

這就是一個引用的主要說明,順帶也看到了一個可達。

接下來再舉一個示例,說明一下當(dāng)前JavaScript中的可達操作,不過這里面需要提前說明一下。

為了方便后面GC中的標(biāo)記清除算法,所以這個實例會稍微麻煩一些。

首先定義一個函數(shù)名字叫objGroup,設(shè)置兩個形參obj1和obj2,讓obj1通過一個屬性指向obj2,緊接著再讓obj2也通過一個屬性去指向obj1。再通過return關(guān)鍵字直接返回一個對象,obj1通過o1進行返回,再設(shè)置一個o2讓他找到obj2。完成之后在外部調(diào)用這個函數(shù),設(shè)置一個變量進行接收,obj等于objGroup調(diào)用的結(jié)果。傳兩個參數(shù)分別是兩個對象obj1和obj2。

function objGroup(obj1, obj2) {
    obj1.next = obj2;
    obj2.prev = obj1;
}

let obj = objGroup({name: 'obj1'}, {name: 'obj2'});

console.log(obj);

運行可以發(fā)現(xiàn)得到了一個對象。對象里面分別有obj1和obj2,而obj1和obj2他們內(nèi)部又各自通過一個屬性指向了彼此。

{
    o1: {name: 'obj1', next: {name: 'obj2', prev: [Circular]}},
    o2: {name: 'obj2', next: {name: 'obj1', next: [Circular]}}
}

分析一下代碼,首先從全局的根出發(fā),是可以找到一個可達的對象obj,他通過一個函數(shù)調(diào)用之后指向了一個內(nèi)存空間,他的里面就是上面看到的o1和o2。然后在o1和o2的里面剛好又通過相應(yīng)的屬性指向了一個obj1空間和obj2空間。obj1和obj2之間又通過next和prev做了一個互相的一個引用,所以代碼里面所出現(xiàn)的對象都可以從根上來進行查找。不論找起來是多么的麻煩,總之都能夠找到,繼續(xù)往下來再來做一些分析。

如果通過delete語句把obj身上o1的引用以及obj2對obj1的引用直接delete掉。此時此刻就說明了現(xiàn)在是沒有辦法直接通過什么樣的方式來找到obj1對象空間,那么在這里他就會被認(rèn)為是一個垃圾的操作。最后JavaScript引擎會去找到他,然后對其進行回收。

這里說的比較麻煩,簡單來說就是當(dāng)前在編寫代碼的時候會存在的一些對象引用的關(guān)系,可以從根的下邊進行查找,按照引用關(guān)系終究能找到一些對象。但是如果找到這些對象路徑被破壞掉或者說被回收了,那么這個時候是沒有辦法再找到他,就會把他視作是垃圾,最后就可以讓垃圾回收機制把他回收掉。

4. GC算法介紹

GC可以理解為垃圾回收機制的簡寫,GC工作的時候可以找到內(nèi)存當(dāng)中的一些垃圾對象,然后對空間進行釋放還可以進行回收,方便后續(xù)的代碼繼續(xù)使用這部分內(nèi)存空間。至于什么樣的東西在GC里邊可以被當(dāng)做垃圾看待,在這里給出兩種小的標(biāo)準(zhǔn)。

第一種從程序需求的角度來考慮,如果說某一個數(shù)據(jù)在使用完成之后上下文里邊不再需要去用到他了就可以把他當(dāng)做是垃圾來看待。

例如下面代碼中的name,當(dāng)函數(shù)調(diào)用完成以后已經(jīng)不再需要使用name了,因此從需求的角度考慮,他應(yīng)該被當(dāng)做垃圾進行回收。至于到底有沒有被回收現(xiàn)在先不做討論。

function func() {
    name = 'yd';
    return `${name} is a coder`
}

func()

第二種情況是當(dāng)前程序運行過程中,變量能否被引用到的角度去考慮,例如下方代碼依然是在函數(shù)內(nèi)部放置一個name,不過這次加上了一個聲明變量的關(guān)鍵字。有了這個關(guān)鍵字以后,當(dāng)函數(shù)調(diào)用結(jié)束后,在外部的空間中就不能再訪問到這個name了。所以找不到他的時候,其實也可以算作是一種垃圾。

function func() {
    const name = 'yd';
    return `${name} is a coder`
}

func()

說完了GC再來說一下GC算法。我們已經(jīng)知道GC其實就是一種機制,它里面的垃圾回收器可以完成具體的回收工作,而工作的內(nèi)容本質(zhì)就是查找垃圾釋放空間并且回收空間。在這個過程中就會有幾個行為:查找空間,釋放空間,回收空間。這樣一系列的過程里面必然有不同的方式,GC的算法可以理解為垃圾回收器在工作過程中所遵循的一些規(guī)則,好比一些數(shù)學(xué)計算公式。

常見的GC算法有引用計數(shù),可以通過一個數(shù)字來判斷當(dāng)前的這個對象是不是一個垃圾。標(biāo)記清除,可以在GC工作的時候給那些活動對象添加標(biāo)記,以此判斷它是否是垃圾。標(biāo)記整理,與標(biāo)記清除很類似,只不過在后續(xù)回收過程中,可以做出一些不一樣的事情。分代回收,V8中用到的回收機制。

5. 引用計數(shù)算法

引用計數(shù)算法的核心思想是在內(nèi)部通過引用計數(shù)器來維護當(dāng)前對象的引用數(shù),從而判斷該對象的引用數(shù)值是否為0來決定他是不是一個垃圾對象。當(dāng)這個數(shù)值為0的時候GC就開始工作,將其所在的對象空間進行回收和釋放。

引用計數(shù)器的存在導(dǎo)致了引用計數(shù)在執(zhí)行效率上可能與其它的GC算法有所差別。

引用的數(shù)值發(fā)生改變是指某一個對象的引用關(guān)系發(fā)生改變的時候,這時引用計數(shù)器會主動的修改當(dāng)前這個對象所對應(yīng)的引用數(shù)值。例如代碼里有一個對象空間,有一個變量名指向他,這個時候數(shù)值+1,如果又多了一個對象還指向他那他再+1,如果是減小的情況就-1。當(dāng)引用數(shù)字為0的時候,GC就會立即工作,將當(dāng)前的對象空間進行回收。

通過簡單的代碼來說明一下引用關(guān)系發(fā)生改變的情況。首先定義幾個簡單的user變量,把他作為一個普通的對象,再定義一個數(shù)組變量,在數(shù)組的里存放幾個對象中的age屬性值。再定義一個函數(shù),在函數(shù)體內(nèi)定義幾個變量數(shù)值num1和num2,注意這里是沒有const的。在外層調(diào)用函數(shù)。

const user1 = {age: 11};
const user2 = {age: 22};
const user3 = {age: 33};

const nameList = [user1.age, user2.age, user3.age,];

function fn() {
    num1 = 1;
    num2 = 2;
}

fn();

首先從全局的角度考慮會發(fā)現(xiàn)window的下邊是可以直接找到user1,user2,user3以及nameList,同時在fn函數(shù)里面定義的num1和num2由于沒有設(shè)置關(guān)鍵字,所以同樣是被掛載在window對象下的。這時候?qū)@些變量而言他們的引用計數(shù)肯定都不是0。

接著在函數(shù)內(nèi)直接把num1和num2加上關(guān)鍵字的聲明,就意味著當(dāng)前這個num1和num2只能在作用域內(nèi)起效果。所以,一旦函數(shù)調(diào)用執(zhí)行結(jié)束之后,從外部全局的地方出發(fā)就不能找到num1和num2了,這個時候num1和num2身上的引用計數(shù)就會回到0。此時此刻只要是0的情況下,GC就會立即開始工作,將num1和num2當(dāng)做垃圾進行回收。也就是說這個時候函數(shù)執(zhí)行完成以后內(nèi)部所在的內(nèi)存空間就會被回收掉。

const user1 = {age: 11};
const user2 = {age: 22};
const user3 = {age: 33};

const nameList = [user1.age, user2.age, user3.age,];

function fn() {
    const num1 = 1;
    const num2 = 2;
}

fn();

那么緊接著再來看一下其他的比如說user1,user2,user3以及nameList。由于userList,里面剛好都指向了上述三個對象空間,所以腳本即使執(zhí)行完一遍以后user1,user2,user3他里邊的空間都還被人引用著。所以此時的引用計數(shù)器都不是0,也就不會被當(dāng)做垃圾進行回收。這就是引用計數(shù)算法實現(xiàn)過程中所遵循的基本原理。簡單的總結(jié)就是靠著當(dāng)前對象身上的引用計數(shù)的數(shù)值來判斷是否為0,從而決定他是不是一個垃圾對象。

1. 引用計數(shù)優(yōu)缺點

引用計數(shù)算法的優(yōu)點總結(jié)出兩條。

第一是引用計數(shù)規(guī)則會在發(fā)現(xiàn)垃圾的時候立即進行回收,因為他可以根據(jù)當(dāng)前引用數(shù)是否為0來決定對象是不是垃圾。如果是就可以立即進行釋放。

第二就是引用計數(shù)算法可以最大限度的減少程序的暫停,應(yīng)用程序在執(zhí)行的過程當(dāng)中,必然會對內(nèi)存進行消耗。當(dāng)前執(zhí)行平臺的內(nèi)存肯定是有上限的,所以內(nèi)存肯定有占滿的時候。由于引用計數(shù)算法是時刻監(jiān)控著內(nèi)存引用值為0的對象,舉一個極端的情況就是,當(dāng)他發(fā)現(xiàn)內(nèi)存即將爆滿的時候,引用計數(shù)就會立馬找到那些數(shù)值為0的對象空間對其進行釋放。這樣就保證了當(dāng)前內(nèi)存是不會有占滿的時候,也就是所謂的減少程序暫停的說法。

引用計數(shù)的缺點同樣給出兩條說明。

第一個就是引用計數(shù)算法沒有辦法將那些循環(huán)引用的對象進行空間回收的。通過代碼片段演示一下,什么叫做循環(huán)引用的對象。

定義一個普通的函數(shù)fn在函數(shù)體的內(nèi)部定義兩個變量,對象obj1和obj2,讓obj1下面有一個name屬性然后指向obj2,讓obj2有一個屬性指向obj1。在函數(shù)最后的地方return返回一個普通字符,當(dāng)然這并沒有什么實際的意義只是做一個測試。接著在最外層調(diào)用一下函數(shù)。

function fn() {
    const obj1 = {};
    const obj2 = {};

    obj1.name = obj2;
    obj2.name = obj1;

    return 'yd is a coder';
}

那么接下來分析還是一樣的道理,函數(shù)在執(zhí)行結(jié)束以后,他內(nèi)部所在的空間肯定需要有涉及到空間回收的情況。比如說obj1和obj2,因為在全局的地方其實已經(jīng)不再去指向他了,所以這個時候他的引用計數(shù)應(yīng)該是為0的。

但是這個時候會有一個問題,在里邊會發(fā)現(xiàn),當(dāng)GC想要去把obj1刪除的時候,會發(fā)現(xiàn)obj2有一個屬性是指向obj1的。換句話講就是雖然按照之前的規(guī)則,全局的作用域下找不到obj1和obj2了,但是由于他們兩者之間在作用域范圍內(nèi)明顯還有著一個互相的指引關(guān)系。這種情況下他們身上的引用計數(shù)器數(shù)值并不是0,GC就沒有辦法將這兩個空間進行回收。也就造成了內(nèi)存空間的浪費,這就是所謂的對象之間的循環(huán)引用。這也是引用計數(shù)算法所面臨到的一個問題。

第二個問題就是引用計數(shù)算法所消耗的時間會更大一些,因為當(dāng)前的引用計數(shù),需要維護一個數(shù)值的變化,在這種情況下要時刻的監(jiān)控著當(dāng)前對象的引用數(shù)值是否需要修改。對象數(shù)值的修改需要消耗時間,如果說內(nèi)存里邊有更多的對象需要修改,時間就會顯得很大。所以相對于其他的GC算法會覺得引用計數(shù)算法的時間開銷會更大一些。

6. 標(biāo)記清除算法

相比引用計數(shù)而言標(biāo)記清除算法的原理更加簡單,而且還能解決一些相應(yīng)的問題。在V8中被大量的使用到。

標(biāo)記清除算法的核心思想就是將整個垃圾回收操作分成兩個階段,第一個階段遍歷所有對象然后找到活動對象進行標(biāo)記?;顒泳拖窀疤岬降目蛇_對象是一個道理,第二個階段仍然會遍歷所有的對象,把沒有標(biāo)記的對象進行清除。需要注意的是在第二個階段當(dāng)中也會把第一個階段設(shè)置的標(biāo)記抹掉,便于GC下次能夠正常工作。這樣一來就可以通過兩次遍歷行為把當(dāng)前垃圾空間進行回收,最終再交給相應(yīng)的空閑列表進行維護,后續(xù)的程序代碼就可以使用了。

這就是標(biāo)記清除算法的基本原理,其實就是兩個操作,第一是標(biāo)記,第二是清除。這里舉例說明。

首先在全局global聲明A,B,C三個可達對象,找到這三個可達對象之后,會發(fā)現(xiàn)他的下邊還會有一些子引用,這也就是標(biāo)記清除算法強大的地方。如果發(fā)現(xiàn)他的下邊有孩子,甚至孩子下邊還有孩子,這個時候他會用遞歸的方式繼續(xù)尋找那些可達的對象,比如說D,E分別是A和C的子引用,也會被標(biāo)記成可達的。

這里還有兩個變量a1和b1,他們在函數(shù)內(nèi)的局部作用域,局部作用域執(zhí)行完成以后這個空間就被回收了。所以從global鏈條下是找不到a1和b1的,這時候GC機制就會認(rèn)為他是一個垃圾對象,沒有給他做標(biāo)記,最終在GC工作的時候就會把他們回收掉。

const A = {};

function fn1() {
    const D = 1;
    A.D = D;
}

fn1();

const B;

const C = {};

function fn2() {
    const E = 2;
    A.E = E;
}

fn2();

function fn3() {
    const a1 = 3;
    const b1 = 4;
}

fn3();

這就是標(biāo)記清除所謂的標(biāo)記階段和清除階段,以及這兩個階段分別要做的事情。簡單的整理可以分成兩個步驟。在第一階段要找到所有可達對象,如果涉及到引用的層次關(guān)系,會遞歸進行查找。找完以后會將這些可達對象進行標(biāo)記。標(biāo)記完成以后進行第二階段開始做清除,找到那些沒有做標(biāo)記的對象,同時還將第一次所做的標(biāo)記清除掉。這樣就完成了一次垃圾回收,同時還要留意,最終會把回收的空間直接放在一個叫做空閑列表上面。方便后續(xù)的程序可以直接在這申請空間使用。

1. 標(biāo)記清除算法優(yōu)缺點

相對比引用計數(shù)而言標(biāo)記清除具有一個最大的優(yōu)點,就是可以解決對象循環(huán)引用的回收操作。在寫代碼的時候可能會在全局定義A、B、C這樣的可達對象,也會有一些函數(shù)的局部作用域,比如在函數(shù)內(nèi)定義了a1和b1,而且讓他們互相引用。

const A = {};

const B;

const C = {};

function fn() {
    const a1 = {};
    const b1 = {};
    a1.value = b1;
    b1.value = a1;
}

fn();

函數(shù)的調(diào)用在結(jié)束之后必然要去釋放他們內(nèi)部的空間,在這種情況下一旦當(dāng)某一個函數(shù)調(diào)用結(jié)束之后他局部空間中的變量就失去了與全局global作用域上的鏈接。這個時候a1和b1在global根下邊就沒辦法訪問到了,就是一個不可達的對象。不可達對象在做標(biāo)記階段的時候不能夠完成標(biāo)記,在第二個階段回收的時候就直接進行釋放了。

這是標(biāo)記清除可以做到的,但是在引用計數(shù)里面,函數(shù)調(diào)用結(jié)束同時也沒有辦法在全局進行訪問??墒怯捎诋?dāng)前判斷的標(biāo)準(zhǔn)是引用數(shù)字是否為0,在這種情況下,就沒有辦法釋放a1和b1空間,這就是標(biāo)記清除算法的最大優(yōu)點,當(dāng)然這是相對于引用計數(shù)算法而言的。

同時標(biāo)記清除算法也會有一些缺點。比如模擬一個內(nèi)存的存儲情況,從根進行查找,在下方有一個可達對象A對象, 左右兩側(cè)有一個從跟下無法直接查找的一個區(qū)域,B和C。這種情況下在進行第二輪清除操作的時候,就會直接將B和C所對應(yīng)的空間進行回收。然后把釋放的空間添加到空閑列表上,后續(xù)的程序可以直接從空閑列表上申請相應(yīng)的一個空間地址,進行使用。在這種情況下就會有一個問題。

function fn() {
    const B = '兩個';
}
fn();

const A = '四個文字';

function fn2() {
    const C = '一個';
}
fn2();

比如我們認(rèn)為,任何一個空間都會有兩部分組成,一個用來存儲空間一些元信息比如他的大小,地址,稱之為頭。還有一部分是專門用于存放數(shù)據(jù)的叫做域,B、C空間認(rèn)為B對象有2個字的空間,C對象有1個字的空間。這種情況下,雖然對他進行了回收,加起來好像是釋放了3個字的空間,但是由于它們中間被A對象去分割著。所以在釋放完成之后其實還是分散的也就是地址不連續(xù)。

這點很重要,后續(xù)想申請的空間地址大小剛好1.5個字。這種情況下,如果直接找到B釋放的空間會發(fā)現(xiàn)是多了的,因為還多了0.5個,如果直接去找C釋放的空間又發(fā)現(xiàn)不夠,因為是1個。所以這就帶來了標(biāo)記清除算法中最大的問題,空間的碎片化。

所謂的空間碎片化,就是由于當(dāng)前所回收的垃圾對象在地址上本身是不連續(xù)的,由于這種不連續(xù)從而造成了回收之后分散在各個角落,后續(xù)要想去使用的時候,如果新的生成空間剛好與他們的大小匹配,就能直接用。一旦是多了或是少了就不太適合使用了。

這就是標(biāo)記清除算法優(yōu)點和缺點,簡單的整理一下就是優(yōu)點是可以解決循環(huán)引用不能回收的問題,缺點是說會產(chǎn)生空間碎片化的問題,不能讓空間得到最大化的使用。

7. 標(biāo)記整理算法

在V8中標(biāo)記整理算法會被頻繁的使用到,下面來看一下是如何實現(xiàn)的。

首先認(rèn)為標(biāo)記整理算法是標(biāo)記清除的增強操作,他們在第一個階段是完全一樣的,都會去遍歷所有的對象,然后將可達活動對象進行標(biāo)記。第二階段清除時,標(biāo)記清除是直接將沒有標(biāo)記的垃圾對象做空間回收,標(biāo)記整理則會在清除之前先執(zhí)行整理操作,移動對象的位置,讓他們能夠在地址上產(chǎn)生連續(xù)。

假設(shè)回收之前有很多的活動對象和非活動對象,以及一些空閑的空間,當(dāng)執(zhí)行標(biāo)記操作的時候,會把所有的活動對象進行標(biāo)記,緊接著會進行整理的操作。整理其實就是位置上的改變,會把活動對象先進行移動,在地址上變得連續(xù)。緊接著會將活動對象右側(cè)的范圍進行整體的回收,這相對標(biāo)記清除算法來看好處是顯而易見的。

因為在內(nèi)存里不會大批量出現(xiàn)分散的小空間,從而回收到的空間都基本上都是連續(xù)的。這在后續(xù)的使用過程中,就可以盡可能的最大化利用所釋放出來的空間。這個過程就是標(biāo)記整理算法,會配合著標(biāo)記清除,在V8引擎中實現(xiàn)頻繁的GC操作。

8. 執(zhí)行時機

首先是引用計數(shù),他的可以及時回收垃圾對象,只要數(shù)值0的就會立即讓GC找到這片空間進行回收和釋放。正是由于這個特點的存在,引用計數(shù)可以最大限度的減少程序的卡頓,因為只要這個空間即將被占滿的時候,垃圾回收器就會進行工作,將內(nèi)存進行釋放,讓內(nèi)存空間總有一些可用的地方。

標(biāo)記清除不能立即回收垃圾對象,而且他去清除的時候當(dāng)前的程序其實是停止工作的。即便第一階段發(fā)現(xiàn)了垃圾,也要等到第二階段清除的時候才會回收掉。

標(biāo)記整理也不能立即回收垃圾對象。

9. V8引擎

眾所周知V8引擎是目前市面上最主流的JavaScript執(zhí)行引擎,日常所使用的chrome瀏覽器以及NodeJavaScript平臺都在采用這個引擎去執(zhí)行JavaScript代碼。對于這兩個平臺來看JavaScript之所以能高效的運轉(zhuǎn),也正是因為V8的存在。V8的速度之所以快,除了有一套優(yōu)秀的內(nèi)存管理機制之外,還有一個特點就是采用及時編譯。

之前很多的JavaScript引擎都需要將源代碼轉(zhuǎn)成字節(jié)碼才能執(zhí)行,而V8可以將源碼翻譯成直接執(zhí)行的機器碼。所以執(zhí)行速度是非??斓?。

V8還有一個比較大的特點就是他的內(nèi)存是有上限的,在64位操作系統(tǒng)下,上限是不超過1.5G,在32位的操作系統(tǒng)中數(shù)值是不超過800M。

為什么V8要采用這樣的做法呢,原因基本上可以從兩方面進行說明。

第一V8本身就是為了瀏覽器制造的,所以現(xiàn)有的內(nèi)存大小足夠使用了。再有V8內(nèi)部所實現(xiàn)的垃圾回收機制也決定了他采用這樣一個設(shè)置是非常合理的。因為官方做過一個測試,當(dāng)垃圾內(nèi)存達到1.5個G的時候,V8去采用增量標(biāo)記的算法進行垃圾回收只需要消耗50ms,采用非增量標(biāo)記的形式回收則需要1s。從用戶體驗的角度來說1s已經(jīng)算是很長的時間了,所以就以1.5G為界了。

1. 垃圾回收策略

在程序的使用過程中會用到很多的數(shù)據(jù),數(shù)據(jù)又可以分為原始的數(shù)據(jù)和對象類型的數(shù)據(jù)。基礎(chǔ)的原始數(shù)據(jù)都是由程序的語言自身來進行控制的。所以這里所提到的回收主要還是指的是存活在堆區(qū)里的對象數(shù)據(jù),因此這個過程是離不開內(nèi)存操作的。

V8采用的是分代回收的思想,把內(nèi)存空間按照一定的規(guī)則分成兩類,新生代存儲區(qū)和老生代存儲區(qū)。有了分類后,就會針對不同代采用最高效的GC算法,從而對不同的對象進行回收操作。這也就意味著V8回收會使用到很多的GC算法。

首先,分代回收算法肯定是要用到的,因為他必須要做分代。緊接著會用到空間的復(fù)制算法。除此以外還會用到標(biāo)記清除和標(biāo)記整理。最后為了去提高效率,又用到了標(biāo)記增量。

2. 回收新生代對象

首先是要說明一下V8內(nèi)部的內(nèi)存分配。因為他是基于分代的垃圾回收思想,所以在V8內(nèi)部是把內(nèi)存空間分成了兩個部分,可以理解成一個存儲區(qū)域被分成了左右兩個區(qū)域。左側(cè)的空間是專門用來存放新生代對象,右側(cè)專門存放老生代對象。新生代對象空間是有一定設(shè)置的,在64位操作系統(tǒng)中大小是32M,在32位的操作系統(tǒng)中是16M。

新生代對象其實指的就是存活時間較短的。比如說當(dāng)前代碼內(nèi)有個局部的作用域,作用域中的變量在執(zhí)行完成過后就要被回收,在其他地方比如全局也有一個變量,而全局的變量肯定要等到程序退出之后才會被回收。所以相對來說新生代就指的是那些存活時間比較短的那樣一些變量對象。

針對新生代對象回收所采用到的算法主要是復(fù)制算法和標(biāo)記整理算法,首先會將左側(cè)一部分小空間也分成兩個部分,叫做From和To,而且這兩個部分的大小是相等的,將From空間稱為使用狀態(tài),To空間叫做空閑狀態(tài)。有了這樣兩個空間之后代碼執(zhí)行的時候如果需要申請空間首先會將所有的變量對象都分配至From空間。也就是說在這個過程中To是空閑的,一旦From空間應(yīng)用到一定的程度之后,就要觸發(fā)GC操作。這個時候就會采用標(biāo)記整理對From空間進行標(biāo)記,找到活動對象,然后使用整理操作把他們的位置變得連續(xù),便于后續(xù)不會產(chǎn)生碎片化空間。

做完這些操作以后,將活動對象拷貝至To空間,也就意味著From空間中的活動對象有了一個備份,這時候就可以考慮回收了?;厥找卜浅:唵危恍枰袴rom空間完全釋放就可以了,這個過程也就完成了新生代對象的回收操作。

總結(jié)一下就是新生代對象的存儲區(qū)域被一分為二,而且是兩個等大的,在這兩個等大的空間中,起名From和To,當(dāng)前使用的是From,所有的對象聲明都會放在這個空間內(nèi)。觸發(fā)GC機制的時候會把活動對象全部找到進行整理,拷貝到To空間中??截愅瓿梢院笪覀冏孎rom和To進行空間交換(也就是名字的交換),原來的To就變成了From,原來的From就變成了To。這樣就算完成了空間的釋放和回收。

接下來針對過程的細(xì)節(jié)進行說明。首先在這個過程中肯定會想到的是,如果在拷貝時發(fā)現(xiàn)某一個變量對象所指的空間,在當(dāng)前的老生代對象里面也會出現(xiàn)。這個時候就會出現(xiàn)一個所謂的叫晉升的操作,就是將新生代的對象,移動至老生代進行存儲。

至于什么時候觸發(fā)晉升操作一般有兩個判斷標(biāo)準(zhǔn),第一個是如果新生代中的某些對象經(jīng)過一輪GC之后他還活著。這個時候就可以把他拷貝至老年代存儲區(qū),進行存儲。除此之外如果當(dāng)前拷貝的過程中,發(fā)現(xiàn)To空間的使用率超過了25%,這個時候也需要將這一次的活動對象都移動至老生代中存放。

為什么要選擇25%呢?其實也很容易想得通,因為將來進行回收操作的時候,最終是要把From空間和To空間進行交換的。也就是說以前的To會變成From,而以前的From要變成To,這就意味著To如果使用率達到了80%,最終變成活動對象的存儲空間后,新的對象好像存不進去了。簡單的說明就是To空間的使用率如果超過了一定的限制,將來變成使用狀態(tài)時,新進來的對象空間好像不那么夠用,所以會有這樣的限制。

簡單總結(jié)一下就是當(dāng)前內(nèi)存一分為二,一部分用來存儲新生代對象,至于什么是新生代對象可以認(rèn)為他的存活時間相對較短。然后可以去采用標(biāo)記整理的算法,對From空間進行活動對象的標(biāo)記和整理操作,接著把他們拷貝To空間。最后再置換一下兩個空間的狀態(tài),那此時也就完成了空間的釋放操作。

3. 回收老生代對象

老生代對象存放在內(nèi)存空間的右側(cè),在V8中同樣是有內(nèi)存大小的限制,在64位操作系統(tǒng)中大小是1.4G, 在32位操作系統(tǒng)中是700M。

老生代對象指的是存活時間較長的對象,例如之前所提到的在全局對象中存放的一些變量,或者是一些閉包里面放置的變量有可能也會存活很長的時間。針對老生代垃圾回收主要采用的是標(biāo)記清除,標(biāo)記整理和增量標(biāo)記三個算法。

使用時主要采用的是標(biāo)記清除算法完成垃圾空間的釋放和回收,標(biāo)記清除算法主要是找到老生代存儲區(qū)域中的所有活動對象進行標(biāo)記,然后直接釋放掉那些垃圾數(shù)據(jù)空間就可以了。顯而易見這個地方會存在一些空間碎片化的問題,不過雖然有這樣的問題但是V8的底層主要使用的還是標(biāo)記清除的算法。因為相對空間碎片來說他的提升速度是非常明顯的。

在什么情況下會使用到標(biāo)記整理算法呢?當(dāng)需要把新生代里的內(nèi)容向老生代中移動的時候,而且這個時間節(jié)點上老生代存儲區(qū)域的空間又不足以存放新生代存儲區(qū)移過來的對象。這種情況下就會觸發(fā)標(biāo)記整理,把之前的一些鎖片空間進行整理回收,讓程序有更多的空間可以使用。最后還會采用增量標(biāo)記的方式對回收的效率進行提升。

這里來對比一下新老生代垃圾回收。

新生代的垃圾回收更像是在用空間換時間,因為他采用的是復(fù)制算法,這也就意味著每時每刻他的內(nèi)部都會有一個空閑空間的存在。但是由于新生代存儲區(qū)本身的空間很小,所以分出來的空間更小,這部分的空間浪費相比帶來的時間上的一個提升當(dāng)然是微不足道的。

在老生代對象回收過程中為什么不去采用這種一分二位的做法呢?因為老生代存儲空間是比較大的,如果一分為二就有幾百兆的空間浪費,太奢侈了。第二就是老生代存儲區(qū)域中所存放的對象數(shù)據(jù)比較多,所以在賦值的過程中消耗的時間也就非常多,因此老生代的垃圾回收是不適合使用復(fù)制算法來實現(xiàn)的。

至于之前所提到的增量標(biāo)記算法是如何優(yōu)化垃圾回收操作的呢?首先分成兩個部分,一個是程序執(zhí)行,另一個是垃圾回收。

首先明確垃圾回收進行工作的時候是會阻塞當(dāng)前JavaScript程序執(zhí)行的,也就是會出現(xiàn)一個空檔期,例如程序執(zhí)行完成之后會停下來執(zhí)行垃圾回收操作。所謂的標(biāo)記增量簡單來講就是將整段的垃圾回收操作拆分成多個小步驟,組分片完成整個回收,替代之前一口氣做完的垃圾回收操作。

這樣做的好處主要是實現(xiàn)垃圾回收與程序執(zhí)行交替完成,帶來的時間消耗會更加的合理一些。避免像以前那樣程序執(zhí)行的時候不能做垃圾回收,程序做垃圾回收的時候不能繼續(xù)運行程序。

簡單的舉個例子說明一下增量標(biāo)記的實現(xiàn)原理。

程序首先運行的時候是不需要進行垃圾回收的,一旦當(dāng)他觸發(fā)了垃圾回收之后,無論采用的是何種算法,都會進行遍歷和標(biāo)記操作,這里針對的是老生代存儲區(qū)域,所以存在遍歷操作。在遍歷的過程中需要做標(biāo)記,標(biāo)記之前也提到過可以不一口氣做完,因為存在直接可達和間接可達操作,也就是說如果在做的時候,第一步先找到第一層的可達對象。然后就可以停下來,讓程序再去執(zhí)行一會。如果說程序執(zhí)行了一會以后,再繼續(xù)讓GC機做第二步的標(biāo)記操作,比如下面還有一些子元素也是可達的,那就繼續(xù)做標(biāo)記。標(biāo)記一輪之后再讓GC停下來,繼續(xù)回到程序執(zhí)行,也就是交替的去做標(biāo)記和程序執(zhí)行。

最后標(biāo)記操作完成以后再去完成垃圾回收,這段時間程序就要停下來,等到垃圾回收操作完成才會繼續(xù)執(zhí)行。雖然這樣看起來程序停頓了很多次,但是整個V8最大的垃圾回收也就是當(dāng)內(nèi)存達到1.5G的時候,采用非增量標(biāo)記的形式進行垃圾回收時間也不超過1s,所以這里程序的間斷是合理的。而且這樣一來最大限度的把以前很長的一段停頓時間直接拆分成了更小段,針對用戶體驗會顯得更加流程一些。

4. V8垃圾回收總結(jié)

首先要知道V8引擎是當(dāng)前主流的JavaScript執(zhí)行引擎,在V8的內(nèi)部內(nèi)存是設(shè)置上限的,這么做的原因是第一他本身是為瀏覽器而設(shè)置的,所以在web應(yīng)用中這樣的內(nèi)存大小是足夠使用的。第二就是由他內(nèi)部的垃圾回收機制來決定的,如果把內(nèi)存設(shè)置大一些這個時候回收時間最多可能就超過了用戶的感知,所以這里就設(shè)置了上限數(shù)值。

V8采用的是分代回收的思想,將內(nèi)存分成了新生代和老生代。關(guān)于新生代和老生代在空間和存儲數(shù)據(jù)類型是不同的。新生代如果在64位操作系統(tǒng)下空間是32M,32位的系統(tǒng)下就是16M。

V8對不同代對象采用的是不同的GC算法來完成垃圾回收操作,具體就是針對新生代采用復(fù)制算法和標(biāo)記整理算法,針對老生代對象主要采用標(biāo)記清除,標(biāo)記整理和增量標(biāo)記這樣三個算法。

10. Performance工具介紹

GC工作目的就是為了讓內(nèi)存空間在程序運行的過程中,出現(xiàn)良性的循環(huán)使用。所謂良性循環(huán)的基礎(chǔ)其實就是要求開發(fā)者在寫代碼的時候能夠?qū)?nèi)存空間進行合理的分配。但是由于ECMAScript中并沒有給程序員提供相應(yīng)的操作內(nèi)存空間的API,所以是否合理好像也不知道,因為他都是由GC自動完成的。

如果想判斷整個過程內(nèi)存使用是否合理,必須想辦法能夠時刻關(guān)注到內(nèi)存的變化。所以就有了這樣一款工具可以提供給開發(fā)者更多的監(jiān)控方式,在程序運行過程中幫助開發(fā)者完成對內(nèi)存空間的監(jiān)控。

通過使用Performance可以對程序運行過程內(nèi)存的變化實時的監(jiān)控。這樣就可以在程序的內(nèi)存出現(xiàn)問題的時候直接想辦法定位到出現(xiàn)問題的代碼快。下面來看一下Performance工具的基本使用步驟。

首先打開瀏覽器,在地址欄輸入網(wǎng)址。輸入完地址之后不建議立即進行訪問,因為想把最初的渲染過程記錄下來,所以只是打開界面輸入網(wǎng)址即可。緊接著打開開發(fā)人員工具面板(F12),選擇性能選項。開啟錄制功能,開啟之后就可以訪問目標(biāo)網(wǎng)址了。在這個頁面上進行一些操作,過一段時間后停止錄制。

就可以得到一個報告,在報告當(dāng)中就可以分析跟內(nèi)存相關(guān)的信息了。錄制后會有一些圖表的展示,信息也非常的多,看起來比較麻煩。這里主要關(guān)注與內(nèi)存相關(guān)的信息,有一個內(nèi)存的選項(Memory)。默認(rèn)情況下如果沒有勾選需要將它勾選。頁面上可以看到一個藍(lán)色的線條。屬于整個過程中我內(nèi)存所發(fā)生的變化,可以根據(jù)時序,來看有問題的地方。如果某個地方有問題可以具體觀察,比如有升有降就是沒問題的。

1. 內(nèi)存問題的體現(xiàn)

當(dāng)程序的內(nèi)存出現(xiàn)問題的時候,具體會表現(xiàn)出什么樣的形式。

首先第一條,界面如果出現(xiàn)了延遲加載或者說經(jīng)常性的暫停,首先限定一下網(wǎng)絡(luò)環(huán)境肯定是正常的,所以出現(xiàn)這種情況一般都會去判定內(nèi)存是有問題的,而且與GC存在著頻繁的垃圾回收操作是相關(guān)的。也就是代碼中肯定存在瞬間讓內(nèi)存爆炸的代碼。這樣的代碼是不合適的需要去進行定位。

第二個就是當(dāng)界面出現(xiàn)了持續(xù)性的糟糕性能表現(xiàn),也就是說在使用過程中,一直都不是特別的好用,這種情況底層一般會認(rèn)為存在著內(nèi)存膨脹。所謂的內(nèi)存膨脹指的就是,當(dāng)前界面為了達到最佳的使用速度,可能會申請一定的內(nèi)存空間,但是這個內(nèi)存空間的大小,遠(yuǎn)超過了當(dāng)前設(shè)備本身所能提供的大小,這個時候就會感知到一段持續(xù)性的糟糕性能的體驗,同樣肯定是假設(shè)當(dāng)前網(wǎng)絡(luò)環(huán)境是正常的。

最后,當(dāng)使用一些界面的時候,如果感知到界面的使用流暢度,隨著時間的加長越來越慢,或者說越來越差,這個過程就伴隨著內(nèi)存泄露,因為在這種情況下剛開始的時候是沒有問題的,由于我們某些代碼的出現(xiàn),可能隨著時間的增長讓內(nèi)存空間越來越少,這也就是所謂的內(nèi)存泄漏,因此,出現(xiàn)這種情況的時候界面會隨著使用時間的增長表現(xiàn)出性能越來越差的現(xiàn)象。

這就是關(guān)于應(yīng)用程序在執(zhí)行過程中如果遇到了內(nèi)存出現(xiàn)問題的情況,具體的體現(xiàn)可以結(jié)合Performance進行內(nèi)存分析操作,從而定位到有問題的代碼,修改之后讓應(yīng)用程序在執(zhí)行的過程中顯得更加流暢。

2. 監(jiān)控內(nèi)存的幾種方式

內(nèi)存出現(xiàn)的問題一般歸納為三種:內(nèi)存泄露,內(nèi)存膨脹,頻繁的垃圾回收。當(dāng)這些內(nèi)容出現(xiàn)的時候,該以什么樣的標(biāo)準(zhǔn)來進行界定呢?

內(nèi)存泄露其實就是內(nèi)存持續(xù)升高,這個很好判斷,當(dāng)前已經(jīng)有很多種方式可以獲取到應(yīng)用程序執(zhí)行過程中內(nèi)存的走勢圖。如果發(fā)現(xiàn)內(nèi)存一直持續(xù)升高的,整個過程沒有下降的節(jié)點,這也就意味著程序代碼中是存在內(nèi)存泄露的。這個時候應(yīng)該去代碼里面定位相應(yīng)的模塊。

內(nèi)存膨脹相對的模糊,內(nèi)存膨脹的本意指的是應(yīng)用程序本身,為了達到最優(yōu)的效果,需要很大的內(nèi)存空間,在這個過程中也許是由于當(dāng)前設(shè)備本身的硬件不支持,才造成了使用過程中出現(xiàn)了一些性能上的差異。想要判定是程序問題還是設(shè)備問題,應(yīng)該多做一些測試。這個時候可以找到那些深受用戶喜愛的設(shè)備,在他們上面運行應(yīng)用程序,如果整個過程中所有的設(shè)備都表現(xiàn)出了很糟糕的性能體驗。這就說明程序本身是有問題的,而不是設(shè)備有問題。這種情況就需要回到代碼里面,定位到內(nèi)存出現(xiàn)問題的地方。

具體有哪些方式來監(jiān)控內(nèi)存的變化,主要還是采用瀏覽器所提供的一些工具。

瀏覽器所帶的任務(wù)管理器,可以直接以數(shù)值的方式將當(dāng)前應(yīng)用程序在執(zhí)行過程中內(nèi)存的變化體現(xiàn)出來。第二個是借助于Timeline時序圖,直接把應(yīng)用程序執(zhí)行過程中所有內(nèi)存的走勢以時間點的方式呈現(xiàn)出來,有了這張圖就可以很容易的做判斷了。再有瀏覽器中還會有一個叫做堆快照的功能,可以很有針對性的查找界面對象中是否存在一些分離的DOM,因為分離DOM的存在也就是一種內(nèi)存上的泄露。

至于怎樣判斷界面是否存在著頻繁的垃圾回收,這就需要借助于不同的工具來獲取當(dāng)前內(nèi)存的走勢圖,然后進行一個時間段的分析,從而得出判斷。

3. 任務(wù)管理器監(jiān)控內(nèi)存

一個web應(yīng)用在執(zhí)行的過程中,如果想要觀察他內(nèi)部的一個內(nèi)存變化,是可以有多種方式的,這里通過一段簡單的demo來演示一下,可以借助瀏覽器中自帶的任務(wù)管理器監(jiān)控腳本運行時內(nèi)存的變化。

在界面中放置一個元素,添加一個點擊事件,事件觸發(fā)的時候創(chuàng)建一個長度非常長的一個數(shù)組。這樣就會產(chǎn)生內(nèi)存空間上的消耗。

<body>
    <button id="btn">add</button>
    <script>
        const oBtn = document.getElementById('btn');
        oBtn.onclick = function() {
            let arrList = new Array(1000000)
        }
    </script>
</body>

完成之后打開瀏覽器運行,在右上角的更多中找到更多工具找到任務(wù)管理器打開。

這個時候就可以在任務(wù)管理器中定位到當(dāng)前正在執(zhí)行的腳本,默認(rèn)情況下是沒有JavaScript內(nèi)存列的,如果需要可以直接右擊找到JavaScript內(nèi)存展示出來。這里最關(guān)注的是內(nèi)存和JavaScript內(nèi)存這兩列。

第一列內(nèi)存表示的是原生內(nèi)存,也就是當(dāng)前界面會有很多DOM節(jié)點,這個內(nèi)存指的就是DOM節(jié)點所占據(jù)的內(nèi)存,如果這個數(shù)值在持續(xù)的增大,就說明界面中在不斷的創(chuàng)建DOM元素。

JavaScript內(nèi)存表示的是JavaScript的堆,在這列當(dāng)中需要關(guān)注的是小括號里面的值,表示的是界面中所有可達對象正在使用的內(nèi)存大小,如果這個數(shù)值一直在增大,就意味著當(dāng)前的界面中要么在創(chuàng)建新對象,要么就是現(xiàn)有對象在不斷的增長。

以這個界面為例,可以發(fā)現(xiàn)小括號的值一直是個穩(wěn)定的數(shù)字沒有發(fā)生變化,也就意味著當(dāng)前頁面是沒有內(nèi)存增長的。此時可以再去觸發(fā)一下click事件(點擊按鈕),多點幾次,完成以后就發(fā)現(xiàn)小括號里面的數(shù)值變大了。

通過這樣的過程就可以借助當(dāng)前的瀏覽器任務(wù)管理器來監(jiān)控腳本運行時整個內(nèi)存的變化。如果當(dāng)前JavaScript內(nèi)存列小括號里面的數(shù)值一直增大那就意味著內(nèi)存是有問題的,當(dāng)然這個工具是沒有辦法定位的,他只能發(fā)現(xiàn)問題,無法定位問題。

4. TimeLine記錄內(nèi)容

在之前已經(jīng)可以使用瀏覽器自帶的任務(wù)管理器對腳本執(zhí)行中內(nèi)存的變化去進行監(jiān)控,但是在使用的過程中可以發(fā)現(xiàn),這樣的操作更多的是用于判斷當(dāng)前腳本的內(nèi)存是否存在問題。如果想要定位問題具體和什么樣的腳本有關(guān),任務(wù)管理器就不是那么好用了。

這里再介紹一個通過時間線記錄內(nèi)存變化的方式來演示一下怎樣更精確的定位到內(nèi)存的問題跟哪一塊代碼相關(guān),或者在什么時間節(jié)點上發(fā)生的。

首先放置一個DOM節(jié)點,添加點擊事件,在事件中創(chuàng)建大量的DOM節(jié)點來模擬內(nèi)存消耗,再通過數(shù)組的方式配合著其他的方法形成一個非常長的字符串,模擬大量的內(nèi)存消耗。

<body>
    <button id="btn">add</button>
    <script>
        const oBtn = document.getElementById('btn');

        const arrList = [];

        function test () {
            for (let i = 0; i < 100000; i++) {
                document.body.appendChild(document.createElement('p'))
            }
            arrList.push(new Array(1000000).join('x'))
        }
        oBtn.onclick = test;
    </script>
</body>

先打開瀏覽器的控制臺工具,選擇性能面板,默認(rèn)是沒有運行的,也就是沒有記錄,需要先點擊計時操作。點完以后就開始錄制了,點擊幾次add按鈕,稍等幾秒后,點擊停止按鈕。完成以后就生成了一個圖表,密密麻麻的東西看起來可能會有些頭疼,只關(guān)注下想要看到的信息就可以了。

內(nèi)存如果沒有勾選的話是不會監(jiān)控內(nèi)存變化的,需要先勾選內(nèi)存,勾選之后頁面上就出現(xiàn)了內(nèi)存的走勢曲線圖。里面會包含很多信息,給出來了幾中顏色的解釋。藍(lán)色的是JavaScript堆,紅色表示當(dāng)前的文檔,綠色是DOM節(jié)點,棕色是監(jiān)聽器,紫色是CPU內(nèi)存。

為了便于觀察可以只保留JavaScript堆,其他的取消勾選隱藏掉。可以看到這個腳本運行過程中到目前為止他的JavaScript堆的情況走勢。當(dāng)前這個工具叫時序圖,也就是在第一欄,以毫秒為單位,記錄了整個頁面從空白到渲染結(jié)束到最終停狀態(tài),這個過程中整個界面的變化。如果愿意,可以點進去看一下當(dāng)前的界面形態(tài),如果只是關(guān)注內(nèi)存,只看內(nèi)存的曲線圖就可以了。

當(dāng)這個頁面最開始打開的時候其實很長一段時間都是平穩(wěn)的狀態(tài),沒有太多的內(nèi)存消耗。原因在根本沒有點擊add。然后緊接著在某一個時間點上突然之間內(nèi)存就上去了,上去之后是一段平穩(wěn)的狀態(tài),這是因為點擊了add之后這里的內(nèi)存肯定是瞬間暴漲的,然后緊接著暴漲之后我們?nèi)魏尾僮鳎赃@時候肯定是平穩(wěn)。

然后緊接著平穩(wěn)之后又下降了,這就是之前所提到的,瀏覽器本身也是具有垃圾回收機制的,當(dāng)?shù)哪_本運行穩(wěn)定之后,GC可能在某個時間點上就開始工作了,會發(fā)現(xiàn)有一些對象是非活動的,就開始進行回收,所以一段平穩(wěn)之后就降下去了。降下去之后又會有一些小的浮動,屬于正常的活動開銷。后來又有幾次連續(xù)的點擊,這個連續(xù)的點擊行為可能又造成內(nèi)存的飆升,然后不操作之后又往下降。

通過這樣一張內(nèi)存走勢圖,可以得出的結(jié)論是,腳本里面內(nèi)存是非常穩(wěn)定的,整個過程有漲有降,漲是申請內(nèi)存,降是用完之后我GC在正常的回收內(nèi)存。

一旦看到內(nèi)存的走勢是直線向上走,也就意味著他只有增長而沒有回收,必然存在著內(nèi)存消耗,更有可能是內(nèi)存泄漏。可以通過上面的時序圖定位問題,當(dāng)發(fā)現(xiàn)某一個節(jié)點上有問題的時候,可以直接在這里面定位到那個時間節(jié)點,可以在時序圖上進行拖動查看每一個時間節(jié)點上的內(nèi)存消耗。還可以看到界面上的變化,就可以配合著定位到是哪一塊產(chǎn)生了這樣一個內(nèi)存的問題。

所以相對任務(wù)管理器來說會更好用,不但可以看當(dāng)前內(nèi)存是否有問題,還可以幫助定位問題在哪個時候發(fā)生的,然后再配合當(dāng)前的界面展示知道做了什么樣的操作才出現(xiàn)了這個問題,從而間接地可以回到代碼中定位有問題的代碼塊。

5. 堆快照查找分離DOM

這里簡單說明一下堆快照功能工作的原理,首先他相當(dāng)于找到JavaScript堆,然后對它進行照片的留存。有了照片以后就可以看到它里面的所有信息,這也就是監(jiān)控的由來。堆快照在使用的時候非常的有用,因為他更像是針對分離DOM的查找行為。

界面上看到的很多元素其實都是DOM節(jié)點,而這些DOM節(jié)點本應(yīng)該存在于一顆存活的DOM樹上。不過DOM節(jié)點會有幾種形態(tài),一種是垃圾對象,一種是分離DOM。簡單的說就是如果這個節(jié)點從DOM樹上進行了脫離,而且在JavaScript代碼當(dāng)中沒有再引用的DOM節(jié)點,他就成為了一個垃圾。如果DOM節(jié)點只是從DOM樹上脫離了,但是在JavaScript代碼中還有引用,就是分離DOM。分離DOM在界面上是看不見的,但是在內(nèi)存中是占據(jù)著空間的。

這種情況就是一種內(nèi)存泄露,可以通過堆快照的功能把他們找出來,只要能找得到,就可以回到代碼里,針對這些代碼進行清除從而讓內(nèi)存得到一些釋放,腳本在執(zhí)行的時候也會變得更加迅速。

在html里面放入btn按鈕,添加點擊事件,點擊按鈕的時候,通過JavaScript語句去模擬相應(yīng)的內(nèi)存變化,比如創(chuàng)建DOM節(jié)點,為了看到更多類型的分離DOM,采用ul包裹li的DOM節(jié)點創(chuàng)建。先在函數(shù)中創(chuàng)建ul節(jié)點,然后使用循環(huán)的方式創(chuàng)建多個li放在ul里面,創(chuàng)建之后不需要放在頁面上,為了讓代碼引用到這個DOM使用變量tmpEle指向ul。

<body>
    <button id="btn">add</button>
    <script>
        const oBtn = document.getElementById('btn');

        var tmpEle;

        function fn () {
            var ul = document.createElement('ul');
            for (var i = 0; i < 10; i++) {
                var li = document.createElement('li');
                ul.appendChild(li);
            }
            tmpEle = ul;
        }

        oBtn.addEventListener('click', fn);

    </script>
</body>

簡單說明就是創(chuàng)建了ul和li節(jié)點,但是并沒有將他們放在頁面中,只是通過JavaScript變量引用了這個節(jié)點,這就是分離DOM。

打開瀏覽器調(diào)試工具,選中內(nèi)存面板。進入以后可以發(fā)現(xiàn)堆快照的選項。這里做兩個行為的測試,第一個是在沒有點擊按鈕的情況下,直接獲取當(dāng)前的快照,在這個快照里面就是當(dāng)前對象的具體展示,這里有一個篩選的操作,直接檢索deta關(guān)鍵字,可以發(fā)現(xiàn)沒有內(nèi)容。

回到界面中做另外一個操作,對按鈕進行點擊,點完以后我再拍攝一張快照(點擊左側(cè)的配置文件文字,出現(xiàn)拍照界面),還是做和之前一樣的操作檢索deta。

這次就會發(fā)現(xiàn),快照2里面搜索到了,很明顯這幾個就是代碼中所創(chuàng)建的DOM節(jié)點,并沒有添加到界面中,但是他的確存在于堆中。這其實就是一種空間上的浪費,針對這樣的問題在代碼中對使用過后的DOM節(jié)點進行清空就可以了。

function fn () {
    var ul = document.createElement('ul');
    for (var i = 0; i < 10; i++) {
        var li = document.createElement('li');
        ul.appendChild(li);
    }
    tmpEle = ul;
    // 清空DOM
    ul = null;
}

在這里我們簡單的總結(jié)就是,我們可以利用瀏覽器當(dāng)中提供的一個叫做堆快照的功能,然后去把我們當(dāng)前的堆進行拍照,拍照過后我們要找一下這里面是否存在所謂的分離DOM。

因為分離DOM在頁面中不體現(xiàn),在內(nèi)存中的確存在,所以這個時候他是一種內(nèi)存的浪費,那么我們要做的就是定位到我們代碼里面那些個分離DOM所在的位置,然后去想辦法把他給清除掉。

6. 判斷是否存在頻繁GC

這里說一下如何確定當(dāng)前web應(yīng)用在執(zhí)行過程中是否存在著頻繁的垃圾回收。當(dāng)GC去工作的時候應(yīng)用程序是停止的。所以GC頻繁的工作對web應(yīng)用很不友好,因為會處于死的狀態(tài),用戶會感覺到卡頓。

這個時候就要想辦法確定當(dāng)前的應(yīng)用在執(zhí)行時是否存在頻繁的垃圾回收。

這里給出兩種方式,第一種是可以通過timeline時序圖的走勢來判斷,在性能工具面板中對當(dāng)前的內(nèi)存走勢進行監(jiān)控。如果發(fā)現(xiàn)藍(lán)色的走勢條頻繁的上升下降。就意味著在頻繁的進行垃圾回收。出現(xiàn)這樣的情況之后必須定位到相應(yīng)的時間節(jié)點,然后看一下具體做了什么樣的操作,才造成這樣現(xiàn)象的產(chǎn)生,接著在代碼中進行處理就可以了。

任務(wù)管理器在做判斷的時候會顯得更加簡單一些,因為他就是一個數(shù)值的變化,正常當(dāng)界面渲染完成之后,如果沒有其他額外的操作,那么無論是DOM節(jié)點內(nèi)存,還是我們JavaScript內(nèi)存,都是一個不變化的數(shù)值,或者變化很小。如果這里存在頻繁的GC操作時,這個數(shù)值的變化就是瞬間增大,瞬間減小,這樣的節(jié)奏,所以看到這樣的過程也意味著代碼存在頻繁的垃圾回收操作。

頻繁的垃圾回收操作表象上帶來的影響是讓用戶覺得應(yīng)用在使用的時候非??D,從內(nèi)部看就是當(dāng)前代碼中存在對內(nèi)存操作不當(dāng)?shù)男袨樽孏C不斷的工作,來回收釋放相應(yīng)的空間。

總結(jié)


這篇關(guān)于“如何讀懂JS垃圾回收機制,知識點有哪些”的文章就介紹到這了,更多相關(guān)的內(nèi)容,歡迎關(guān)注群英網(wǎng)絡(luò),小編將為大家輸出更多高質(zhì)量的實用文章! 群英智防CDN,智能加速解決方案
標(biāo)簽: js垃圾回收機制

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:[email protected]進行舉報,并提供相關(guān)證據(jù),查實之后,將立刻刪除涉嫌侵權(quán)內(nèi)容。

猜你喜歡

成為群英會員,開啟智能安全云計算之旅

立即注冊
專業(yè)資深工程師駐守
7X24小時快速響應(yīng)
一站式無憂技術(shù)支持
免費備案服務(wù)
免費撥打  400-678-4567
免費撥打  400-678-4567 免費撥打 400-678-4567 或 0668-2555555
在線客服
微信公眾號
返回頂部
返回頂部 返回頂部
在線客服
在線客服
食色app黄免费下载 | 草莓草莓视频在线下 | 无码成人免费全部观看 | 久久夜色精品国产噜噜亚洲a∨ | 奇米影视四色在线 | 五月天色婷婷影院久久久 | 亚洲一区不卡在线 | 男女床上激情四射视频 | 亚洲午夜精品是一款非常热门的直播平台 | 欧美日韩一区久久午夜精选 | 日本一级A片中文字幕视频 | 日本国模视频在线观看播放 | 日韩在线观看中文字幕一区二区 | 日韩中文字幕在线免费 | 精品动态视频剧情在线播放 | 亚洲欧美综合99国产精品一区在线 | 久久久精品国产亚洲精品热6 | 欧美第一在线播放 | 国产精品所毛片视频 | 法国2024久久精品无码 | 人与嘼AV免费3D | 水蜜桃app带你飞 | 深夜污污污免费视频福利 | 暖暖在线观看免费完整版 | 国内自拍网站在线播放 | 日本在线婷婷视频 | 色蜜蜜国产在线观看 | 日韩一级一在线观看视频 | 精品无人乱码区1区2区3区 | 欧美亚洲另类精品第一页 | 在线观看亚洲avav免费免费 | 亚洲欧美日韩久久久另类精品 | 99人妻少妇精品无码 | 精品一区精品国产 | 成人國產一區二區三區精品不卡 | 亚洲AV无码一区二区写真 | 亚洲一成av人先乱码午夜 | 婷婷激情六月国产精品久久 | 亚洲制服中文字幕第一区 | 最近2019免费中文字幕6 | 国产毛片农村妇女系列 | 妖精网站免费 | 国产真实自在自线免费精品 | 国产精品啪啪一区二区三区 | 亚洲视频在线亚洲观看 | 2020亚洲精品极品色在线 | 最近2019年中文字幕大全 | 日韩免va无码中文字幕 | 免费无遮挡18禁网站 | 日韩亚洲欧美中文字幕第六页 | 国产精品日批视频免费观看 | 中日免费视频在线观看 | 在线观看亚洲精品一区二区 | 野花视频在线观看最新视频观看 | 午夜成人在线观看福利 | 日本你懂得的在线视频网站 | 亚洲一区二区三区无码久久欲色 | 亚洲av永久无码精品一百度 | 久久国产亚洲精品88 | 欧插网欧美美女性爱片 | 亚洲无线观看国产精品 | 亚洲区和欧洲区一二 | 国产午夜精品久久精品电影片 | 久久精品视频五区 | 超碰超碰人人澡人人添 | 歐美在線觀看日韓歐美在線觀看 | 奇米网777久久综合网欧美 | 久久久精品国产亚洲精品热6 | 芒果视频 污 app 国产 | А√天堂中文最新版在线8 | 91国语对白国产刺激综合 | 91水蜜桃在线观看视频 | 国产亚洲精品成人小说 | 亚洲色大18成人网站WWW在线播放 | 亚洲日韩伦理中文字幕在线观看 | 国产精品一二二区在线 | 精品日韩欧美一区二区三区四区 | 久久成人无码一区二区 | 2019色久综合在线观看 | 一级a在线观看亚洲 | 茄子视频网站在线观看 | 在线国产不卡 | 国产大片在线观看亚洲 | 免费人成在线观看网站视频 | 国产成人熟女av一区二区 | 人人超碰人人 | 久久久久亚洲AV成人片少妇 | 国模极品一区二区 | 欧美99久久精品乱码影视 | 日韩精品永久免费视频 | 一个人免费观看的www在线观看 | 亚洲成AV人片一区二区小说 | 国产最火爆国产一级免费网站 | 日韩不卡在线高清视频 | 免费的成人网站无码 | 久草最新视频免费在线观看 | 欧美精品www久久久久久 | 中文字幕中日韩欧美一区 | china末成年videos强行 | 日韩超清无码中文字幕 | 久99视频精品永久免费 | 中文字幕亚洲二区婷婷 | 免费人成在线观看网站视频 | 亚洲aⅤ最新在线观看网址 | 字幕网资源yellow在线观看 | 亚洲综合av一二三不卡 | 国产真实自在自线免费精品 | 99re视频综合在线播放 | 电影午夜日韩国产污 | 国产成人熟女av一区二区 | 在线天天看片视频免费观看m | 最新国产国产人免费视频视频 | 午夜一级淫片免费看 | h羞羞涩涩动漫在线观看 | 亚洲aⅴ天堂av在线观看 | 久久99精品久久噜噜6 | 99热这里只有是精品在线观看 | 忘忧草在线影院WWW神马 | 爆乳喷水高潮视频 | 国内自拍少妇小视频免费 | 五月丁香在线观看视频 | 亚洲欧美清纯另类在线观看 | 免费人成在线观看播放国产 | 精品国产另类一区二区 | 国产激情巨作麻豆高潮 | 久久久久亚洲AV无码首页 | 深夜成人福利APP | 正在播放怡春院国产在线视频 | 欧美精品一级高清手机在线 | 久久露脸国产精品探花牛仔裤 | 国产成人精品日本亚洲语音2 | 日韩av中文字幕在线观看不卡 | 中文字幕在线观看不卡国产 | 嗯啊也色在线视频 | 啪一啪日韩在线视频免费 | 美国一区二区毛片在线看 | 91免费看`日韩一区二区亚洲国产 | 97se亚洲综合色区美女 | 中文字幕乱码日韩欧美 | 国产一区丝袜高跟在线i91传媒 | 美国一级特a黄久久精品 | 中文字幕在线不卡视频蜜乳 | 亚洲女同熟女一区二区三区 | 呦呦精品在线观看 | 天堂网在线最新版www资源 | 亚洲av噜噜狠狠麻豆 | 香蕉免费永久精品视频尤物 | 成人夜视频在线观看免费 | asS亚洲肉体欣赏piCS | 日韩av五月天在线播放 | 积积对积积桶永久免费软件 | 97亚洲一区二区三区 | 3d动漫h在线观看网站蜜芽 | 亚洲精品国产性色xxxx | av在线在线一卡 | 久久丝袜国产视频 | 在线 亚洲 福利 | 欧美亚洲无码中文字幕 | chinese熟女老女人hd视频 | 亚洲欧洲日产国产综合网 | 日韩亚洲欧美精品 | 激情视频在线观看免费观看 | 欧美黑硬粗在线观看视频 | 办公室丝袜激情无码播放 | 亚洲AV综合AⅤ一区二区三区 | 精品中文欧美少妇 | 2020日本www网站不卡 | 免费成年人视频国产 | 久久久香港免费视频 | 成人夜视频在线观看免费 | 高清少妇久久亚洲 | 日本岛国一区二区 | 国产熟女高潮久久麻豆 | 亚洲欧洲综合影院 | 亚洲午夜精品是一款非常热门的直播平台 | 久久亚洲伊人中字综合精品制服丝袜久久 | 国产欧美精品久久久久久TV | 国产无套粉嫩在线观看 | 中文字幕 韩国三级 麻豆 | 亚洲AV综合AⅤ一区二区三区 | 伊人直播色版app官网版安卓下载 | 五月天无码观看 | 九九国产精品02 | 99re视频免费一区 | 自偷精品精品国产日韩 | 国产蜜芽香蕉精品久久 | 探花视频手机APP无限次数下载 | 国产又粗又大又猛又爽又黄的视频 | 国产av深夜福利十八禁专区 | 亚洲国产原创av在线播放 | 漂亮人妻被黑人侮辱 | 国产成人综合欧美亚洲小说 | 国产欧美日产一区二区三区电影 | 24小时日本在线视频资源 | 亚洲第一日韩AV综合网 | 免费两性的视频网站国产 | 久久露脸国产精品探花牛仔裤 | 在线中文字幕一区二区精品区 | (愛妃)精品国产福利片在线观看 | 亚洲精品中文字幕乱码4区 | 国产成人精品1024在线观看 | 国产色综合久久伊人 | 亚洲日韩中文无码制服 | 西西人体444WWW高清大但 | 成人免费在线视频观看 | 在线国产不卡 | 國產成+人歐美+綜合在線觀看 | 欧美卡一卡二卡三卡四卡100 | 亞洲歐美日韓一區高清中文字幕 | 午夜成人性刺激免费视频在线观看 | 大胆欧美熟妇xxxx | 免费国产调教视频在线观看 | 69堂最新啪啪网址 | 最新国产福利片在线 | 欧美亚洲婷婷国产综合久久 | 字幕网资源yellow在线观看 | 又长又粗又大又硬起来了 | 国产高清亚洲精品91 | 99久久精品国产99久久6 | 亚洲av中字免费在线观看 | 国产国语刺激对白毛片 | 成年人在线视频网站 | h小视频在线观看网 | 无码专区视频精品老司机 | 尤物视频免费进站入 | 两个人免费完整在线观看直播 | 精品一区二区三区亚洲A∨ | 国产国语刺激对白毛片 | 成人免费网站又大又黄又粗 | 免费人成视频在线播放视频 | 奇米网777久久综合网欧美 | 欧美专区在线播放18禁 | 国产精品亚洲天堂123 | 泰国一级淫片泰国高清 | 亚洲精品色婷婷久久999 | 亚洲第一AV片在线观看 | 国产性行为视频在线观看 | 久久亚洲伊人中字综合精品制服丝袜久久 | 免费看二级黄色录像 | 亚洲欧美人成电影在线观看 | 欧美国产中文动漫日韩欧美在线 | 2020亚洲欧美日韩在线国产精品 | 91在线午夜宅福利100 | 亚洲AV成人永久网站www在线 | 日本一区二区三区一级片 | 日韩激情中文字幕免费视频 | 在线观看日本一二区 | 东北熟女脏话对白 | 日韩不卡av中文字幕 | 好男人视频在线观看免费 | 老女人在线精品视频免费 | 日韩综合不卡视频 | 欧美日韩在线一区的在线直播平台 | 色综合久久久久综合一小说 | 韩国av双飞在线观看 | 久久伊人五月天 | 俄罗斯一级成人毛片 | 99RE免费99RE在线视频 | 少妇精品在线观看免费 | 乱码卡一卡二新区欧美 | 欧美日本高清不卡 | 中文字幕一区二区无码专区 | 91丝袜在线视频 | 亚洲91精品麻豆国产系列在线 | 亚洲精品人成久久久久 | 青柠视频手机在线高清观看 | 视频图片小说一区二区三区 | 无码动漫第一 | 在线看亚洲十八禁APP | 久久精品国产在热亚洲完整版 | 一级黄aaa天天干用力干 | 亚洲一区不卡在线导航 | 欧美日韩性感尤物在线 | 欧美巨大性爽欧美精品 | 4399电影免费观看 | 午夜婷婷亚洲狠狠一区二区三区 | 一个人免费观看的www视频 | 国产精品未满十八禁止在线观看 | 国产z0zo人禽交视频快速播放 | 精品成人免費自拍視頻 | 免费的av少妇网站 | 国产电影白丝袜在线观看 | 欧美无砖2021芒果视频 | 中文字幕一区二区三区无码专区 | 亚洲无码久久精品日韩无码专区 | 影音先锋成人精品AV在线 | 午夜精品久久久久久影视麻豆 | 午夜福利久久精品在线观看 | av在线在线一卡 | 亚洲欧洲综合影院 | 日韩综合av一区二区三区 | 日韩免费av一区二区 | 狠狠狠色丁香婷婷综合久久五月 | 中文字幕精品一二区 | 日本高清2018色视频日本轻视 | 操美熟妇大片一二三区 | 久草最新视频免费在线观看 | 国产精品免费大片久久久国产一区二区三区 | 大片正片在线播放 | xxx视频在线观看 | 日韩免费成人在线 | 在线播放一区欧美伊人久久综合一区二区 | 瑟瑟视频在线免费观看 | 乱码中文字幕一区二区三区 | 亚洲天堂在线不卡 | 亚洲影院午夜在线观看 | 在线免费播放一区日本专区 | 国产z0zo人禽交视频快速播放 | 又爽亚洲成人在线观看精品国产 | 乱码中文字幕一区二区三区 | 男生女生一起相差差差30轮滑鞋APP | 2020亚洲精品极品色在线 | 迅雷种子+av无码 | 国产在线观看福利精品 | 亚洲午夜久久久影院伊人 | 亚洲一区二区三区香蕉在线观看 | 影音先锋在线资源中文字幕 | 亚洲成人中文综合精品在线 | 菠萝蜜app污视频 | 99热55这里只有精品 | 久草手机在线观看视频 | 欧亚不卡毛片在线观看 | 久久男人中文字幕资源站 | 日韩无码精品中文字幕 | 亚洲影视第一页国产精品 | 午夜福利久久精品在线观看 | 超碰超碰人人澡人人添 | 久久这里只有精品16 | 扑克牌生产视频又疼又叫的网站 | 一级黄aaa天天干用力干 | 国产日韩欧美精品影片 | 国产精品第75页 | 日韩欧美tv一区二区 | 国产成人精品自在拍在线观看 | 欧洲性开放少妇 | 日本天堂视频在线播放 | 56影院爱爱动态图高清网站 | 忘忧草在线影院WWW神马 | 色AV综合AV无码AⅤ老妇人 | 亚洲无线观看国产精品 | 中文字幕中日韩欧美一区 | 日本精品激情乱一区二区 | 亚洲中文字幕av免费电影 | 菠萝蜜在线视频 | 亚洲日本欧美天堂在线手机版 | 欧美系列精品亚洲v在线观看 | 强奷乱码中文字幕在线 | 日韩国产在线一区二区 | 美女裸体视频一区二区播放国产欧美一区二区精品性色一 | 一级a做片 日韩理论片 | 亚洲AV成人噜噜无码网站男男 | 久久精品视频五区 | china末成年videos强行 | 日本精品激情乱一区二区 | 日语一本二本三本免费2021 | 国产精品成人ãv一区二区色综合 | 国产免费丝袜阿V视频 | 开心激情五月天久久网 | 国产精品未满十八禁止在线观看 | 国产亚洲欧美日韩成人观看 | 午夜福利夫妻电影 | 久久婷婷五月综合中文字幕 | 亚洲A无码精品一区二区三区 | 国产午夜精品电影在线看 | 91久久综合一区二区三区桃色 | AV熟女国产一区二区三区 | 成人综合国内精品久久久久久影院 | 國產午夜久久精品 | 四虎最新在线免费观看 | 亚洲国产精品久久人人爱 | 在线观看激情欧美 | 中文无码五月天日 | 久久国产精品制服丝袜日韩 | 久久精品国产亚洲Äv日韩精品 | 在线看中文字幕日本 | 尤物视频免费进站入 | 榴莲视频app在线下载 | 字幕网资源yellow在线观看 | 动漫美女被爆操久久久 | 美女全身赤裸裸免费网站 | 男生女生一起相差差差30轮滑鞋APP | 日韩特色特黄在线播放 | 亚洲人人干人人操 | 视频大全在线观看网址 | 日韓精品人成在線播放 | 波多野结衣视频在线观看 | 国产男人的天堂av区 | 欧插网欧美美女性爱片 | 丰满少妇无码激情视频 | 日本精品1区二区 | 自拍日韩精品 | 日韩欧美中文字幕自拍一区 | 在线观看日本一二区 | 美女全身赤裸裸免费网站 | 亚洲精品国产suv一区 | 神马老子不卡视频在线 | 亚洲欧美人成电影在线观看 | 香蕉视频一直看一直爽 | 精品国模无码一区二区三区 | 波多野结衣视频在线观看 | 又大又粗又黄又硬又爽又免费视频 | 亞洲國產精品一區二區美利堅 | 中国少妇毛茸茸 | 欧美又爽又刺激高潮视频 | 能随意看女生部位的漫画软件 | 亚洲AV日韩专区在线观看 | 免费在线观看日韩aⅴ片 | 亚洲aⅴ天堂av在线观看 | 亚洲人成激情电影 | 欧美在线观看在线视频网站 | 亚洲91一区二区三区 | 欧美 在线 成 人亚洲 | 美女扒开腿让男生桶爽网站 | 亚洲欧洲日韩一区综合在线 | 久久久av免费播放 | 亚洲国产精品成人影片久久 | 久久久久五月开心网 | 在线观看国产精品日韩av | 国产金品久久久久久久AV熟女 | 99re视频综合在线播放 | 亚洲日韩AV第二区 | 国产亚洲国产国产亚洲 | 亚洲美女免费毛片 | 免费两性的视频网站国产 | 亚洲高清美女做性视频 | 亚洲精品人成久久久久 | 成人网站在线观看无遮挡免费观看 | BT√天堂资源种子在线官网 | 亚洲国产欧美高清 | 亚洲男人天堂av手机版在线 | 亚洲一区二区三区资源在线 | 四虎成人精品永久免费AV | 91精品国产一区二区三区左线 | 亚洲综合色噜噜狠狠网综合 | 欧美精品成人ä在线观看 | 免费的av少妇网站 | 亚洲国产精品成人久久综合网 | 日韩亚洲人成在线综合日本 | 美女图片+玉足+黑丝 | 奇米在线777在线视频 | 免费精东传媒VS天美传媒 | 国产一区二区久久久久久综合 | 精品自拍视频在线观看电影 | 最新二区精品无码电影 | 日本免费无遮挡吸乳视频中文字幕 | 久久露脸国产精品探花牛仔裤 | 国产白丝jk黑袜喷水视频 | 免费av电影不卡在线观看 | 中文字幕乱码中文乱码二区 | 亚洲成Av人片在线观看不卡 | 中文字幕乱码中文乱码二区 | 中国少妇毛茸茸 | 亚洲一区不卡在线 | 亚洲男人天堂av手机版在线 | 人牲a级牲交在线视频 | 青柠视频手机在线高清观看 | 欧美第一在线播放 | 成人h视频免费观看 | 1000部拍拍拍18勿入免费视频下载 | 午夜性色福利免费视频在线观看 | 亚洲一区二区三区无码久久欲色 | 中文字幕亚洲精品乱码 | 四虎精品自拍视频网站 | 亚洲一区二区三区香蕉在线观看 | 精品国产亚洲av高清日韩专区 | 国产这里有精品视频 | 最近最新好看的中文字幕2019 | 两个人免费完整在线观看直播 | 亚洲AV成人永久网站www在线 | 精品国产免费一区二区三区四区 | 精品精品男人的天堂国产 | 欧美高冷美女h视频一区在线观看 | 无码字幕无码精品无码 | 好吊视频一区二区三区免费 | 国产熟女白浆一区二区三区 | 国产亚洲精品久久久久蜜臀 | 久久夜色精品国产噜噜亚洲a∨ | 亚洲字幕在线一区二区三区 | 全国男人天堂网在线观看 | 久久99热只有频精品8蜜芽TⅤ | 国产在线观看免费九九九九 | 亚洲日韩欧美高清香蕉区在线观看 | 亚洲永久精品911 | 久久精品国产72精品亚洲 | 日本黄色大片免费看 | 日韩国产一区香蕉区 | 亚洲精品壁纸动态视频设置 | 男女猛进猛出无遮掩免费视频 | 日韩激情中文字幕免费视频 | 大胆欧美熟妇xxxx | 国产精品51麻豆cm传媒在线观看 | 扒开双腿疯狂进出爽爽爽视频免费 | 欧美zozo另类特级 | 亚洲一区二区三区高清不卡 | 亚州视频中文在线观看 | 欧美女优在线观看 | 亚洲色图久久久久 | 亚洲熟妇无码久久精品爱 | 亚洲无日韩码精品第一页 | 亚洲中文字永久在线 | 东北熟女脏话对白 | 国产亚州日韩欧美看片 | 亚州视频中文在线观看 | 在线天天看片视频免费观看m | 亚洲女同熟女一区二区三区 | 榴莲视频污版在线观看 | 亚洲国产欧美在线一区二区三区 | 在线观看激情欧美 | 天天精品无码一区 | 日另类欧美亚洲图片 | 欧美18vivode孕妇交 | 惠民福利亚洲一区二区不卡在线观看 | 日韩精品深夜影院在线观看 | 玖玖资源中文字幕一区二区 | 亚洲中文字幕久久电影 | 无码A级一区二区三区毛片视频 | 国产三级在线大全小视频 | 91久久综合一区二区三区桃色 | 国产热a欧美热a在线视频 | 五月丁香在线观看视频 | 精精国产XXXX视频在线直播1 | 日本三區四區免費高清不卡 | 亚洲久一区二区三区 | 欧美亚洲精品国产字幕在线观看 | 成人亚洲黄色在线观看 | 亚洲十八禁毛片在线 | 鲁大师成人一区二区三区 | 爆乳欧美精品久久久 | 精品国产粉嫩一区二区三区 | 久久成人无码一区二区 | 日韩在线看片免费人成视频 | 香蕉视频黄色91 | 福利热映电影之家在线观看免费版全集高清 | 亚洲av不卡一区 | 丁香五月激情小说 | 久久久噜噜噜久久熟女 | 两男吮着她的花蒂尿在线观看 | 久久精品国产在热亚洲完整版 | 日韩免费av一区二区 | 成人乱码一区二区三区四区 | 日本文字幕a∨在线观看 | 黑人av免费在线播放网址 | 东北熟女脏话对白 | 国产成人综合网在线观看 | 美女视频免费观看18网站 | 亚州精品天堂成人av在线播放 | 菠萝蜜app污视频 | gogo色婷婷一区二区三区 | 亚洲国产高清影院在线观看 | 久久99热这里只有高清 | 亚洲亚洲激情另类自拍 | 在线观看亚洲精品一区二区 | 最新在线步兵区在线播放 | chinese熟女老女人hd视频 | yy6080新视觉午夜一级 | 蜜桃视频免费观看视频 | 亚洲欧美日韩国产国产a | 欧美性色黄大片欧美40老熟妇 | 综合影视中文自拍 | 中文字幕日韩欧美人妻 | 波多野结衣久久精品99e | 亚洲AV综合AⅤ一区二区三区 | 欧美高冷美女h视频一区在线观看 | 亚洲精品中文字幕乱码4区 | 女人性高朝床叫视频午夜 | 亚洲国产高清影院在线观看 | 天堂亚洲久色一线v | 91久久久一区二区三区 | 福利热映电影之家在线观看免费版全集高清 | 久久99精品国产国产欧美日韩va | 免費啪視頻一區二區三區 | 国产制服丝袜福利 | 沈医生产奶1∨1POP骨科推荐 | 喷水自慰网站 | 在线观看2828理论片 | 9麻豆精品国产自产在线 | 男生女生一起相差差差30轮滑鞋APP | 日韩偷拍天堂高清 | 国产区欧美区一区二区三区 | 又爽亚洲成人在线观看精品国产 | 野花视频在线观看最新视频观看 | 国产午夜精品电影在线看 | 久久精品中文字幕在线观看 | 好吊色综合网天天高清 | 影音先锋在线资源中文字幕 | 国产小视频在线观看免费观看 | 黄色不卡电影一区二区三区 | 美女被操在线免费网站 | 亚洲AV成人永久网站www在线 | 美女光屁股扒开腿让男人桶爽免费 | 综合自拍制服欧美日韩亚洲区 | 亚洲国产av大全一区 | 亚洲丰满少妇Á三级级毛片 | 国产z0zo人禽交视频快速播放 | 黑人玩弄人妻一区二区三区a | 四虎永久在线精品2022 | 久久精品中文字幕在线观看 | 97se亚洲综合色区美女 | 国精产品一区一区三区四区mba | 欧美一区二区三区色 | 日韩亚洲免费视频 | 日韩丝袜在线视频观看 | 日韩综合av一区二区三区 | 手机看片1042欧美日韩你懂的 | 操美熟妇大片一二三区 | 亚洲人性爱无码av | 日韩亚洲精品毛片 | 国产三级毛片普通话 | chinese熟女老女人hd视频 | 无码区毛片蜜桃 | 日韩激情在线观看91 | 成人女性免费视频 | 亚洲a∨成人无码久久精品 | 中文字幕一区二区中文 | 性做爰高清视频在线观看视频 | 亚洲欧美人成电影在线观看 | 久久99热这里只有免费精品 | 欧美熟妇情趣办公室XXⅩ视频 | 亚洲AV日韩AV国内 | 久久影国产精品 | 在线免费视频区 | 俄罗斯一级成人毛片 | 国产999在线观看 | 欧美熟女40一区二区 | 日本另类αv欧美另类aⅴ综合 | 骚虎视频在线免费观看 | 成人AV小姐网站 | 2022精品亚洲中文字幕 | 久久久精品一区二区视频 | 野外性xxxxfreexxxxx欧美 | 国产亚洲精品成人小说 | 色婷婷aⅤ日韩一区二区三区在线 | 亚洲精品老熟熟盗摄在线 | 九九国产精品02 | 国产 在线一区二区 | 妖精网站免费 | 国产午夜精品电影在线看 | 亚洲国产成人久久精品app | 国产亚洲国产国产亚洲 | 2020久久精品影院 | 欧洲中文日韩亚洲精品视频 | 欧美高清亚洲综合 | 少妇高潮爽在线观看免费 | 一区二区三区人妻熟妇 | 野花社区www在线资源 | 免费黄日本韩国黄色片 | 精品人妻系列无码一区二区 | gogo色婷婷一区二区三区 | 日本午夜精品一区二区三区电影 | 2019色久综合在线观看 | 1024手机在线观看你懂的 | 国产黑色丝袜一区在线 | 中文字幕久久久 | 麻豆果冻传媒2024精品传媒一区 | 67194熟妇在线永久观看 | 精品国产亚洲av高清日韩专区 | 3d动漫h在线观看网站蜜芽 | 国产欧美一区二区精品性色陈 | 亚洲女同熟女一区二区三区 | 国产麻豆精品久久传媒 | 又大又粗又黄又硬又爽又免费视频 | 在线a亚洲老鸭窝天堂av | 美女扒开尿眼让男人桶爽视频 | 无码字幕无码精品无码 | 欧美乱辈伦完整版电影 | 精品亚洲永久免费直播 | 99热在线精品免费播放6 | 欧美亚洲动漫一区二区在想线 | 欧美日韩中文免费一区 | 激情视频在线观看免费观看 | 免费看美女靠逼app | 久久成人无码一区二区 | 亚洲成av人片一区二区在线观看 | 福利热映电影之家在线观看免费版全集高清 | 99热这里只有精品二 | 美女被男人下面桶爽的视频 | 国产剧情AⅤ沈樵全集 | 亚洲欧美国产精品久久久久久久 | 亚洲国产人午夜在线 | 亚洲专区 精品久久 | 996免费视频在线观看 | 亚洲日本欧美在线观看 | 少妇刺激不卡视频 | 精品成人免費自拍視頻 | 日日挨c哭高h1v1 | 国产精品日批视频免费观看 | 98色花堂在线视频区免费 | 最新中文字幕av专区不卡 | 日韩丝袜在线视频观看 | 日本亚洲欧美视频免费观看 | 国产这里有精品视频 | 亚洲国产高清成人 | 精品久久久久久妇女自慰喷水 | 亚洲国产综合专区在线观看 | 熟妇高潮一区二区高清 | 亚洲午夜久久久影院伊人 | 亚洲一区欧美国产高清在线 | 丰满巨臀熟妇在线视频 | 日韩欧美国产卡通动漫在线 | 国产白丝jk黑袜喷水视频 | 国产亚洲日产经典 | 手机国产视频福利 | 模特精品一区二区三区 | 正在播放极品在线视频 | 成人乱码一卡二卡三卡 | 嗯啊也色在线视频 | 日韩免va无码中文字幕 | 亚洲无码激情电影 | 麻豆果冻传媒2024精品传媒一区 | 精品自拍视频在线观看电影 | 久久露脸国产精品探花牛仔裤 | 欧美日本不卡视频 | 日韩AV乱码影视在线 | 波多野结衣的电影教师系列 | 七月丁香国产欧美一区 | 亚洲欧美清纯另类在线观看 | 暖暖日本社区免费观看 | 黑人av免费在线播放网址 | 婷婷不卡一区二区三区 | 中文字幕精品无码一区二 | 欧美精品亚洲精品小说区 | 日本妈妈在线观看中文字幕 | 亚洲一级特黄大片婷婷 | 日本精品1区二区 | 中文字幕亚洲二区婷婷 | 国产熟女一区二区丰满观看熟女 | 亚洲熟妇无码久久精品爱 | 日韩亚洲人成在线综合日本 | 欧美久久精品一c片一级 | 久久伊人五月天 | 国产91变态在线观看 | 美国一区二区毛片在线看 | 久久久久熟女一区二区三区 | 午夜福利影院手机在线观看 | 99久久伊人一区二区久久久精品 | 色噜噜噜视频 | 边爱边做在线观看免费视频 | 美女日屄视频在线观看 | 99re在线观看视频 | 日本中文字幕有码在线视频三级 | 亚洲精品色婷婷久久999 | 亚洲 丝袜 制服 美腿 综合 | 日语一本二本三本免费2021 | 午夜在线成人观看 | 欧美激情另类综合 | 九九视频国产免 | 中文字幕亚洲综合欧美成人 | 国产主播专区在线观看 | 日产精品码2码三码四码区久久亚洲AV成人无码 | 成人超爽网站www | 做爱视频免费观看网站 | 亚洲欧美交换 | 四虎精品自拍视频网站 | 少妇高潮爽在线观看免费 | 亚洲AV综合AⅤ一区二区三区 | 国产日韩免费三级九播影院 | 正在播放极品在线视频 | 国产97公开成人免费视频 | 欧美成人精品影视片 | 最近最新好看的中文字幕2019 | 少妇高潮爽在线观看免费 | 无码字幕无码精品无码 | 国产剧情黄页在线观看 | 男女无遮挡高清免费视频网站 | 午夜精品一区二区网站成人 | 全国男人天堂网在线观看 | 成人亚洲私人影院av | 过程网站在线观看黄 | 无码字幕无码精品无码 | 男人J插进女人P日韩视频 | 少妇高潮爽在线观看免费 | 国产z0zo人禽交视频快速播放 | 榴莲视频污版在线观看 | 国产麻豆精品久久传媒 | 美女裸体视频一区二区播放国产欧美一区二区精品性色一 | 亚洲精品网站在线看 | 免费视频网站嗯啊轻点 | 一级香蕉免费大片天天看 | 亚洲成a人片77777精品 | 男女床上激情四射视频 | 人与嘼AV免费3D | 沈医生产奶1∨1POP骨科推荐 | 一个人免费观看的www视频 | 国产制服丝袜福利 | 人人想人人人爽人人叫在野外 | 欧美一区二区三区午夜福利 | 亚洲91一区二区三区 | 免费不卡视频在线播放 | 国产日韩大香蕉在线视频 | 中文字幕欧美视频在线 | 成人免费午夜无码视频夜色 | 亚洲综合av一二三不卡 | 精品国产亚洲av高清日韩专区 | 98色花堂在线视频区免费 | 日本国产三级在线观看 | 日韩欧美亚无a码高清在线播放 | 女人直播软件app不收费 | 真人做爰到高潮视频18禁 | 99热精品这里只有精品 | 亚洲AV无码精品久久狠狠少妇 | 欧美日韩69视频 | 久久露脸国产精品探花牛仔裤 | 国产精品亚洲天堂123 | 日本一区二区欧美亚洲国产 | 羞羞动漫美女的胸被狂揉扒开 | 久久成人亚洲精品欧美 | 日本文字幕a∨在线观看 | 五月丁香合缴情在线看 | 俄罗斯一级成人毛片 | 另类久久精品国产亚洲av高清 | 亚洲 欧美 另类 在线 | 精品国产第一区二区 | 久草视频资源在线 | 久久aV一区二区三区乱码 | 欧美成免费一区二区三区 | 青青在线观看国产91 | 人人妻人人澡人人爽欧美精品潮喷 | 7788在线观看免费播放 | 亚洲一区二区三区高清不卡 | 最近2019年中文字幕大全 | 久久99精品国产国产欧美日韩va | 边爱边做在线观看免费视频 | 一级少妇高清在线 | 六月丁香五月激情综合 | 精品精品男人的天堂国产 | 黄色网址网站在线观看 | 尤物视频网页大全 | 精品精品男人的天堂国产 | 久久久久五月开心网 | 丁香五月天婷婷激情91精品免费 | 亚洲成ãⅴ人无码无卡 | 亚洲综合中文字幕久久网址 | 久99视频精品永久免费 | 欧美亚洲日韩国产综合va在线 | 黄网站一区二区三区 | 1000部拍拍拍18勿入免费视频下载 | 亚洲国产高清成人 | 亚洲一级欧美自拍 | 九草在线视频观看香蕉不卡 | 国产日韩精品一区二区在线观看播放 | 亚洲影视第一页国产精品 | 久久久99无码一区 | 久久99热免费热这里有精品 | 人牲a级牲交在线视频 | 亚洲一区精品午夜福利久久 | 精品一级成人a久久久久久 | 国产精品欧美日韩一级麻豆 | 成人欧美亚洲电影 | 九草在线视频观看香蕉不卡 | 床震吃乳强吻扒内裤漫画 | 亚洲欧美在线综合麻豆 | 91捆绑一区二区三区 | 韩国av双飞在线观看 | 嗯啊视频在线少妇 | 亚洲精品国产性色xxxx | 管鲍分拣中心入口网站最新章节 | 最新中文字幕av专区不卡 | 久久影国产精品 | 舌头伸进去添的我好爽高潮电影 | 狠狠燥六月婷婷七月丁香 | 中文字幕在线观 | 日本免费一本一二区三区 | A级片视频在线免费观看 | 成人超爽网站www | 成年美女啪啪拍网站免费vip | 欧美精品亚洲精品小说区 | 欧美日韩亚洲中字二区在线播放 | 男人J插进女人P日韩视频 | 亚洲欧美精品中字久久99 | 久久99热精品国产亚洲 | jizz在线观看免费视频 | 在线看中文字幕日本 | 国产成人精品国产成人亚洲 | 久久久av免费播放 | 国产精品一区二区性色aⅤ | 午夜成人性刺激免费视频在线观看 | 99视频精品热播免费观看 | 欧美成人免费 在线电影 | 国产日韩亚洲网址网站 | 双男主真人有车车的软件免费 | 中国亚洲黄色一级 | 精品精品男人的天堂国产 | 亚洲AV日韩AV国内 | 欧美亚洲国产suv | 性色αv蜜臀αⅤ色欲αV | 色婷婷国产精品视频一区1 | 免费无码真人裸交视频 | 芒果视频 污 app 国产 | 午夜成人性刺激免费视频在线观看 | 91国语对白国产刺激综合 | 日本免费无遮挡吸乳视频中文字幕 | 欧美一级亚洲精品91 | 亚洲AV日韩专区在线观看 | 欧美又爽又刺激高潮视频 | 日本国产成人精品亚洲欧美在线 | 国产亚洲重口味在线视频 | 亞洲歐美日韓一區高清中文字幕 | 日韩精品中文字幕无人区二 | 麻豆免费高清国产视频 | 一级黄色片一区二区 | 久久精品视频五区 | 99精品视频在线观看无毒 | 欧美乱人伦中文字幕视频 | 久久精品视频五区 | 中文字幕网址在线视频观看 | 欧美一区二区放荡人妇 | 骚女被肏网站免费观看 | 2020久久精品影院 | 国产在视频2019不卡 | 亚洲一区二区三区中文字 | 国产一区丝袜高跟在线i91传媒 | 亚洲国产欧美一区二区三区在线 | 最新网手机在线观看最新版а√天堂一区二区三区 | 67194熟妇人妻欧美日韩百度 | 国产美女主播在线观看网 | 蝴蝶视频app污官方版 | 自拍 亚洲 欧美 老师 丝袜 | 亚洲性爱图区欧美a级黄色 | 亚洲欧美国产日韩综合视频 | 日韩第一区中文字幕 | 免费九九99视频 | 97se亚洲综合色区美女 | 亚洲综合av一二三不卡 | 任你干任你日在线精品视频 | 久久网这里只有精品 | av在线在线一卡 | 国产精品国产三级国产avktv | 伊人精品无码一区二区三区电影 | 亚洲ⅴa在线va天堂va | 日本卡一卡二卡三卡四免费高清 | 最近的中文字幕手机在线看免费 | 精品人妻系列无码一区二区 | 免费不卡视频在线播放 | 2020日本www网站不卡 | 69影院在线观看 | 丝袜人妻中字在线 | 欧美日韩中文免费一区 | 日本老熟妇老太成熟 | 又大又粗又黄又硬又爽又免费视频 | 亚洲国产福利小电影 | 国产一区二卡三区四区 | 老湿影院在线免费观看 | 在线观看欧美综合自拍 | 可以免费看污视频的软件大全 | 99热精品这里只有精品 | 亚洲国产精品久久人人爱 | 亚洲日韩AV第二区 | 日本视频观看无卡免费精品页码 | 欧美国产中文动漫日韩欧美在线 | 男人j日女人p免费视频 | 亚洲无码中字专区 | 亚洲国产小说一区二区 | 亚洲激情视频在线观看 | 香蕉视频一级 | 野花日本免费完整版高清版 | 国产国产人免费视频成 | 日本在线观看综合精品 | 久久精品亚洲无中文亚洲欧美日韩久久精品 | 久久亚洲com人成 | 国产美女主播精品大秀系列 | 香蕉视频一直看一直爽 | 免费在线观看日韩aⅴ片 | 久草免费在线视频观看 | 亚洲av中字免费在线观看 | 午夜福利国产精品久久超碰最新 | 国内精品自在自线视频 | 996免费视频在线观看 | 宅男在线影院 | 色吧五月婷婷 | 成人大片在线播放 | cos亚洲日韩在线视频国产 | 日韩av五月天在线播放 | 在线亚洲精品A | 久久露脸国产精品探花牛仔裤 | 宝宝~腿趴开一点就不会疼男男 | 全国男人天堂网在线观看 | 亚洲AV日韩AV国内 | BT√天堂资源种子在线官网 | 精品一区二区三区简爱av | 日本岛国精品午夜福利视频 | 亚洲劲爆av在线 | 亚洲制服卡通动漫丝袜 | 日韩欧美国产一区二区三区四区 | 国产男人的天堂av区 | 国产套路视频在线直播 | 自拍中文无码精品 | 一个人免费观看的www在线观看 | 国产三级在线大全小视频 | 京东热app免费下载方法 | 日本免费无遮挡吸乳视频中文字幕 | 亚洲av永久无码精品一百度 | 久99精品视频免费视频免费观看 | 69堂最新啪啪网址 | 色黄啪啪网18勿进 | 一级a在线观看亚洲 | А√天堂中文最新版在线8 | 亚洲一成av人先乱码午夜 | 美女裸体免费观看国产 | 爆乳喷水高潮视频 | 欧美饥渴少妇xxxxx性 | 玩弄日本白嫩少妇videos | 日韩一级一在线观看视频 | А√天堂中文最新版在线8 | 久久久亚洲精品国产 | 久久精品亚洲无中文亚洲欧美日韩久久精品 | 中文字幕久久久 | 欧美高清亚洲综合 | 亚洲精品国语在线不卡 | 91线上视频网站精品久久新推荐 | 手机免费在线黄色网址 | 成人在线中文字幕在线播放 | 久久在线精品一区二区 | 亚洲一区精品午夜福利久久 | BT√天堂资源种子在线官网 | 又猛又黄又大又硬又粗 | 欧美成人免费 在线电影 | 国产亚洲精品拍拍视频 | 一个人免费观看ww在线播放视频 | 欧美成人你懂的 | 精选观看中文字幕高清无码 | 2019色久综合在线观看 | 成人av在线播放亚洲 | 日韩不卡av中文字幕 | 日韩亚洲人成在线综合日本 | 一个人免费观看的www在线观看 | 国产日韩在线不卡一区二区视频 | 天堂а√在线最新版在线8 | 专区中文字幕无码一区二区三区 | 日韓精品人成在線播放 | 正在播放怡春院国产在线视频 | 欧美日韩国产动漫一区视频 | 国产电影白丝袜在线观看 | 伊人久久久aⅤ老熟妇色 | 国产大全小草影院视频免费播放下载 | 国产又粗又大又猛又爽又黄的视频 | 国产制服丝袜福利 | 亚洲精品国语在线不卡 | 日韩欧美不卡一卡二卡3卡四卡2024免费 | 日本一点不卡高清 | 呦呦精品在线观看 | 日韩丝袜在线视频观看 | 夜月直播大全免费下载 | 亚洲欧美日韩久久久另类精品 | 欧美日韩69视频 | 激情视频亚洲图片另类视频 | 亚洲欧美综合99国产精品一区在线 | 99久久国产成人亚洲综合a∨ | 在线亚洲精品A | 亚州视频中文在线观看 | 久久爱成熟女人粗暴毛片 | 亚洲欧美另类自拍第一页 | 久久精品午夜国产 | 亚洲 丝袜 制服 美腿 综合 | 免费国产调教视频在线观看 | 久久国产精品制服丝袜日韩 | av在线男人天堂 | 国产精品一区二区性色aⅤ | 成年丰满熟妇午夜免费费视频 | 亚洲av综合日韩精品 | 99在线一本大道观看 | 亚洲日本日本精品18 | 最近的中文字幕手机在线看免费 | 漂亮人妻被黑人侮辱 | 日本在线中文字幕20页 | 欧美成人看片一区二区尤物 | 日本高清一二区免费 | 精品国产第一区二区 | 久久久久久久国产精品 | 精品成人免费播放国产片 | 免费a片在线观看播放 | 国产亚洲欧美福利 | 奇米7777av综合奇米影视8888 | 在线播放一区欧美伊人久久综合一区二区 | 亚洲欧美日韩狂野精品 | 日本文字幕a∨在线观看 | 最近2019免费中文字幕6 | 了解最新国产日韩精品一区二区在线观看播放 | 好男人视频在线观看免费 | 一区二区视屏 | 国产大全小草影院视频免费播放下载 | 看到了就来爽爽吧国产午夜福利A 视频 | 免费a片在线观看播放 | 最近中文字幕无免费视频 | 亚洲国产成人精品久久久国产成人一区二区 | 56影院爱爱动态图高清网站 | 一区二区三区日本高清视频 | 国产真实自在自线免费精品 | 久久亚洲伊人中字综合精品制服丝袜久久 | 天天看高清无码一区二区三区 | 高清日韩网站 | 精精国产XXXX视频在线www | 日本妈妈在线观看中文字幕 | 超碰伊人日日碰 | 国产成人精品1024在线观看 | 国产999在线观看 | 中文国产亚洲被窝AV | 日本亚洲欧美视频免费观看 | 国产98小视频在线播放 | 动漫美女被爆操久久久 | 蜜桃视频免费观看视频 | 久久影院这里都是精品视频 | 日韩在线欧美麻豆 | 国产传媒在线播放 | 国产熟女一区二区丰满观看熟女 | 欧美亚洲综合另类无 | 色香欲天天影视久久综合网 | 小说 图片 视频一区 | 亚洲欧美人成电影在线观看 | 7788在线观看免费播放 | 久久久亚洲精品国产 | 国产女人在线观看 | 亚洲欧洲精品在线观看 | av日韩在线播放 | 色婷婷aⅤ日韩一区二区三区在线 | 国产熟女一区二区丰满观看熟女 | 女人直播软件app不收费 | 狼人av无码影院 | 欧美一级久久精品费色 | 香蕉免费永久精品视频尤物 | 亞洲av第一成肉網 | 511影院韩国理论片在线观看 | xx91麻豆亚洲熟女少妇 | 太深了啊慢点噗嗤噗嗤视频 | 成人网站在线观看无遮挡免费观看 | 亚洲精品乱码线路中文字幕 | 中文字幕一区二区无码专区 | 在线观看国产爆草网站 | 琪琪网最新伦永久观看2019 | 欧美一线高本道高清在线 | 日韩色图在线观看 | 国产精品51麻豆cm传媒在线观看 | 亚洲中文字幕av免费电影 | 色婷婷综合缴情综图 | 亚洲av影院免费观看 | 中文字幕熟女一区二区三区 | 日逼视频软件下载 | 色婷婷国产精品视频一区1 | 一本久道亚洲综合中文无码 | 国产一区丝袜高跟在线i91传媒 | 日韩国产在线一区二区 | 国产欧美在线观看不卡一 | 欧美蓝光电影天堂全部免费观看 | 成人大片在线播放 | 国产日韩欧美精品影片 | 国产在在线免播放观看 | 国产又黄又粗又长又猛 | 亚洲人性爱无码av | 榴莲视频app在线下载 | 国精产品一区一区三区四区mba | 欧美精品一区三区中文字幕 | 成人午夜影视亚洲精品 | 欧美日韩女优一区中文在线 | 日语一本二本三本免费2021 | 成人國產一區二區三區精品不卡 | 最近2019年中文字幕大全 | 日本视频观看无卡免费精品页码 | 亚洲第一AV片在线观看 | 18+成人在线观看 | 亚洲国产精品成人影片久久 | 性色av笫一区二区三区 | 成人毛片美女人毛片 | 99热这里都是精品 | 亚洲综合在线观国产看 | 日韩欧美一卡2卡3卡4卡无卡免费201 | 在线看片免费观看视频网址 | 亚洲欧美国产日韩综合视频 | 午夜福利影院在线不卡 | 亚洲区 欧美区 日韩区 | 日韩在线看片免费人成视频 | 在线观看日韩在线双飞 | 美女黄页网站在线免费观看 | 在线天天看片视频免费观看m | 欧美午夜福利网站 | 丁香五月激情小说 | 免费三级毛片激情高朝 | 美国一级片免费 | 女露乳头无遮挡网站在线看 | 色婷婷婷视频一区二区三区 | 久草视频资源在线 | 亚洲无码激情电影 | 777ey性欧美另类图片 | 三级午夜理伦三级在线观看国产 | 午夜成人在线观看福利 | 中文字幕一区二区无码专区 | 国内自拍网站在线播放 | 三上悠亚ssni中文字幕 | 丁香六月综合 | 成品网站短视频源码搭建 | 2019最新国产不卡a国内20 | 日韩精品美女在线观看 | 扑克牌生产视频又疼又叫的网站 | 在线观看欧美综合自拍 | 亚洲色大18成人网站WWW在线播放 | 國產成人精品日本亞洲專一區 | 欧美成人免费一区在线播放 | 东北熟女脏话对白 | 女人被男人c免费网站 | 任你干任你日在线精品视频 | 中国xxxx精品视频 | 国内精品玖玖玖玖电影院 | 最近中文字幕MV免费高清在线 | 中文字幕一区二区三区日韩网 | 少妇精油按摩达到高潮一区二区三区 | 天天视频国产97二区 | 99re视频综合在线播放 | 国产在线一本一精品 | 日本免费无遮挡吸乳视频中文字幕 | 色婷婷国产精品视频一区1 | 511影院韩国理论片在线观看 | 免费不卡视频在线播放 | 亚洲国产欧美在线一区二区三区 | 小草视频手机在线观看视频 | 亚洲αV无码一二三四区 | 一区二区不卡视频观看 | 欧美成人午夜在线观看 | 亚洲欧美日韩系列在线观看 | 美女光屁股扒开腿让男人桶爽免费 | 999精品色在线播放 | 日本特黄三级久久网 | 少妇精品三级日本 | 欧美激情人成日本在线视频欧美精品亚洲 | 亚洲一区二区三区中文字 | 成人亚洲黄色在线观看 | 亚洲人人夜夜操人人爽 | 97日韩视频在线一区 | 一级黄aaa天天干用力干 | 在线免费播放一区日本专区 | 欧美日韩中文人妻一区 | 好男人视频在线观看免费 | 免费女人裸体网站无遮挡 | 美女图片+玉足+黑丝 | 午夜福利亚洲一区二区三区 | 囯产精品一区二区免费在线观看 | 青青在线观看国产91 | 美女裸体视频一区二区播放国产欧美一区二区精品性色一 | 日韩av中文字幕在线观看不卡 | 精品自拍视频在线观看电影 | 日日挨c哭高h1v1 | 华丽的外出在线观看整板 | 亚洲综合播放 | 国产精品成人一区二区在线观看 | 国产成人精品综合久久久久99 | 亚洲人性爱无码av | 欧美性XXXXX精品免费播放 | 亚洲av不卡一区 | 日本在线观看中文自拍 | 在线观看亚洲精品一区二区 | 亚洲精品久久久久久中文字幂 | 欧美精品一区三区中文字幕 | 亚洲自产一区二区 | 亚洲一区二区三区香蕉在线观看 | 亚洲综合av色婷婷国产野外 | 欧美一片二片午夜福利在线快 | 成人免费在线视频观看 | 亚洲欧洲精品免费视频在线 | 俄罗斯极品xxxx | 91精品中文字幕a | 91香蕉视频网站大全 | 东京热视频人妻免费 | 成人亚洲黄色在线观看 | 99久久伊人一区二区久久久精品 | 91**片视频视频 | 日本精品1区二区 | 欧美日韩综合一区二区三区色 | 青柠视频手机在线高清观看 | 国产在视频2019不卡 | 日逼视频软件下载 | 又爽的免费视频 | 真人片在线看网站 | 欧美超碰人人人人澡 | 亚洲国产av大全一区 | 亚洲av成人免费在线观看 | 亚洲欧美日韩国产国产a | 在线欧美亚洲日产动漫 | 国产美女主播在线观看网 | 久久夜色精品国产噜噜亚洲a∨ | 国产午夜免费羞羞一区二区 | 亚洲高清情侣网站 | 中文字幕无码不卡顿视频 | 欧美一区二区激情啪啪| 在线看美女网站第一区2区 | 亞洲伊人久久綜合 | 国产日韩在线不卡一区二区视频 | 亚洲欧洲另类在线观看 | 国产午夜福利av在线麻豆 | 日本精品激情乱一区二区 | 扒开双腿疯狂进出爽爽爽视频免费 | 国产精品亚洲第一天堂 | 欧美久久精品一c片一级 | 在线亚洲精品A | 2020日本www网站不卡 | 老师的大兔子好软水好多的 | x8x8华人在线永久免费 | 精品国产第一区二区 | 最新日韩专区vå无码 | 最新二区精品无码电影 | 国产成人麻豆tv在线播放 | 亚洲中文字幕琪琪在线 | 亚洲国产精品成人久久综合网 | 亚洲色婷婷在线天天看天天狠 | 国产又粗又大又猛又爽又黄的视频 | 2020每日更新国产精品视频 | 国产又粗又大又猛又爽又黄的视频 | 99人妻少妇精品无码 | 99精品视频在线观看无毒 | 人人妻人人澡人人爽欧美精品潮喷 | 最新国产福利片在线 | 国产精品午夜系列 | 欧美精品亚洲日韩 | 成 年 人 视频app免费软件 | 日本高清一二区免费 | 亚洲精品国产suv一区 | 国产成人精品亚洲欧洲 | 麻豆91在线国产 | 亞洲綜合高清精品導航網址 | 久久夜色精品国产噜噜亚洲a∨ | 精品亚洲国产成人蜜臀A∨ | 国产精品亚洲第一天堂 | 久久成人亚洲精品欧美 | 成人片免费无码播放一级 | 奇米7777av综合奇米影视8888 | 国产精品免费大片久久久国产一区二区三区 | 中文字幕在线不卡视频蜜乳 | 女人被免费网站视频在线 | 亚洲人成高清 | 91线上视频网站精品久久新推荐 | 男女无遮挡高清免费视频网站 | 高清在线亚洲精品国产二区 | 无码字幕无码精品无码 | 9l精品人妻中文字幕色欲 | 精品国产高清一区二区三区人妖 | 成人免费毛片视频APP | 舌头伸进去添的我好爽高潮电影 | 乱码中文字幕一区二区三区 | 日韩欧美亚无a码高清在线播放 | 91最新网址国产在线观看 | 一级黄色片子性爱做做久久 | 亚洲高清偷拍一区二区三区 | 国产91免费精品电影 | 一级黄色片一区二区 | 国产最火爆国产一级免费网站 | 亚洲中文字永久在线 | 国产z0zo人禽交视频快速播放 | 亚洲另类视频图片小说 | 国产精品扒开腿做爽爽的视频软件 | 午夜福利亚洲一区二区三区 | 野外性xxxxfreexxxxx欧美 | 桃子视频在线观看WWW黄 | 久久尤物193天堂 | 欧美性XXXXX精品免费播放 | 全国男人天堂网在线观看 | 欧美亚洲日韩国产综合va在线 | 亚洲国产精品1234区 | 香蕉黄视频在线观看 | 色av综合av综合无码网站 | 亚洲字幕在线一区二区三区 | 日韩亚洲欧美中文字幕第六页 | 亚洲v国产高清在线观看 | 国产精品一二二区在线 | 国产大片在线观看亚洲 | 92久久精品一区二区 | 亚洲区和欧洲区一二 | 欧美一级狌交大片好爽 | 中文字幕一级网址在线视频最新 | 国产一区二区三区三区 | 欧美亚洲动漫一区二区在想线 | 久久va成人高潮喷潮 | 亚洲一级欧美自拍 | 亚洲综合av一二三不卡 | 国产精品亚洲天堂123 | 草民电影午夜不限制 | 91福利在线欧美黄色小说 | 91在线午夜宅福利100 | 俄罗斯一级成人毛片 | 人人超碰人人 | 亚洲美女国产精品久久麻豆 | 亚洲专区 精品久久 | 国产三级亚洲精品 | 美女胸18以下看禁止免费视频 | 亚洲一级特黄大片婷婷 | 欧美性猛交乱大交3 | 亚洲精品久久久久久中文字幂 | 惠民福利亚洲一区二区不卡在线观看 | 1000部拍拍拍18勿入免费视频下载 | a亚洲电影中文字幕在线 | 亚洲无码久久精品日韩无码专区 | 国产熟女高潮久久麻豆 | 日韩丝袜在线视频观看 | 日本高清中文字幕专区 | 久草免费在线视频观看 | 日韩欧美视频亚洲 | 久久99这里只有精品17 | 后进极品圆润翘臀在线观看αv | 国精产品一区一区三区四区mba | 亚洲中文精选人人免费 | 亚洲乱码a乱码国产 | 国产av深夜福利十八禁专区 | 2025人妻中文字幕 | 亚洲AⅤ无码一区二区波多野BT | 成人h在线播放 | 丁香五月激情小说 | 亚洲高清偷拍一区二区三区 | 久久久噜噜噜久久熟女 | 双男主真人有车车的软件免费 | 日韩欧美不卡一卡二卡3卡四卡2024免费 | 高清少妇久久亚洲 | 国产成人精品亚洲欧洲 | 欧美一级久久精品费色 | 任你躁在线精品视频m3u8 | 日韩永久免费精品视频 | 成人av在线播放亚洲 | 视频图片小说一区二区三区 | 亞洲歐美日韓在線不卡中文 | 亚洲激情男人天堂av网 | 最新在线步兵区在线播放 | 欧美亚洲精品国产字幕在线观看 | 国产乱妇乱子视频在线播放国产 | 美女被男人下面桶爽的视频 | 手机在线观看精品国产片 | 欧美熟妇情趣办公室XXⅩ视频 | 日韩精品美女在线观看 | 日韩亚洲欧美一区二区 | 宝宝~腿趴开一点就不会疼男男 | 日本中文字幕在线二区 | 国内自拍少妇小视频免费 | 日本妈妈在线观看中文字幕 | 午夜福利夫妻电影 | 國產午夜久久精品 | 久久人人婷婷五月天 | 最新二区精品无码电影 | 亚洲美女按摩性色生活视频 | 成人h在线播放 | 99久久伊人一区二区久久久精品 | 欧美黄色一区二区日本 | 奇米7777av综合奇米影视8888 | 亚洲欧美国产日韩综合视频 | 亚洲福利日韩网曝 | 欧美亚洲国产视频小说 | 日本免费一区二区三区色香欲86 | 中文字幕网址在线视频观看 | 午夜精品久久久久久蜜月 | 亚洲av噜噜狠狠麻豆 | 日本高清不卡免v | 國產成+人歐美+綜合在線觀看 | 国产97公开成人免费视频 | 在线视频综合国产 | 欧美蓝光电影天堂全部免费观看 | 欧日韩高清av在线播放 | 小视频在线看国产 | 亚洲日韩中文无码制服 | 亚洲国产欧美在线一区二区三区 | 亚洲一区二区三区亚瑟 | 波多野吉衣免费一区 | 成人女性免费视频 | 欧美二区免费精品 | BT√天堂资源种子在线官网 | 野外性xxxxfreexxxxx欧美 | 日产精品码2码三码四码区久久亚洲AV成人无码 | 8x永久华人成年免费 | 在线观看国产精品日韩av | 探花视频手机APP无限次数下载 | 日本精品激情乱一区二区 | 免费人成在线观看网站视频 | (愛妃)亚洲国产成人精品久久综合区 | 亚洲精品色婷婷久久999 | 色老板成人永久免费视频 | 能随意看女生部位的漫画软件 | 歐美綜合網亞洲綜合網 | 国产成人免费高清直播黄 | 手机在线播放亚洲日韩欧美 | 成人a影片在线观看 | 色婷婷一区二区三区777 | 国产在线小视频 | 亞洲歐美日韓一區高清中文字幕 | 国内精品玖玖玖玖电影院 | 精品自拍视频在线观看电影 | 洲日韩中文字幕一级乱码在线播放 | asS亚洲肉体欣赏piCS | 亚洲v欧美v精品v日本 | 国产日韩免费三级九播影院 | 韩剧无码电影大全电影之家观看全集免费 | 中文乱码字字幕在线国语 | 国产在线观看免费九九九九 | 后进极品圆润翘臀在线观看αv | 神马老子不卡视频在线 | china末成年videos强行 | 欧美精品www久久久久久 | 亚洲ⅴa在线va天堂va | 老司机综合性网站在线观看 | 女人和男人一起打扑克牌 | 国产精品 十八爽爽爽 | 亚洲丰满少妇Á三级级毛片 | 国产小视频在线观看免费观看 | 香蕉黄视频在线观看 | 人牲a级牲交在线视频 | 青青草日韩视频在线观看 | 亚洲ⅴa在线va天堂va | a4yy歐美一區二區三區 | 亚洲无码中字专区 | 黑人玩弄人妻一区二区三区a | 91国内揄拍国内精品对白免费 | 1卡二卡三卡四卡在线播放 | 漂亮人妻被黑人侮辱 | 欧美人与动zozo区在线播放 | 在线播放偷拍一区精品 | 欧美亚洲综合另类无 | 欧美在线日韩免费2o19 | 日韩欧美不卡一卡二卡3卡四卡2024免费 | 暖暖在线观看免费完整版 | 在线欧美亚洲日产动漫 | 精品国产免费一区二区三区四区 | 国产日韩在线不卡一区二区视频 | 欧美熟妇情趣办公室XXⅩ视频 | 干日本少妇一区二区三区 | 国产男女AV情侣啪啪夫妻 | 亚洲91精品麻豆国产系列在线 | 国产一级特黄录像免费播放 | 女人性高朝床叫视频午夜 | 蜜桃欧美精品成人A在线观看 | 欧美深夜网站在线观看 | 亚洲中文字幕久久电影 | 高清无码中文字αⅴ电影 | 欧美日韩女优一区中文在线 | 歐美亞洲國產激情一區二區 | 在线观看的免费无遮挡日本 | 黑人玩弄人妻一区二区三区a | 自拍视频国产免费 | 99精品视频在线观看无毒 | 久久97超碰人人 | 成人69视频精品 | 亚洲国产成人久久精品app | 免费一级夫妻a | 亚洲A∨无码一区二区小说 | 精品久久久久久妇女自慰喷水 | 免费看二级黄色录像 | 韩国女主播精品视频网站 | 亚洲女初尝黑人巨高清 | 91国语对白国产刺激综合 | 国产精品亚洲天堂123 | 亚洲久一区二区三区 | 奇米777米奇影视狠狠 | 欧美综合区自拍亚洲 | 国产性色亚洲AV成人片色在线观看高潮 | 欧美一线高本道高清在线 | 成人网站在线观看无遮挡免费观看 | 手机国产视频福利 | 欧美18vivode孕妇交 | 国产美女爽到高潮嗷嗷叫视频 | 国产大片在线观看亚洲 | 亚洲精品网站在线看 | 国产日韩大香蕉在线视频 | 再深点灬舒服灬太大了o在线观看 | 欧美激情人成日本在线视频欧美精品亚洲 | 午夜婷婷亚洲狠狠一区二区三区 | 在线看片免费观看视频网址 | 亚洲一区不卡在线导航 | 国产精品v欧美精品v日韩精品青青 | 久久这里只精品99 | 国产成人精品日本亚洲语音2 | 中文字幕一区二区三区无码专区 | 高清欧美激情在线观看最新 | 午夜精品久久久久久网站 | 芒果视频 污 app 国产 | 色香欲天天影视久久综合网 | 任你干任你日在线精品视频 | 亚洲欧洲中文日韩成人网 | 亚洲女同熟女一区二区三区 | 麻豆大鸡把自慰大全在线观看 | 中文字幕不卡一区每日更新 | 日本免费一本一二区三区 | 亚洲五卡中文字幕 | 亚洲欧美另类图片日韩 | 日韩欧美日本久久综合 | 免费无码高清不卡 | 熟女一区二区三区免费 | 1024手机在线免费看片 | 国产97电影中文 | 99re视频免费一区 | 国产亚洲男人社区堂在线观看视频 | 日日挨c哭高h1v1 | 97人妻中文在线播放 | gogo色婷婷一区二区三区 | 97超级碰在线观看免费 | 色蜜蜜国产在线观看 | 国产传媒在线播放 | 囯产精品一区二区免费在线观看 | 精品久久久av电影 | 国产大片在线观看亚洲 | 后进极品圆润翘臀在线观看αv | 极品少妇福利午夜电影 | 奇米777米奇影视狠狠 | 成 年 人 视频app免费软件 | 亚洲一区二区三区亚瑟 | 国产亚洲精品美女视频噜噜噜 | 日韩色图在线观看 | 511影院韩国理论片在线观看 | 色香欲天天影视久久综合网 | 国产91熟女专区 | 最近中文字幕mv在线资源 | 日本免费一本一二区三区 | 日韩欧美tv一区二区 | 色吧五月婷婷 | 91亚洲国产成人久久精品蜜臀 | 亚洲国产成人性大片在线播放 | 色婷婷国产精品视频一区1 | 俄罗斯一级成人毛片 | 女人性高朝床叫视频午夜 | 国产亚洲欧美精品综合观看三区 | 精品一区精品国产 | 免费精东传媒VS天美传媒 | 一个人看的www免费观看视频 | gogo人体艺术九热爱视频 | 福利一区三区 | 亚洲ⅴa在线va天堂va | 国产在线视频手机观看 | 精品无人乱码一区二区三区介绍 | 久久99热这里只有高清 | 2021国产亚洲日韩在线 | 日韩免费av一区二区 | 18国产欧美久久久精品影院 | 中文字幕熟女一区二区三区 | 国产精品成人一区二区在线观看 | 日韩激情在线观看91 | 404禁用软件网站入口 | 五月丁香在线观看视频 | 久久99热只有频精品8蜜芽TⅤ | 女生说痛了男生越里寨 | 欧美在线日韩免费2o19 | 久久爱成熟女人粗暴毛片 | 国产日韩欧美精品影片 | 精品99爽爽爽高清欧美最新 | 精品无人乱码区1区2区3区 | 女人和男人一起打扑克牌 | 国产男女AV情侣啪啪夫妻 | 精品国产另类一区二区 | 久久久99精品免费观看在 | 成人亚洲天堂东京热 | 欧美亚洲动漫一区二区在想线 | 精品国产免费一区二区三区四区 | 俄罗斯极品xxxx | 国产中文字幕Av日韩精品一区二 | 日产精品码2码三码四码区久久亚洲AV成人无码 | 国产激情巨作麻豆高潮 | 无码A级一区二区三区毛片视频 | 亚洲视频在线亚洲观看 | 女人被男人躁得好爽免费视频免费 | 亚洲91精品麻豆国产系列在线 | 国产午夜免费羞羞一区二区 | 色综合天天综合高清 | a在线视频播放免费网站 | 一区二区三区人妻熟妇 | 福利热映电影之家在线观看免费版全集高清 | 电影午夜日韩国产污 | 欧美亚洲国产视频小说 | 久久国产精品2021免费 | 日韩偷拍天堂高清 | 国内一区二区三级欧美射射 | 日韩亚洲欧美精品 | 芒果视频 污 app 国产 | 国产美女主播精品大秀系列 | 完全免费在线视频 | 免費國產成人高清在線直播 | 7788在线观看免费播放 | 亚洲欧洲一级在线播放 | 免费看男和女污污污的网站免费app | 黄网站一区二区三区 | 又爽亚洲成人在线观看精品国产 | 午夜福利国产精品久久超碰最新 | 欧美成人你懂的 | 花蝴蝶亚洲一区二区三区 | 欧美一区二区激情啪啪| 一个人免费观看的www在线观看 | 永久日韩免费av网站 | 强奷乱码中文字幕在线 | 亚洲国产成人性大片在线播放 | 久久影国产精品 | 久久99精品久久久噜噜最新章节 | 青草视频入口在线观看 | 九九九好热在线 | 久久久久亚洲AV无码首页 | 精品成人18秘亚洲av播放 | 久久99精品久久噜噜6 | 了解最新国产日韩精品一区二区在线观看播放 | 免费女人裸体网站无遮挡 | 欧美亚洲国产suv | 亚洲中文欧美韩日 | 可以免费看污视频的软件大全 | 日韩土豆av网在线观看 | 亚洲一区二区三区无码久久欲色 | 深夜在线网站视频免费观看网址 | 大地资源网在线观看免费高清观看 | 青青在线观看国产91 | 亚洲精品人成久久久久 | 男人J插进女人P日韩视频 | 亚洲日韩欧美成人在线影院 | 亚洲精品色婷婷久久999 | 美女视频免费观看18网站 | 手机在线播放亚洲日韩欧美 | 999精品欧美一区二区三区 | 中文字幕理伦片在线高清a | 成人国产精品一区二区在线观看 | 国产精品 十八爽爽爽 | 国产亚州日韩欧美看片 | 尤物视频网页大全 | 小草视频手机在线观看视频 | 久久久99精品免费观看在 | 国产精品无遮挡免费观看 | 日产午夜成人免费看片 | 亚洲欧洲精品免费视频在线 | 色婷婷aⅤ日韩一区二区三区在线 | 中文字幕在线不卡视频蜜乳 | 18+成人在线观看 | 美女胸18以下看禁止免费视频 | 中文字幕一区二区三区精品日韩 | 精品国产第一区二区 | 国产97公开成人免费视频 | 尤物视频 中文字幕 | 国产麻豆精品免费人成网站 | 麻app豆传媒视频 | 一个人免费观看ww在线播放视频 | 超碰超碰人人澡人人添 | 精品三级在线欧美 | 日本老熟妇老太成熟 | 日本免费无遮挡吸乳视频中文字幕 | BT√天堂资源种子在线官网 | 在线观看免费国产成人软件 | 国产精品九九在线播放无卡顿 | 欧美成人精品影视片 | 日本暖视频一区二区三区 | 久久99精品国产国产欧美日韩va | 两个人免费完整在线观看直播 | 熟女一区二区三区免费 | 亚洲综合视频免费 | 久久综合九色综合88网站 | 午夜成人性刺激免费视频在线观看 | 日韩 日本 人成 欧美 | 天天看高清无码一区二区三区 | 国产精品无卡无片在线观看 | 大陆女明星毛片在线视频 | 日本黄色片网址 | 免费无遮挡18禁网站 | 中文国产亚洲被窝AV | 亚洲天堂在线不卡 | 91**片视频视频 | 91香蕉在线看私人影院 | 深夜在线网站视频免费观看网址 | 福利热映电影之家在线观看免费版全集高清 | 4399电影免费观看 | 91精品中文字幕a | 啊~cao死你个小sao货视频 | 榴莲视频色版APP | 精品自拍视频在线观看电影 | 日韩AV乱码影视在线 | 日韩av中文字幕在线观看不卡 | 国产在线方视频在线观看 | 国产精品啪啪一区二区三区 | 精品一级成人a久久久久久 | 爆乳喷水高潮视频 | 亚洲一级特黄大片婷婷 | 日本国产成人精品亚洲欧美在线 | 了解最新国产日韩精品一区二区在线观看播放 | 成人无码免费一级体验区 | a亚洲电影中文字幕在线 | 欧美黄色一区二区日本 | 亚洲国产成人性大片在线播放 | 探花视频手机APP无限次数下载 | 亚洲成AV人片一区二区小说 | 久99视频精品永久免费 | 国产亚洲国产国产亚洲 | 免费看二级黄色录像 | 黑人玩弄人妻一区二区三区a | (愛妃)亚洲国产成人精品久久综合区 | 伊人直播色版app官网版安卓下载 | 六月丁香五月激情综合 | 日本国产三级在线观看 | 俄罗斯一级成人毛片 | 亚洲妇人成熟性成熟图片高清 | 99热亚洲色精品国产88 | 亚洲精品6在线播放 | 好爽好深胸好大好多水视频 | 亚洲v国产高清在线观看 | 国产亚州日韩欧美看片 | 午夜精品久久久久久网站 | 99久久精品国产99久久6 | 亚洲一区不卡在线导航 | 中文字幕第88页在线 | 日逼视频软件下载 | 在线观看国产精品日韩av | 日韓精品人成在線播放 | 亚洲v欧美v国产人成网 | 日本中文字幕不卡 | 国内女人喷潮完整视 | 亚洲av不卡一区 | 久久久99精品免费观看在 | 国产电影白丝袜在线观看 | 99久久久国产一区二区三区 | 97日韩视频在线一区 | 日韩精品永久免费视频 | 欧美激情肉欲高潮视频 | 久久这里只精品99 | 中国少妇毛茸茸 | 国产真实自在自线免费精品 | 在线观看亚洲avav免费免费 | 亚洲欧美国产日韩综合视频 | 天堂在线精品 | 国产超级a天堂直播在线观看 | 麻豆精产国品一二三产区区别免费 | 黄网站一区二区三区 | 日本在线中文字幕20页 | 国产交换配乱婬视频免费99 | 日韩欧美视频亚洲 | 国产精品一区二区性色aⅤ | 欧美精品激情在线观看最新版视频 | 亚洲一级欧美自拍 | 欧美人与动zozo区在线播放 | 成人免费网站又大又黄又粗 | 免费两性的视频网站国产 | 在线观看的免费无遮挡日本 | 18国产欧美久久久精品影院 | 国产精品久久久鸭va | 国产超级a天堂直播在线观看 | 欧美系列精品亚洲v在线观看 | 国产成人精品1024在线观看 | 亚洲精品91香蕉综合区 | 在线国产不卡 | 日韩毛片毛片久久精品 | 4399国语看片免费观看 | 三级午夜理伦三级在线观看国产 | 人牲a级牲交在线视频 | 免费观看AAA片在线播放 | 在线观看2828理论片 | 亚洲免费色网视频在线观看 | 国产日韩在线不卡一区二区视频 | 中日韩美女三级不卡视频 | 午夜亚洲精品国产乱码久久久人妻 | 国产一区二区久久久久久综合 | 欧日韩高清av在线播放 | 99ri在线精品视频在线播放 | 狠日狠干日日射 | 久久精品亚洲无中文亚洲欧美日韩久久精品 | 法国2024久久精品无码 | 国产精品51麻豆cm传媒在线观看 | 日韩在线观看中文字幕一区二区 | 欧美一区二区三区色 | 狠狠插一区二区三区 | 欧美成人一区二区精品国产 | 国产激情巨作麻豆高潮 | 一区二区三区日本高清视频 | 一级黄色片子性爱做做久久 | 日韩丝袜在线视频观看 | 欧美精品激情在线 | 韩剧无码电影大全电影之家观看全集免费 | 日本文字幕a∨在线观看 | 日韩孕妇孕交在线视频 | 97亚洲一区二区三区 | 国产男人的天堂av区 | 久99视频精品永久免费 | 美女被男人下面桶爽的视频 | h小视频在线观看网 | 中文字幕熟女一区二区三区 | 最新亚洲日韩AV一区二区 | 亚洲AV无码一区二区写真 | 日韩专区一区二区无人区 | 又猛又黄又大又硬又粗 | 羞羞视频APP安卓安装下载 | 六月丁香五月激情综合 | 一级香蕉免费大片天天看 | 亚洲精品6在线播放 | 欧美日本高清不卡 | 最近中文字幕MV免费高清在线 | 欧美先锋在线 | 九九视频国产免 | 国产z0zo人禽交视频快速播放 | 在线播放偷拍一区精品 | 久久经精品久久精品 | 日本天堂视频在线播放 | 国产精品v日韩精品v欧洲精品 | 亚洲欧洲日产国产综合网 | 777ey性欧美另类图片 | 花蝴蝶亚洲一区二区三区 | 成年人黄色一级有限公司 | 亚洲婷婷一区二区三区av | 男人j日女人p免费视频 | 国产小视频在线观看免费观看 | 丝袜国产精品视频二区 | 99在线一本大道观看 | 日本精品视频在线播放 | 亚洲日韩伦理中文字幕在线观看 | 麻豆专区无码免费 | 激情亚洲大陆精品自拍AV | 一区二区伦理亚洲 | 扑克牌生产视频又疼又叫的网站 | 亚洲一区不卡在线导航 | 女人张开腿让男人桶无遮免费视频 | 99久久人人爽精品 | 免费一级夫妻a | www.久久久久久 | 亚洲91精品麻豆国产系列在线 | 日本不卡高清一区二区 | 色婷婷aⅤ日韩一区二区三区在线 | 尤物视频网页大全 | 5g在线婷婷综合网 | 亚洲第一AV片在线观看 | 歐美在線觀看日韓歐美在線觀看 | 适合晚上一个人看b站软件大全 | 91国语对白国产刺激综合 | 免费女人裸体网站无遮挡 | 不卡一区二区免费在线观看 | 最新亚洲日韩äV一区二区 | 亚洲欧美熟女 | 免费看男和女污污污的网站免费app | 中文字字幕在线不卡 | 香蕉黄视频在线观看 | 一区二区三区日本高清视频 | 欧美一级久久精品费色 | 中文字幕一区二区三区无码专区 | 国产成人免费高清直播黄 | 亚洲v欧美v精品v日本 | 少妇人妻不卡777精品久久 | 在线观看日本免费A | 青青草日韩视频在线观看 | 洲日韩中文字幕一级乱码在线播放 | 欧美熟女40一区二区 | 操美女免费看视频下载APP | 欧美女优在线观看 | 国内精品无码AⅤ一区二区三区 | 欧洲少妇搡BBBB视频 | 久久久精品一区二区视频 | 能随意看女生部位的漫画软件 | 亚洲欧洲国产成人综合一本 | 亚洲一区二区三区电影网 | 欧美一区二区三区色 | 中文字幕中日韩欧美一区 | 一区二区不卡视频观看 | 免费在线观看视频国产 | 日本特黄三级久久网 | 日本卡一卡二卡三卡四免费高清 | 欧美性色欧美a在线图片 | 黑人久久久精品人妻av | 亚洲国产精品中文字幕久久 | 亚洲天堂在线不卡 | 日韩无码精品中文字幕 | 国产成人综合影院在线 | 7788在线观看免费播放 | 四虎成人精品永久免费AV | 国产一区二区久久久久久综合 | 鲁鲁射软件免费下载 | 熟女一区二区三区免费 | 免费成人黄页在线观看国产 | 欧美成人色图久久 | 亚洲欧美人成电影在线观看 | 国产三级在线大全小视频 | 天天精品无码一区 | gogo午夜高清免费摄影 | 老司机综合性网站在线观看 | 日本国产三级在线观看 | 91久久久一区二区三区 | 中文在线不卡 | 亚洲性爱图区欧美a级黄色 | 久久精品国产无限资源好片 | 色噜噜国产亚洲精品 | 色综合视频一区中文字幕 | 欧美一区二区三区午夜福利 | 亚洲综合播放 | 精品亚洲国产成人蜜臀A∨ | 久久综合色另类小说 | 美国一级特a黄久久精品 | 人人想人人人爽人人叫在野外 | 在线观看激情欧美 | 欧美一级欧美一级在线视频 | 欧美精品一级高清手机在线 | 国产激情综合高清久 | 脫了動漫美女內褲猛烈進入gif | 日韩亚洲国产女同二区三区 | 18禁成人网站免费观看韩国 | 国产白色视视频在线观看 | 国产探花精品一区在线 | 国产欧美精品久久久久久TV | 伊人直播色版app官网版安卓下载 | 亚洲欧美人成网 | 欧美饥渴少妇xxxxx性 | 国产精品v欧美精品v日韩精品青青 | 国产成人精品自在拍在线观看 | 成人女性免费视频 | 另类重口特殊AV无码 | 亚洲AV无码乱码无线观看 | 日韩精品深夜影院在线观看 | 亚洲综合精品一区二区在线 | 国产国产人免费视频成 | 亚洲欧洲国产成人综合一本 | 亚洲国产精品成人影片久久 | 超碰在线免费三级片 | 欧美日韩中文免费一区 | 亚洲第一日韩AV综合网 | 欧美激情一区二区亚洲专区 | 亚洲网站av免费观看younv能看网站 | 京东热app免费下载方法 | 高清在线亚洲精品国产二区 | 成人在线免费观看视频 | 国产亚洲av综合人 |