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

面試官:JVM是如何判定對象已死的?學(xué)JVM必會的知識!

開發(fā) 后端
作為一名Java程序員,我們每天都在程序里不停地去new對象,但是你知道這些被new出來的對象,最后是怎么被回收的嗎?

大家好,我是 BookSea。

作為一名Java程序員,我們每天都在程序里不停地去new對象,但是你知道這些被new出來的對象,最后是怎么被回收的嗎?

在堆里面存放著Java世界中幾乎所有的對象實(shí)例,垃圾收集器在對堆進(jìn)行回收前,第一件事情就是要確定這些對象之中哪些還「存活」著,哪些已經(jīng)「死去」(“死去”即不可能再被任何途徑使用的對象)。

JVM必然是有自己的一套方法來判斷哪些對象該回收,哪些不該回收。

本篇文章就來聊聊這個話題。

一、引用計數(shù)算法

這種算法的工作原理是這樣的:在對象中添加一個引用計數(shù)器,每當(dāng)有一個地方引用它時,計數(shù)器值就加一;當(dāng)引用失效時,計數(shù)器值就減一;任何時刻計數(shù)器為零的對象就是不可能再被使用的。

客觀的說,引用計數(shù)算法雖然占用了一些額外的內(nèi)存空間來計數(shù),但原理簡單,效率也很高。

但是目前主流的Java虛擬機(jī)里面都沒有選用引用計數(shù)法來進(jìn)行內(nèi)存管理,why?

主要原因是,引用計數(shù)算法很難解決對象之間相互「循環(huán)引用」的問題。下面放段代碼,舉個例子:

public class MyObject {
    public Object ref = null;
    public static void main(String[] args) {
        MyObject myObject1 = new MyObject();
        MyObject myObject2 = new MyObject();
        myObject1.ref = myObject2;
        myObject2.ref = myObject1;
        myObject1 = null;
        myObject2 = null;
    }
}

這段代碼里定義了一個類MyObject,只有一個成員變量ref。

當(dāng)設(shè)置myObject1 = null和myObject2 = null后,僅僅是清除了myObject1和myObject2變量所持有的引用。并沒有影響到myObject1對象內(nèi)部的ref字段和myObject2對象內(nèi)部的ref字段,它們?nèi)匀辉谙嗷ヒ谩?/p>

我們可以看出myObject1和myObject2這兩個對象除互相引用外再無任何引用,實(shí)際上這兩個對象已經(jīng)不可能再被訪問,但是它們因?yàn)榛ハ嘁弥鴮Ψ剑瑢?dǎo)致它們的引用計數(shù)都不為零,引用計數(shù)算法也就無法回收它們,這就是循環(huán)引用問題。

有點(diǎn)類似死鎖的概念,A和B互相持有,誰也不釋放,直接卡住。

通過這個例子我們可以看出引用計數(shù)法是存在弊端的。

所以HotSpot虛擬機(jī)并不是通過引用計數(shù)算法來判斷對象是否存活的,使用的是「可達(dá)性分析算法」。

二、可達(dá)性分析算法

JVM通過可達(dá)性分析(Reachability Analysis)算法來判定對象是否存活的。

這個算法的基本思路就是通過一系列稱為GC Roots的根對象作為起始節(jié)點(diǎn)集,從這些節(jié)點(diǎn)開始,根據(jù)引用關(guān)系向下搜索。

搜索過程所走過的路徑稱為引用鏈(Reference Chain),如果某個對象到GC Roots間沒有任何引用鏈相連,或者用圖論的話來說就是從GC Roots到這個對象不可達(dá)時,則證明此對象是不可能再被使用的。

如圖,對象object 5、object 6、object 7到GC Roots是不可達(dá)的,因此它們將會被判定為可回收的對象。

上文提到的GC Roots,我們可以認(rèn)為是起點(diǎn),而在JVM里面,固定可以作為GC Roots的對象包括以下幾種:

  • 在虛擬機(jī)棧(棧中 的本地變量表)中引用的對象,例如各個線程被調(diào)用的方法堆棧中使用到的參數(shù)、局部變量、臨時變量等。
  • 在方法區(qū)中常量引用的對象,例如字符串常量池(String Table)里的引用。
  • 在本地方法棧中JNI(本地方法)引用的對象。
  • Java虛擬機(jī)內(nèi)部的引用,如基本數(shù)據(jù)類型對應(yīng)的Class對象,一些常駐的異常對象(NullPointException、OutOfMemoryError)等,以及系統(tǒng)類加載器。
  • 所有被同步鎖(synchronized)持有的對象。
  • 反映Java虛擬機(jī)內(nèi)部情況的JMXBean、JVMTI中注冊的回調(diào)、本地代碼緩存等。

通過枚舉一個一個根節(jié)點(diǎn)(GC Roots),然后順藤摸瓜一路摸下來,然后沒摸到的那些對象,也就是不存在引用的對象就把它咔嚓回收了。這個過程稱之為「根節(jié)點(diǎn)枚舉」。

目前所有的垃圾收集器在根節(jié)點(diǎn)枚舉這一步驟時都是必須暫停用戶線程的,也就是必須會有STW(Stop the Wrold)。

這里面細(xì)講東西很多,先埋個坑,后續(xù)會有文章專門來講根節(jié)點(diǎn)枚舉。

上面我們講了可達(dá)性分析算法是根據(jù)引用來回收的,而對不同的引用類型有不同的處理方式,JVM也是會去「差別對待的」。

三、引用類型

Java將引用分為強(qiáng)引用(Strongly Re-ference)、軟引用(Soft Reference)、弱引用(Weak Reference)和虛引用(Phantom Reference)4種,這4種引用強(qiáng)度依次逐漸減弱:

  • 強(qiáng)引用是最傳統(tǒng)的“引用”的定義,在程序代碼之中普遍存在,即類似Object obj=new Object()這種引用關(guān)系。如果一個對象具有強(qiáng)引用,那就類似于"必不可少的生活用品"。只要強(qiáng)引用還存在,垃圾收集器永遠(yuǎn)不會回收掉被引用的對象。
  • 軟引用是用來描述一些還有用,但非必須的對象。只被軟引用關(guān)聯(lián)著的對象,在系統(tǒng)將要發(fā)生內(nèi)存溢出異常前,會把這些對象列進(jìn)回收范圍之中進(jìn)行第二次回收,如果這次回收還沒有足夠的內(nèi)存,才會拋出內(nèi)存溢出異常。在JDK 1.2版之后提供了SoftReference類來實(shí)現(xiàn)軟引用。
  • 弱引用也是用來描述那些非必須對象,但是它的強(qiáng)度比軟引用更弱一些,被弱引用關(guān)聯(lián)的對象只能生存到下一次垃圾收集發(fā)生為止。當(dāng)垃圾收集器開始工作,無論當(dāng)前內(nèi)存是否足夠,都會回收掉只被弱引用關(guān)聯(lián)的對象。在JDK 1.2版之后提供了WeakReference類來實(shí)現(xiàn)弱引用。
  • 虛引用是最弱的一種引用關(guān)系。如果一個對象僅持有虛引用,那么它就和沒有任何引用一樣,隨時都可能被垃圾回收器回收,無法通過虛引用來取得一個對象實(shí)例。虛引用主要用來跟蹤對象被垃圾回收器回收的活動,比如確保某個資源被finalize后,做一些后續(xù)的清理工作。在JDK 1.2版之后提供了PhantomReference類來實(shí)現(xiàn)虛引用。

上面巴拉巴拉說了一堆話,我知道你們肯定不愛看,也記不住。所以鐵子,我總結(jié)成一句話,你聽這句話就夠了。

總結(jié)一句話就是:強(qiáng)引用內(nèi)存不足也不會回收,軟引用內(nèi)存不足才回收,弱引用和虛引用看見就回收。

看到這里有個疑問,在可達(dá)性分析算法中判定為不可達(dá)的對象,就一定「非死不可」嗎?

四、Dead Or Alive

當(dāng)一個對象被判斷為不可達(dá)的時候,這時候該對象處在「緩刑」階段。

意思就是說刀已經(jīng)架你脖子上了,但是還沒落下來,還是有商量的余地的。

要真正宣告一個對象死亡,至少要經(jīng)歷兩次標(biāo)記過程:

如果對象在進(jìn)行可達(dá)性分析后發(fā)現(xiàn)沒有與GC Roots相連接的引用鏈,那它將會被第一次標(biāo)記,隨后進(jìn)行一次篩選,篩選的條件是此對象是否有必要執(zhí)行finalize()方法。

假如對象沒有覆蓋finalize()方法,或者finalize()方法已經(jīng)被虛擬機(jī)調(diào)用過,那么虛擬機(jī)將這兩種情況都視為“沒有必要執(zhí)行”。

如果這個對象被判定為確有必要執(zhí)行finalize()方法,那么該對象將會被放置在一個名為F-Queue的隊列之中,并在稍后由一條由虛擬機(jī)自動建立的、低調(diào)度優(yōu)先級的Finalizer線程去執(zhí)行它們的finalize()方法。

這里所說的“執(zhí)行”是指虛擬機(jī)會觸發(fā)這個方法開始運(yùn)行,但并不承諾一定會等待它運(yùn)行結(jié)束。

這樣做的原因是,如果某個對象finalize()方法執(zhí)行緩慢,或者更極端地發(fā)生了死循環(huán),將很可能導(dǎo)致F-Queue隊列中的其他對象永久處于等待,卡死在這里。甚至導(dǎo)致整個內(nèi)存回收子系統(tǒng)的崩潰。

finalize()方法是對象逃脫死亡命運(yùn)的最后一次機(jī)會,救命的最后一根稻草,稍后收集器將對F-Queue中的對象進(jìn)行第二次小規(guī)模的標(biāo)記。

如果對象要在finalize()中成功拯救自己——只要重新與引用鏈上的任何一個對象建立關(guān)聯(lián)即可,譬如把自己(this關(guān)鍵字)賦值給某個類變量或者對象的成員變量,那在第二次標(biāo)記時它將被移出「即將回收」的集合。

如果對象這時候還沒有逃脫,那基本上它就真的要被回收了,就真要說byebye了。

需要注意的是:任何一個對象的finalize()方法都只會被系統(tǒng)自動調(diào)用一次,如果對象面臨下一次回收,它的finalize()方法不會被再次執(zhí)行,不能指望我每次都救你,我只能救你一次,剩下的就靠你自己了。

看起來對象能夠使用finalize()方法實(shí)現(xiàn)自我救贖,然而這個方法并沒有什么用,放一段《深入理解Java虛擬機(jī)》里的原話:

總結(jié)一下,就是finalize()這個方法并沒什么卵用,大家還是把他忘了好。

對象的回收行為主要發(fā)生在新生代和老年代,那么有兄弟可能會問了,永久代有垃圾回收行為嗎?

五、永久代真的"永久"嗎?

注意一下,這里說的永久代,主要還是針對于Java 8以前,在Java 8以及之后的版本中,永久代被元數(shù)據(jù)區(qū)(Metaspace)取代。

永久代和方法區(qū)和元空間的關(guān)系可能有點(diǎn)混亂,稍微提一嘴:方法區(qū)是由Java虛擬機(jī)規(guī)范定義的一個邏輯區(qū)域,是個邏輯上的概念,而永久代和元空間則是HotSpot對方法區(qū)的兩種不同實(shí)現(xiàn)。

一圖勝千言,直接上圖。

有些人認(rèn)為方法區(qū)(如HotSpot虛擬機(jī)中的元空間或者永久代)是沒有垃圾收集行為的,但其實(shí)方法區(qū)是可以被回收的,只不過回收的判定條件過于苛刻,垃圾收集的成果很差。

并不是名字叫永久代就真的「永久」了,出來混,欠的債總要還的。

我們先搞清楚方法區(qū)要回收的是什么,方法區(qū)的垃圾收集主要回收兩部分內(nèi)容:「廢棄的常量」和「不再使用的類型」。

判定一個常量是否“廢棄”還是相對簡單,看這個常量有沒有在用就行了,而要判定一個類型是否屬于「不再被使用的類」的條件就比較苛刻了。需要同時滿足下面三個條件(注意是同時!):

  • 該類所有的實(shí)例都已經(jīng)被回收,也就是Java堆中不存在該類及其任何派生子類的實(shí)例。
  • 加載該類的類加載器已經(jīng)被回收,這個條件除非是經(jīng)過精心設(shè)計的可替換類加載器的場景,如OSGi、JSP的重加載等,否則通常是很難達(dá)成的。
  • 該類對應(yīng)的java.lang.Class對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法。

Java虛擬機(jī)被允許對滿足上述三個條件的無用類進(jìn)行回收,這里說的僅僅是“被允許”,而并不是和對象一樣,沒有引用了就必然會回收。

關(guān)于是否要對類型進(jìn)行回收,HotSpot虛擬機(jī)提供了-Xnoclassgc參數(shù)進(jìn)行控制。

對于Oracle的HotSpot JVM,這個參數(shù)默認(rèn)是不開啟的,意味著默認(rèn)情況下,類元數(shù)據(jù)可以被垃圾收集器回收。如果你明確使用了 -Xnoclassgc 參數(shù)來啟動JVM,那么就會禁止類的垃圾回收。

也就是說如果沒有開啟這項(xiàng)參數(shù)支持類型的卸載,哪怕滿足了所有條件,也不會進(jìn)行類型的卸載。

上面我們講了對象回收的條件,知道了回收的條件之后,我們再講講怎么被回收,也就是垃圾回收算法。

這塊可是面試重點(diǎn),面試問到JVM這塊少不了要被教育一番,大家好好聽,下次可以跟面試官對波線。

六、垃圾收集算法

垃圾收集(Garbage Collection,GC)算法是Java虛擬機(jī)(JVM)用來自動管理內(nèi)存的一種方式。主要的目標(biāo)是找出那些已經(jīng)不再使用的對象,并釋放它們所占用的內(nèi)存空間。

通俗來說就是發(fā)現(xiàn)垃圾之后怎么收垃圾,是打包帶走,還是來個垃圾分類。

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

標(biāo)記-清除算法是最早出現(xiàn)也是最基礎(chǔ)的垃圾收集算法。

它分為「標(biāo)記」和「清除」兩個階段:首先標(biāo)記出所有需要回收的對象,在標(biāo)記完成后,統(tǒng)一回收掉所有被標(biāo)記的對象,也可以反過來,標(biāo)記存活的對象,統(tǒng)一回收所有未被標(biāo)記的對象。

下圖為使用“標(biāo)記-清除”算法回收前后的狀態(tài):

優(yōu)點(diǎn):不需要進(jìn)行對象的移動,在存活對象比較多的情況下非常高效。

缺點(diǎn):標(biāo)記-清除算法主要缺點(diǎn)有兩個:

  • 第一個是執(zhí)行效率不穩(wěn)定,如果Java堆中包含大量對象,而且其中大部分是需要被回收的,這時必須進(jìn)行大量標(biāo)記和清除的動作。
  • 第二個是內(nèi)存空間的碎片化問題,標(biāo)記、清除之后會產(chǎn)生大量不連續(xù)的「內(nèi)存碎片」,而內(nèi)存碎片是無法被分配對象的,內(nèi)存碎片太多可能會導(dǎo)致當(dāng)以后在程序運(yùn)行過程中需要分配較大對象時無法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集動作。

第一個問題其實(shí)還好,但是第二個內(nèi)存碎片是個大問題,無法容忍。試想一下就跟你打游戲,玩著越來越卡,玩一秒卡二秒,這還怎么玩?

所以后續(xù)的收集算法大多都是以標(biāo)記-清除算法為基礎(chǔ),改進(jìn)了內(nèi)存碎片的問題,對其缺點(diǎn)進(jìn)行改進(jìn)而得到的。

2.標(biāo)記-復(fù)制算法

為了解決標(biāo)記-清除算法面對大量可回收對象時執(zhí)行效率低的問題,1969年Fenichel提出了一種稱為「半?yún)^(qū)復(fù)制(Semispace Copying)」的垃圾收集算法。

它將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對象復(fù)制到另外一塊上面,然后再把已使用過的內(nèi)存空間一次清理掉。

如果內(nèi)存中多數(shù)對象都是存活的,這種算法將會產(chǎn)生大量的內(nèi)存間復(fù)制的開銷,但對于多數(shù)對象都是可回收的情況,算法需要復(fù)制的就是占少數(shù)的存活對象,而且每次都是針對整個半?yún)^(qū)進(jìn)行內(nèi)存回收,分配內(nèi)存時也就不用考慮有空間碎片的復(fù)雜情況。

所以,標(biāo)記-復(fù)制算法通常用在新生代的Eden區(qū)和Survivor區(qū),這兩個區(qū)的對象,朝生夕死,多數(shù)對象都是可回收的。

總結(jié)一下,標(biāo)記-復(fù)制算法有如下優(yōu)點(diǎn)和缺點(diǎn):

  • 優(yōu)點(diǎn):實(shí)現(xiàn)簡單,內(nèi)存回收時不用考慮內(nèi)存碎片的出現(xiàn)。
  • 缺點(diǎn):代價是將可用內(nèi)存縮小為了原來的一半,并且在對象存活率較高時就要進(jìn)行較多的復(fù)制操作,效率將會降低。

下圖為使用復(fù)制算法回收前后的狀態(tài):

標(biāo)記-復(fù)制看著還行,但是比較大的缺點(diǎn)是浪費(fèi)了50%的空間,要知道內(nèi)存是很貴的啊。

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

標(biāo)記-復(fù)制算法在對象存活率較高時就要進(jìn)行較多的復(fù)制操作,效率將會降低。

更關(guān)鍵的是,如果不想浪費(fèi)50%的空間,就需要有額外的空間進(jìn)行分配擔(dān)保,以應(yīng)對被使用的內(nèi)存中所有對象都100%存活的極端情況。

所以在老年代一般不能直接選用這種算法。針對老年代對象的存亡特征,1974年Edward Lueders提出了另外一種有針對性的標(biāo)記-整理(Mark-Compact)算法。

其中的標(biāo)記過程仍然與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對可回收對象進(jìn)行清理,而是讓所有存活的對象都向內(nèi)存空間一端移動,然后直接清理掉邊界以外的內(nèi)存。

  • 優(yōu)點(diǎn):經(jīng)過整理之后,新對象的分配只需要通過指針碰撞便能完成,也解決了內(nèi)存碎片的問題。
  • 缺點(diǎn):GC 暫停的時間會增長,對象移動的時間成本是十分可觀的。

下圖為使用“標(biāo)記-整理”算法回收前后的狀態(tài):

4.標(biāo)記-清除 VS 標(biāo)記-整理

標(biāo)記-清除算法與標(biāo)記-整理算法的本質(zhì)差異在于前者是一種「非移動式」的回收算法,而后者是「移動式」的。

別小看這一差異,是否移動回收后的存活對象是一項(xiàng)優(yōu)缺點(diǎn)并存的風(fēng)險決策。

如果移動存活對象,尤其是在老年代這種每次回收都有大量對象存活區(qū)域,移動存活對象會是一種極為負(fù)重的操作,而且這種對象移動操作必須全程暫停用戶應(yīng)用程序才能進(jìn)行。

但如果跟標(biāo)記-清除算法那樣完全不考慮移動和整理存活對象的話,彌散于堆中的存活對象導(dǎo)致的內(nèi)存碎片問題就只能依賴更為復(fù)雜的內(nèi)存分配器和內(nèi)存訪問器來解決。

譬如通過「分區(qū)空閑分配鏈表」來解決內(nèi)存分配問題。

內(nèi)存的訪問是用戶程序最頻繁的操作,甚至都沒有之一,假如在這個環(huán)節(jié)上增加了額外的負(fù)擔(dān),勢必會直接影響應(yīng)用程序的吞吐量。

基于以上兩點(diǎn),是否移動對象都存在弊端,移動則內(nèi)存回收時會更復(fù)雜,不移動則內(nèi)存分配時會更復(fù)雜。從垃圾收集的停頓時間來看,不移動對象停頓時間會更短,但是從整個程序的吞吐量來看,移動對象會更劃算。

HotSpot虛擬機(jī)里面關(guān)注吞吐量的Parallel Scavenge收集器是基于標(biāo)記-整理算法的,而關(guān)注延遲的CMS收集器則是基于標(biāo)記-清除算法的,這也從側(cè)面印證這點(diǎn)。

另外,還有一種「和稀泥式」解決方案可以不在內(nèi)存分配和訪問上增加太大額外負(fù)擔(dān),做法是讓虛擬機(jī)平時多數(shù)時間都采用標(biāo)記-清除算法,暫時容忍內(nèi)存碎片的存在,直到內(nèi)存空間的碎片化程度已經(jīng)大到影響對象分配時,再采用標(biāo)記-整理算法收集一次,以獲得規(guī)整的內(nèi)存空間。

基于標(biāo)記-清除算法的CMS收集器采用的就是這種處理辦法。

當(dāng)CMS出現(xiàn)「并發(fā)失敗”(Concurrent Mode Failure)」時,這時會啟用Serial Old收集器來重新進(jìn)行老年代的垃圾收集,而Serial Old正是基于標(biāo)記-整理算法。

好了,本篇文章到這就結(jié)束了,這篇文章主要是講JVM是怎么回收對象的,明白了這個,JVM算是初窺門徑了。

責(zé)任編輯:趙寧寧 來源: Java隨想錄
相關(guān)推薦

2023-02-16 07:30:38

引用計數(shù)算法

2021-01-21 08:00:25

JVM

2023-01-26 00:25:09

JVM設(shè)置技術(shù)

2024-03-07 17:21:12

HotSpotJVMHot Code

2021-06-09 07:56:51

JvmJVM面試題Java

2021-06-03 08:32:18

JVM調(diào)優(yōu)虛擬機(jī)

2023-10-07 08:41:42

JavaJVM

2022-07-15 08:22:42

對象符串鍵Symbol

2024-01-02 10:31:14

JVM內(nèi)存整體

2015-08-13 10:29:12

面試面試官

2024-12-25 15:44:15

2024-02-04 10:08:34

2024-05-11 15:11:44

系統(tǒng)軟件部署

2022-01-18 09:02:45

請求前端代碼

2023-02-08 07:04:20

死鎖面試官單元

2024-10-15 10:00:06

2011-05-11 09:01:29

面向?qū)ο蠹夹g(shù)函數(shù)式語言

2022-07-19 07:02:47

JVMGC分代收集

2010-08-12 16:28:35

面試官

2025-09-03 04:00:00

小紅書Feed流系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

蜜桃av噜噜一区| 国产亚洲精品美女久久久久久久久久| 亚洲精品写真福利| 国产色综合一区二区三区| 亚洲综合久久网| 婷婷亚洲综合| 国产视频久久久久久久| 国产九九在线视频| 国产后进白嫩翘臀在线观看视频| 久久久久久免费| 91嫩草免费看| 激情网站在线观看| 激情一区二区| 日韩视频在线免费观看| 久久久久麻豆v国产精华液好用吗| 国产精品字幕| 午夜精品免费在线观看| 亚洲一区3d动漫同人无遮挡| 神马午夜电影一区二区三区在线观看 | 亚洲性色av| 亚洲欧美一区二区三区久本道91| 美日韩免费视频| 人妻精品无码一区二区| 精品亚洲成a人在线观看| 欧美一级免费视频| 九九热精品免费视频| 欧美韩日一区| 亚洲性无码av在线| 日本免费福利视频| 国产精品自在| 日韩欧美亚洲另类制服综合在线| 国产又猛又黄的视频| 福利影院在线看| 亚洲三级免费电影| 亚洲精品国产精品久久| 你懂的免费在线观看| 丰满白嫩尤物一区二区| 91久久国产综合久久91精品网站 | 中文字幕伦理片| 亚洲成a人片77777在线播放 | 精品无码人妻少妇久久久久久| 欧美视频免费看| 欧美午夜精品一区二区三区| 激情网站五月天| 成人性生活av| 色综合天天视频在线观看 | 免费成人美女在线观看| 日韩免费av一区二区| 中文字幕一区在线播放| 亚洲综合另类| 秋霞成人午夜鲁丝一区二区三区| 国产成人精品一区二三区| 亚洲精品麻豆| 97色在线观看| 国产无遮挡呻吟娇喘视频| 一区二区黄色| 日本欧美国产在线| 欧美人一级淫片a免费播放| 久久久久久穴| 国产精品久久99久久| 天天天天天天天干| 蜜桃精品视频在线观看| 成人在线观看视频网站| 99久久精品国产一区色| 福利一区福利二区| 国内精品久久国产| 欧美成人综合在线| 欧美国产激情一区二区三区蜜月| 一区二区在线不卡| 国内视频在线精品| 欧美色婷婷久久99精品红桃| 精品呦交小u女在线| 亚洲人人夜夜澡人人爽| 国产精品一区二区99| 色一区av在线| 欧美精品久久久久性色| 亚洲黄网站黄| 国产精品pans私拍| 一区二区www| 国产成人在线视频网址| 久久精品国产第一区二区三区最新章节 | 欧美在线小视频| 中国黄色片免费看| 欧美视频二区欧美影视| 亚洲精品久久久久久下一站| 在线视频第一页| 91精品久久久久久久久久不卡| 九色精品免费永久在线| 区一区二在线观看| 国产成人综合在线播放| 欧美日韩无遮挡| 国产日产一区二区三区| 激情懂色av一区av二区av| 久久久精品麻豆| 中文字幕区一区二区三| 亚洲色图美腿丝袜| 欧美国产精品一二三| 性欧美暴力猛交另类hd| 91香蕉亚洲精品| 欧美新色视频| 夜色激情一区二区| 三级在线视频观看| 美女av一区| 久久精品欧美视频| www.国产com| 国产精品亚洲综合一区在线观看| 欧美亚洲丝袜| 国产丝袜精品丝袜| 3d动漫精品啪啪一区二区竹菊 | 日本xxxx黄色| 国产成人福利av| 久久亚洲精品国产亚洲老地址| 精品欧美一区二区三区免费观看| 国产一区亚洲一区| 日韩中文字幕av在线| 福利影院在线看| 日韩欧美一区二区视频| 美国美女黄色片| 国产精品婷婷| 精品999在线观看| 羞羞网站在线看| 67194成人在线观看| jizz中文字幕| 亚洲巨乳在线| 国产福利久久精品| 中国av在线播放| 欧美日韩美少妇| 亚洲成人黄色av| 亚洲精品看片| 国产偷国产偷亚洲高清97cao| h网站久久久| 69堂国产成人免费视频| 亚洲少妇xxx| 麻豆成人av在线| 色视频一区二区三区| 亚洲人体影院| 精品在线欧美视频| 麻豆精品久久久久久久99蜜桃| 成人免费观看视频| 日本老太婆做爰视频| 亚洲香蕉久久| 久久成人精品电影| a级片在线免费看| 亚洲人成电影网站色mp4| 99re6在线观看| 91精品国产自产拍在线观看蜜 | 一级久久久久久| 久久久国产精品不卡| 免费在线观看毛片网站| 国产成人1区| 国产精品99导航| 3d成人动漫在线| 777欧美精品| 欧美成人精品欧美一| 国产精品123| 91成人综合网| 人人精品视频| 欧美在线视频免费播放| 东热在线免费视频| 欧美日韩国产综合视频在线观看| 很污很黄的网站| 国产成人午夜精品5599| 少妇高潮毛片色欲ava片| 天天操综合520| 国产精品6699| 国产精品剧情| 亚洲精品av在线播放| 四虎成人在线观看| 国产精品进线69影院| 午夜诱惑痒痒网| 日韩天堂av| 色99中文字幕| 亚洲乱码一区| 热re91久久精品国99热蜜臀| 在线观看av的网站| 日韩欧美亚洲另类制服综合在线 | 美足av综合网| 精品性高朝久久久久久久| 中文字幕在线观看欧美| 亚洲最新在线观看| 亚洲色成人网站www永久四虎| 久久爱www久久做| 无码粉嫩虎白一线天在线观看| 精品在线播放| 亚洲自拍欧美色图| 成人欧美大片| 欧美俄罗斯乱妇| 韩国精品视频| 日韩欧美国产三级| 日本一区二区三区久久| 国产免费成人| 蜜桃视频在线观看一区| 奇米在线7777在线精品| 国产香蕉一区二区三区| 日韩影视高清在线观看| 国产一区二区在线播放| 爱福利在线视频| 中文字幕av一区二区| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的| 91福利视频网站| 久久国产一级片| 中文字幕不卡的av| 中文字幕乱视频| 久久99热99| 亚洲爆乳无码专区| 亚洲激情影院| 亚洲天堂第一区| 韩日一区二区三区| 国产乱码精品一区二区三区不卡| 成人在线视频观看| 日本高清不卡的在线| 天堂成人av| 俺去了亚洲欧美日韩| 国精一区二区| 国产亚洲免费的视频看| 国产伦一区二区| 色老头久久综合| 久久视频免费在线观看| 国产美女99p| 欧美亚洲日本| 精品欧美乱码久久久久久| 国产裸体美女永久免费无遮挡| 亚洲一级在线观看| 中国一级片在线观看| 国产日韩精品一区二区三区在线| 中文成人无字幕乱码精品区| 国产高清不卡二三区| 网站在线你懂的| 久久成人羞羞网站| 亚洲36d大奶网| 日本人妖一区二区| 欧美一级片中文字幕| 野花国产精品入口| 玩弄中年熟妇正在播放| 亚洲韩日在线| 日韩五码在线观看| 激情偷拍久久| 妺妺窝人体色777777| 欧美日韩视频一区二区三区| 在线无限看免费粉色视频| 欧美独立站高清久久| 亚洲人成网站在线观看播放| 俺要去色综合狠狠| 亚洲精品视频一区二区三区| 精品一区二区三区的国产在线观看| 欧美日韩一区二区三区免费| 中国av一区| 婷婷久久青草热一区二区| 欧美精品久久久久久| 亚洲第一在线综合在线| 日韩精品dvd| 综合操久久久| 欧美日韩亚洲一区| 丰满少妇大力进入| 羞羞答答国产精品www一本| 日韩中文字幕免费在线| 免费观看一级特黄欧美大片| 婷婷免费在线观看| 国内精品国产三级国产a久久| 黄色a级三级三级三级| 国产黄色精品视频| 少妇一级淫片免费放播放| 久久综合色之久久综合| 91狠狠综合久久久久久| 中文字幕在线免费不卡| 69av.com| 色综合亚洲欧洲| 伊人色综合久久久| 日韩一区二区在线观看视频| 人妻无码中文字幕免费视频蜜桃| 日韩av在线最新| aaa日本高清在线播放免费观看| 久久天天躁夜夜躁狠狠躁2022| 人人澡人人添人人爽一区二区| 性欧美亚洲xxxx乳在线观看| 精品欧美一区二区三区在线观看| 91精品国产综合久久男男| 亚洲精品一区二区三区中文字幕 | 国产精品每日更新| 久久精品亚洲a| 亚洲成人av资源| 中文字幕在线观看视频免费| 在线综合亚洲欧美在线视频 | 在线观看国产精品淫| 任你弄在线视频免费观看| 国产成人在线亚洲欧美| 国产成人视屏| 欧美理论一区二区| 欧美有码视频| 久久久久久久久久福利| 国产剧情一区在线| 熟女少妇内射日韩亚洲| 亚洲一区免费视频| 亚洲天堂免费av| 国产丝袜视频一区| av免费在线免费| 国产成人精品一区| 97青娱国产盛宴精品视频| 视频一区二区三区在线观看| 亚洲激情欧美| 国产精品熟女一区二区不卡| 国产亚洲综合性久久久影院| 国产高潮流白浆| 在线观看视频一区| 少妇又色又爽又黄的视频| 久久综合亚洲社区| 最新欧美电影| 精品国产一二| 午夜精品网站| 五月天av在线播放| 国产午夜亚洲精品理论片色戒| 久久97人妻无码一区二区三区| 欧美日韩国产另类一区| 亚洲av成人精品毛片| 欧美大奶子在线| 日韩成人在线电影| 日本欧美色综合网站免费| 亚洲国产国产亚洲一二三| 中文字幕12页| 亚洲欧洲日产国码二区| 在线观看污污网站| 亚洲精品www久久久| 牛牛精品在线视频| 亚洲综合中文字幕在线| 国产精品久久久久无码av| 91日韩视频在线观看| 久久久久国色av免费看影院| 国产精品久久久免费视频| 亚洲аv电影天堂网| 欧美xxxx免费虐| 91成人免费观看| 影视亚洲一区二区三区| 三级av免费看| 亚洲素人一区二区| 国产美女免费视频| 精品国产一区二区三区在线观看| 成人四虎影院| 台湾成人av| 蜜臀av性久久久久蜜臀av麻豆| 日韩精品无码一区二区三区久久久| 精品高清一区二区三区| 天天插天天干天天操| 欧美一级黑人aaaaaaa做受| 亚洲美女久久| 国产又大又黄又粗的视频| 国产欧美一区二区三区在线看蜜臀| 国产一区二区视频网站| 中文字幕亚洲无线码在线一区| 成人在线视频观看| 一级黄色免费在线观看| 韩国理伦片一区二区三区在线播放| 国产天堂av在线| 欧美大片在线观看一区二区| 大桥未久在线播放| 精品欧美一区二区在线观看视频| 国产精品丝袜xxxxxxx| www在线观看免费视频| 在线观看www91| 米奇精品一区二区三区| 国产成人看片| 老司机久久99久久精品播放免费 | 亚洲制服丝袜av| 婷婷色在线视频| 国产成人亚洲综合| 99久久99久久精品国产片桃花| 欧美体内she精高潮| 午夜欧美一区二区三区在线播放| 香蕉视频911| 国产欧美一区二区三区视频| 国内精品亚洲| 无码熟妇人妻av| 欧美精品在线一区二区| 久久亚洲导航| 日韩av高清| 国产一区二区毛片| 欧美日韩综合在线观看| 最近2019免费中文字幕视频三 | 日韩成人免费视频| jizz亚洲女人高潮大叫| www.亚洲成人网| 久久精品免费在线观看| 精品人妻久久久久一区二区三区| 777午夜精品福利在线观看| 欧美丝袜激情| 日本中文字幕有码| 欧洲一区在线观看| 尤物yw193can在线观看| 欧美日本国产精品| 国产精品一区二区久久精品爱涩| 特级做a爱片免费69| 久久精品国产久精国产一老狼| 国产乱人伦精品一区| 亚洲激情在线看| 欧美丝袜第一区| 在线观看午夜av| 色一情一乱一伦一区二区三区 | 福利影院在线看| 91免费视频黄| 国产女主播在线一区二区| 免费看国产片在线观看|