久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java常见面试题】JVM篇

發布時間:2024/3/13 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java常见面试题】JVM篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

導航:

【黑馬Java筆記+踩坑匯總】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外賣+SpringCloud+黑馬旅游+谷粒商城+學成在線+牛客面試題

目錄

1、說說你了解的JVM內存模型

2、簡單說下你對JVM的了解

3、說說類加載機制

4、說說對象的實例化過程

5、說說JVM的雙親委派模型

6、說說JVM調優思路

7、項目中有沒有實際的JVM調優經驗?

8、請你說說內存溢出

9、請你說說內存泄漏

10、JVM中一次完整的GC流程是怎樣的

11、說說JVM的垃圾回收機制

12、說說GC的可達性分析算法

13、說說JVM的垃圾回收算法

14、說說七個垃圾回收器

15、請你講下CMS(并發標記清除)回收器

16、請你講下G1垃圾優先回收器


1、說說你了解的JVM內存模型

得分點?

類加載子系統、運行時數據區、執行引擎

JVM由三部分組成:類加載子系統、運行時數據區、執行引擎

類加載子系統:通過類加載機制加載類的class文件,如果該類是第一次加載,會執行加載、驗證、解析。只負責class文件的加載,至于是否可運行,則由執行引擎決定。

類加載過程是在類加載子系統完成的:加載 --> 鏈接(驗證 --> 準備 --> 解析) --> 初始化

運行時數據區:

在程序運行時,存儲程序的內容(例如字節碼、對象、參數、返回值等)。運行時數據區包括本地方法棧、虛擬機棧、方法區、堆、程序計數器。

只有方法區和堆是各線程共享的進程內存區域,其他運行區都是每個線程可以獨立擁有的。

  • 本地方法棧:存放本地方法調用過程中的棧幀。用于管理本地方法的調用,本地方法是C語言寫的。不是所有虛擬機都支持本地方法棧,例如Hotspot虛擬機就是將本地方法棧和虛擬機棧合二為一。棧解決程序的運行問題,即程序如何執行、如何處理數據。
    • 棧幀:棧幀是棧的元素,由三部分組成,即局部變量表(存方法參數和局部變量)、操作數棧(存方法執行過程中的中間結果,或者其他暫存數據)和幀數據區(存方法返回地址、線程引用等附加信息)。
  • 虛擬機棧:存放Java方法調用過程中的棧幀。用于管理Java方法的調用,Java方法是開發時寫的Java方法。
  • 方法區:可以看作是一塊獨立于Java堆的內存空間,存儲已被虛擬機加載的類型信息(類、接口、枚舉、注解等類型的全名、父類名、父接口名列表、修飾符)、常量、靜態變量、即時編譯器編譯后的代碼緩存等。方法區是各線程共享的內存區域。
    • 方法區和永久代、元空間的關系:方法區是一個抽象概念,永久代和元空間是方法區的實現方式。
      • 永久代:屬于JVM方法區的內存,用來存儲類的元數據,如類名、方法信息、字段信息等一些靜態的數據。JDK7及之前方法區也叫永久代。缺點是內存大小固定,容易出現oom問題。可以通過-XX:PermSize設置永久代大小。永久代對象只能通過Major GC(又稱Full GC)進行垃圾回收。
      • 元空間:是Hotspot在JDK8引入的,用于取代永久代。元空間屬于本地內存,由操作系統直接管理,不再受JVM管理。同時內存空間可以自動擴容,避免內存溢出。默認情況下元空間可以無限使用本地內存,也可以通過-XX:MetaspaceSize限制內存大小。
    • 常量池:就是一張表,JVM根據這張常量表找到要執行的類信息和方法信息
      • 類常量池:是.class字節碼文件中的資源倉庫,主要存放字面量(表示字符串值和數值,例如文本字符串、final常量、靜態變量)和符號引用(類或接口、方法、成員變量的符號引用,具體包括類全限定名、字段名和描述符、方法名和描述符)。
      • 運行時常量池:類加載的“加載”階段會創建運行時常量池,存放類常量池一部分符號引用。在類加載的“解析”階段JVM會把運行時常量池的這些符號引用轉為直接引用。類常量池。類常量池在字節碼文件中的,運行時常量池在內存中。
      • 字符串常量池:專門針對String類型設計的常量池。是當前應用程序里所有線程共享的,每個jvm只有一個字符串常量池。存儲字符串對象的引用。在創建String對象時,JVM會先在字符串常量池尋找是否已存在相同字符串的引用,如果有的話就直接返回引用,沒的話就在堆中創建一個對象,然后常量池保存這個引用并返回引用。
  • 堆:存放對象實例、實例變量、數組,包括新生代(伊甸園區、幸存區S0和S1)和老年代。堆是垃圾收集器管理的內存區域。堆解決的是數據存儲的問題,即數據怎么放、放在哪兒。堆實際內存空間可以不連續,大小可以選擇固定大小或可擴展,堆是各線程共享的內存區域。
  • 程序計數器(PC寄存器):存放下一條字節碼指令的地址,由執行引擎讀取下一條字節碼指令并轉為本地機器指令進行執行。是程序控制流(分支、循環、跳轉、線程恢復)的指示器,只有它不會拋出OutOfMemoryError。每個線程有自己獨立的程序計數器,以便于線程在切換回來時能知道下一條指令是什么。程序計數器生命周期與線程一致。

執行引擎:將字節碼指令解釋/編譯為對應平臺上的本地機器指令。充當了將高級語言翻譯為機器語言的譯者。執行引擎在執行過程中需要執行什么樣的字節碼指令依賴于PC寄存器。每當執行完一項指令操作后,PC寄存器就會更新下一條需要被執行的指令地址。

  • 字節碼指令(JVM指令):字節碼文件中的指令,內部只包含一些能夠被JVM所識別的字節碼指令、符號表,以及其他輔助信息,不能夠直接運行在操作系統之上。
  • 本地機器指令:可以直接運行在操作系統之上。

內存模型:

內存模型里的運行時數據區:

JVM由三部分組成:類加載子系統、執行引擎、運行時數據區。

1. 類加載子系統,可以根據指定的全限定名來載入類或接口。

2. 運行時數據區。當程序運行時,JVM需要內存來存儲許多內容,例如:字節碼、對象、參數、返回值、局部變量、運算的中間結果,等等,JVM會把這些東西都存儲到運行時數據區中,以便于管理。而運行時數據區又可以分為方法區、堆、虛擬機棧、本地方法棧、程序計數器

3. 執行引擎,負責執行那些包含在被載入類的方法中的指令。

加分回答-運行時數據區

運行時數據區是開發者重點要關注的部分,因為程序的運行與它密不可分,很多錯誤的排查也需要基于對運行時數據區的理解。在運行時數據區所包含的幾塊內存空間中,方法區和堆是線程之間共享的內存區域,而虛擬機棧、本地方法棧、程序計數器則是線程私有的區域,就是說每個線程都有自己的這個區域。?

2、簡單說下你對JVM的了解

得分點

Java跨平臺、HotSpot、熱點代碼探測技術、內存模型、垃圾回收算法、垃圾回收器

跨平臺?

Java跨平臺,JVM不跨平臺。?

JVM是Java語言跨平臺的關鍵,Java在虛擬機層面隱藏了底層技術的復雜性以及機器與操作系統的差異性。運行程序的物理機千差萬別,而JVM則在千差萬別的物理機上面建立了統一的運行平臺,實現了在任意一臺JVM上編譯的程序,都能在任何其他JVM上正常運行。這一極大的優勢使得Java應用的開發比傳統C/C++應用的開發更高效快捷,程序員可以把主要精力放在具體業務邏輯,而不是放在保障物理硬件的兼容性上。通常情況下,一個程序員只要了解了必要的Java類庫、Java語法,學習適當的第三方開發框架,就已經基本滿足日常開發的需要了,JVM會在用戶不知不覺中完成對硬件平臺的兼容及對內存等資源的管理工作。

默認Java虛擬機HotSpot?

HotSpot是Sun/OracleJDK和OpenJDK中的默認Java虛擬機,也是目前使用范圍最廣的Java虛擬機。HotSpot既繼承了Sun之前兩款商用虛擬機的優點,也有許多自己新的技術優勢,如它名稱中的HotSpot指的就是它的熱點代碼探測技術。HotSpot的熱點代碼探測能力可以通過執行計數器找出最具有編譯價值的代碼,然后通知即時編譯器以方法為單位進行編譯。如果一個方法被頻繁調用,或方法中有效循環次數很多,將會分別觸發標準即時編譯和棧上替換編譯行為。通過編譯器與解釋器恰當地協同工作,可以在最優化的程序響應時間與最佳執行性能中取得平衡,而且無須等待本地代碼輸出才能執行程序,即時編譯的時間壓力也相對減小,這樣有助于引入更復雜的代碼優化技術,輸出質量更高的本地代碼。本地方法棧和Java方法棧是合并的。

內存模型?

JVM由三部分組成:類加載子系統、運行時數據區、執行引擎。

類加載子系統:根據指定的全限定名來載入類或接口。

運行時數據區:在程序運行時,存儲程序的內容,例如:字節碼、對象、參數、返回值等。而運行時數據區又可以分為方法區、堆、虛擬機棧、本地方法棧、程序計數器。

執行引擎:負責執行那些包含在被載入類的方法中的指令。

3、說說類加載機制

得分點
加載、驗證、準備、解析、初始化

標準回答?

類加載過程:加載、鏈接(驗證、準備、解析)、初始化。這個過程是在類加載子系統完成的。

加載:生成類的Class對象。

  • 通過一個類的全限定名獲取定義此類的二進制字節流
  • 將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構。包括創建運行時常量池,將類常量池的部分符號引用放入運行時常量池。
  • 在內存中生成一個代表這個類的java.lang.Class對象,作為方法區這個類各種數據的訪問入口。注意類的class對象是運行時生成的,類的class字節碼文件是編譯時生成的。
  • 鏈接:將類的二進制數據合并到JRE中。該過程分為以下3個階段:

    • 驗證:確保代碼符合JAVA虛擬機規范和安全約束。包括文件格式驗證、元數據驗證、字節碼驗證、符號引用驗證。
      • 文件格式驗證:驗證字節流是否符合Class文件格式規范。例如版本號是否在JVM兼容范圍、常量池的常量是否有不被支持的常量類型、是否魔數0xCAFEBABE開頭。
      • 元數據驗證:元數據是類的全名、方法信息、字段信息、繼承關系等。例如驗證類名接口名標識符有沒有符合規范、有沒有實現接口的所有方法、有沒有實現抽象類的所有抽象方法、是不是繼承了final類等。
      • 字節碼驗證:主要校驗類的方法體,通過數據流和控制流分析,確定程序語義是合法的、符合邏輯的。如:保證方法體中的類型轉換是有效的;保證跳轉指令不會跳轉到方法體以外的字節碼指令上;保證任意時刻操作數棧的數據類型與指令代碼序列都能配合工作。
      • 符號引用驗證:驗證類全限定名是否能找到對應的類、引用的對象是否存在,是否有權引用等。
    • 準備:為類變量(即static變量)分配內存并賦零值。
    • 解析:將方法區-運行時常量池內的符號引用(類的名字、成員名、標識符)轉為直接引用(實際內存地址,不包含任何抽象信息,因此可以直接使用)。

    初始化:類變量賦初值、執行靜態語句塊。

    ?

    一個類型從被加載到虛擬機內存中開始,到卸載出內存為止,它的整個生命周期將會經歷加載、驗證、準備、解析、初始化、使用、卸載七個階段,其中驗證、準備、解析三個部分統稱為連接,而前五個階段則是類加載的完整過程。

    ?

    1. 在加載階段JVM需要在內存中生成一個代表這個類的Class對象,作為方法區這個類的各種數據的訪問入口
    2. 驗證階段大致上會完成下面四個階段的檢驗動作:文件格式驗證、元數據驗證、字節碼驗證、符號引用驗證。
    3. 準備階段是正式為類中定義變量(靜態變量)分配到內存并設置類變量初始值的階段,這些變量所使用的內存都應當在方法區中進行分配,但必須注意到方法區本身是一個邏輯上的區域。
    4. 解析階段是Java虛擬機將常量池內的符號替換為直接引用的過程,符號引用以一組符號來描述所引用的目標,直接引用是可以直接指向目標的指針、相對偏移量或者一個能間接定位到目標的句柄。
    5. 類的初始化階段是類加載過程的最后一個步驟,直到初始化階段,Java虛擬機才真正開始執行類中編寫的Java程序代碼,將主導權移交給應用程序。本質上,初始化階段就是執行類構造器的過程。并不是程序員在Java代碼中直接編寫的方法,它是Javac編譯器的自動生成物。

    加分回答
    關于在什么情況下需要開始類加載過程的第一個階段“加載”,《Java虛擬機規范》中并沒有進行強制約束,這點可以交給虛擬機的具體實現來自由把握。但是對于初始化階段,《Java虛擬機規范》則是嚴格規定了有且只有六種情況必須立即對類進行“初始化”:
    1. 使用new實例化對象、讀寫類的靜態字段、調用類的靜態方法時。
    2. 使用java.lang.reflect包的方法對類型進行反射調用時。
    3. 當初始化類時,若發現其父類還沒有進行過初始化,則先初始化這個父類。
    4. 虛擬機啟動時,需要指定一個要執行的主類,虛擬機會先初始化這個主類。
    5. 當使用JDK 7新加入的動態語言支持時,如果一個java.lang.invoke.MethodHandle實例最后的解析結果為REF_getStatic、REF_putStatic、REF_invokeStatic、REF_newInvokeSpecial四種類型的方法句柄,并且這個方法句柄對應的類沒有進行過初始化,則需要先觸發其初始化。
    6. 當一個接口中定義了JDK 8新加入的默認方法(被default關鍵字修飾的接口方法)時,如果有這個接口的實現類發生了初始化,那該接口要在其之前被初始化。

    4、說說對象的實例化過程

    得分點

    類加載、分配內存(內存規整和不規整)、處理并發安全問題、設置對象頭、成員變量賦初值、執行構造方法

    對象的實例化過程:

  • 判斷對應類是否加載過:首先JVM檢查在方法區Metaspace(元空間)的常量池里能否定位到該類的符號引用,能的話通過符號引用檢查該類是否加載鏈接初始化過;若沒有則在雙親委派機制下,當前類加載器調用findClass()方法查找類的.class字節碼文件,然后調用loadClass()方法遵循雙親委派機制加載鏈接初始化類到內存中,并生成類的class對象,作為方法區這個類各種數據的訪問入口。
  • 創建對象:
  • 分配堆內存空間:如果內存規整:(例如標記整理算法),采用指針碰撞法為新對象分配內存。如果內存不規整:(有內存碎片,例如標記清除算法),在空閑列表里找到合適大小的空閑內存分配給新對象。現在主流虛擬機新生代都是使用標記復制算法,內存都是規整的。
  • 處理并發安全問題:CAS失敗重試,區域加鎖,每個線程分配一塊TLAB內存緩沖區。
  • 設置對象頭:將哈希碼、GC分代年齡、鎖信息、GC標記等存在對象頭的Mark Word中;
  • 成員變量賦初值:若指定了初值則賦指定的值。若未指定初值,則基本類型賦0或false、引用類型賦null。
  • 執行構造方法:有父類的話,子類構造方法第一行會隱式或手動顯式地加super()。
  • 指針碰撞法:?指針一直在空閑和已用內存中間,分配空間時,指針往空閑內存方向移動一段距離,使這段距離剛好滿足新對象內存大小。

    元空間:是Hotspot在JDK8引入的,用于取代永久代。元空間屬于本地內存,由操作系統直接管理,不再受JVM管理。同時也可以自動擴容內存空間,避免內存溢出。默認情況下元空間可以無限使用本地內存,也可以通過-XX:MetaspaceSize限制內存大小。

    指針碰撞法:?所有用過的內存在一邊,空閑的內存在另外一邊,中間放著一個指針作為分界點的指示器,分配內存就僅僅是把指針向空閑那邊挪動一段與對象大小相等的距離罷了。

    如果垃圾收集器選擇的是Serial、ParNew這種基于壓縮算法的,虛擬機采用這種分配方式。 一般使用帶有compact( 整理)過程的收集器時,使用指針碰撞。

    回顧synchronized用到的對象頭:

    前面多線程篇有提到,synchronized鎖基于對象頭的Mark Word,鎖升級四個狀態里,偏向鎖和輕量級鎖基于CAS原子替換,重量級鎖基于Monitor對象。對象頭里Mark Word存哈希碼、GC標記、鎖信息。對象頭里類型指針指向當前對象所在的類。

    鎖信息:

    • 鎖標志位:01未鎖定、01可偏向、00輕量級鎖、10重量級鎖、11垃圾回收標記

    • 偏向鎖線程ID、時間戳等

    • 輕量級鎖的指針:指向鎖記錄的指針

    • 重量級鎖的指針:指向Monitor鎖的指針

    【Java面試八股文】Java多線程篇_java多線程八股文_vincewm的博客-CSDN博客

    在JVM中,對象的創建遵循如下過程:

    當JVM遇到一條字節碼new指令時,首先將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,并且檢查這個符號引用代表的類是否已被加載、解析和初始化過。如果沒有,那必須先執行相應的類加載過程

    在類加載檢查通過后,接下來虛擬機將為新生對象分配內存。對象所需內存的大小在類加載完成后便可完全確定,為對象分配空間的任務實際上便等同于把一塊確定大小的內存塊從Java堆中劃分出來。

    內存分配完成之后,虛擬機必須將分配到的內存空間都初始化為零值,如果使用了TLAB的話,這一項工作也可以提前至TLAB分配時順便進行。這步操作保證了對象的實例字段在Java代碼中可以不賦初始值就直接使用,使程序能訪問到這些字段的數據類型所對應的零值。

    接下來,虛擬機還要對對象進行必要的設置,例如這個對象是哪個類的實例、如何才能找到類的元數據信息、對象的哈希碼、對象的GC分代年齡等信息。這些信息存放在對象的對象頭之中。根據虛擬機當前運行狀態的不同,如是否啟用偏向鎖等,對象頭會有不同的設置方式。

    在上面工作都完成之后,從虛擬機的視角來看,一個新的對象已經產生了。但是從Java程序的視角看來,對象創建才剛剛開始——構造函數,即Class文件中的`<init>()`方法還沒有執行,所有的字段都為默認的零值,對象需要的其他資源和狀態信息也還沒有按照預定的意圖構造好。

    一般來說,new指令之后會接著執行`<init>()`方法,按照程序員的意愿對對象進行初始化,這樣一個真正可用的對象才算完全被構造出來。

    5、說說JVM的雙親委派模型

    得分點

    三個默認類加載器、工作過程、作用

    JVM三個默認類加載器

    • 啟動類加載器BootStrapClassLoader(最頂端):無法被Java程序直接引用,只能加載委派過來的請求。
    • 擴展類加載器ExtClassLoader:可以直接用來加載類,也可以通過委派加載類。Ext是Extract縮寫,譯為擴展、提取。
    • 應用程序類加載器AppClassLoader(最低端):負責加載類路徑所有的類庫,開發者同樣可以直接在代碼中使用這個類加載器。

    雙親委派模型的工作過程

    雙親委派模型的工作過程是,如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應該傳送到最頂層的啟動類加載器中,只有當父加載器反饋自己無法完成這個加載請求時,子加載器才會嘗試自己去完成加載。

    具體的流程:

    JVM在加載一個類時,會調用應用程序類加載器的loadClass()方法來加載這個類,不過在這方法中,會先使用擴展類加載器的loadClass()方法來加載類,同樣擴展類加載器的loadClass()方法中會先使用啟動類加載器來加載類;

    如果啟動類加載器加載到了就直接成功,如果啟動類加載器沒有加載到,那擴展類加載器就會自己嘗試加載該類,如果沒有加載到,那么則會由應用程序類加載器來加載這個類。

    作用:

    • 避免類的重復加載:無論哪一個類加載器要加載某類,最終都是委派最頂端的啟動類加載器。
    • 防止核心API被篡改:如果沒有使用雙親委派模型,都由各個類加載器自行去加載的話,如果用戶自己也編寫了一個名為java.lang.Object的類,并放在程序的ClassPath中,那系統中就會出現多個不同的Object類,Java類型體系中最基礎的行為也就無從保證,應用程序將會變得一片混亂。

    類路徑:

    classpath:類路徑classpath是編譯之后的target文件夾下的WEB-INF/class文件夾。內容等同于打包前的src.main.java和src.main.resource下的目錄和文件

    classpath* :不僅包含class路徑,還包括jar文件中(class路徑)進行查找.?

    對于JDK8及其之前版本的Java應用,都會使用到以下3個系統提供的類加載器來進行加載:

    1.啟動類加載器

    這個類加載器負責加載存放在`<java_home>\lib`目錄,或者被-Xbootclasspath參數所指定的路徑中存放的,而且是Java虛擬機能夠識別的類庫加載到虛擬機的內存中。注意,Java虛擬機會按照文件名識別類庫,例如rt.jar、tools.jar,對于名字不符合的類庫即使放在lib目錄中也不會被加載。啟動類加載器無法被Java程序直接引用,用戶在編寫自定義類加載器時,如果需要把加載請求委派給引導類加載器去處理,那直接使用null代替即可,即讓java.lang.ClassLoader.getClassLoader()返回null。

    2.擴展類加載器

    這個類加載器是在類sun.misc.Launcher$ExtClassLoader中以Java代碼的形式實現的。它負責加載`<java_home>\lib\ext`目錄中,或者被java.ext.dirs系統變量所指定的路徑中所有的類庫。由于擴展類加載器是由Java代碼實現的,開發者可以直接在程序中使用擴展類加載器來加載Class文件

    3.應用程序類加載器

    這個類加載器由sun.misc.Launcher$AppClassLoader來實現。它負責加載用戶類路徑(ClassPath)上所有的類庫,開發者同樣可以直接在代碼中使用這個類加載器。

    用戶還可以加入自定義的類加載器來進行拓展,這些類加載器之間的協作關系“通常”如下圖所示。圖中展示的各種類加載器之間的層次關系被稱為類加載器的“雙親委派模型”。雙親委派模型要求除了頂層的啟動類加載器外,其余的類加載器都應有自己的父類加載器。不過這里類加載器之間的父子關系一般不是以繼承的關系來實現的,而是通常使用組合關系來復用父加載器的代碼。

    ?

    工作過程

    雙親委派模型的工作過程是,如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應該傳送到最頂層的啟動類加載器中,只有當父加載器反饋自己無法完成這個加載請求時,子加載器才會嘗試自己去完成加載。

    作用:避免類的重復加載、防止核心API被篡改

    使用雙親委派模型來組織類加載器之間的關系,一個顯而易見的好處就是Java中的類隨著它的類加載器一起具備了一種帶有優先級的層次關系。例如類java.lang.Object,它存放在rt.jar之中,無論哪一個類加載器要加載這個類,最終都是委派給處于模型最頂端的啟動類加載器進行加載,因此Object類在程序的各種類加載器環境中都能夠保證是同一個類

    反之,如果沒有使用雙親委派模型,都由各個類加載器自行去加載的話,如果用戶自己也編寫了一個名為java.lang.Object的類,并放在程序的ClassPath中,那系統中就會出現多個不同的Object類,Java類型體系中最基礎的行為也就無從保證,應用程序將會變得一片混亂。

    加分回答-雙親委派模型的3次被破壞

    雙親委派模型并不是一個具有強制性約束的模型,而是Java設計者推薦給開發者們的類加載器實現方式。在Java的世界中大部分的類加載器都遵循這個模型,但也有例外的情況,雙親委派模型主要出現過3次較大規模的“被破壞”的情況。

    1.雙親委派模型的第一次“被破壞”發生在雙親委派模型出現之前

    雙親委派模型在JDK1.2之后才被引入,但是類加載器的概念和抽象類ClassLoader則在Java的第一個版本中就已經存在,面對已經存在的用戶自定義類加載器的代碼,Java設計者們引入雙親委派模型時不得不做出一些妥協。為了兼容這些已有代碼,只能在之后的ClassLoader中添加一個protected方法findClass(),并引導用戶編寫的類加載邏輯時盡可能去重寫這個方法,而不是在loadClass()中編寫代碼。雙親委派的具體邏輯就實現在這里面,按照loadClass()的邏輯,如果父類加載失敗,會自動調用自己的findClass()來完成加載,這樣既不影響用戶按照自己的意愿去加載類,又可以保證新寫出來的類加載器符合雙親委派規則。

    2.雙親委派模型的第二次“被破壞”是由這個模型自身的缺陷導致的

    雙親委派很好地解決了各個類加載器協作時基礎類型的一致性問題,基礎類型之所以被稱為“基礎”,是因為它們總是作為被用戶代碼繼承、調用的API存在,但程序設計往往沒有絕對不變的完美規則,如果有基礎類型又要調用回用戶的代碼,那該怎么辦呢?

    一個典型的例子便是JNDI服務,JNDI現在已經是Java的標準服務,它的代碼由啟動類加載器來完成加載,肯定屬于Java中很基礎的類型了。但JNDI存在的目的就是對資源進行查找和集中管理,它需要調用由其他廠商實現并部署在應用程序的ClassPath下的JNDI服務提供者接口的代碼,現在問題來了,啟動類加載器是絕不可能認識、加載這些代碼的,那該怎么辦?

    為了解決這個困境,Java的設計團隊只好引入了一個不太優雅的設計:線程上下文類加載器(Thread Context ClassLoader)。這個類加載器可以通過Thread類的setContextClassLoader()方法進行設置,如果創建線程時還未設置,它將會從父線程中繼承一個,如果在應用程序的全局范圍內都沒有設置過的話,那這個類加載器默認就是應用程序類加載器。

    有了線程上下文類加載器,程序就可以做一些“舞弊”的事情了。JNDI服務使用這個線程上下文類加載器去加載所需的SPI服務代碼,這是一種父類加載器去請求子類加載器完成類加載的行為,這種行為實際上是打通了雙親委派模型的層次結構來逆向使用類加載器,已經違背了雙親委派模型的一般性原則,但也是無可奈何的事情。

    3.雙親委派模型的第三次“被破壞”是由于用戶對程序動態性的追求而導致的

    這里所說的“動態性”指的是一些非常“熱”門的名詞:代碼熱替換、模塊熱部署等。說白了就是希望Java應用程序能像我們的電腦外設那樣,接上鼠標、U盤,不用重啟機器就能立即使用,鼠標有問題或要升級就換個鼠標,不用關機也不用重啟。

    早在2008年,在Java社區關于模塊化規范的第一場戰役里,由Sun/Oracle公司所提出的JSR-294、JSR-277規范提案就曾敗給以IBM公司主導的JSR-291(即OSGi R4.2)提案。盡管Sun/Oracle并不甘心就此失去Java模塊化的主導權,隨即又再拿出Jigsaw項目迎戰,但此時OSGi已經站穩腳跟,成為業界“事實上”的Java模塊化標準。

    OSGi實現模塊化熱部署的關鍵是它自定義的類加載器機制的實現,每一個程序模塊(OSGi中稱為Bundle)都有一個自己的類加載器,當需要更換一個Bundle時,就把Bundle連同類加載器一起換掉以實現代碼的熱替換。在OSGi環境下,類加載器不再雙親委派模型推薦的樹狀結構,而是進一步發展為更加復雜的網狀結構。</java_home></java_home>

    6、說說JVM調優思路

    JVM調優三步驟、性能監控、性能分析、性能調優

    JVM調優三步驟:

  • 性能監控
  • 性能分析
  • 性能調優?
  • 性能監控:看服務器有沒有以下情況,有的話需要調優:

    • GC頻繁
    • CPU負載過高
    • OOM
    • 內存泄露
    • 死鎖
    • 程序響應時間較長

    性能分析:使用分析工具定位oom、內存泄漏等問題

    • GC日志:使用GCViewer、VisualVM、GCeasy等日志分析工具打印GC日志;
    • JDK自帶的命令行調優工具:
      • jps:查看正在運行的 Java 進程。jps -v查看進程啟動時的JVM參數;
      • jstat:查看指定進程的 JVM 統計信息。jstat -gc查看堆各分區大小、YGC,FGC次數和時長。如果服務器沒有 GUI 圖形界面,只提供了純文本控制臺環境,它是運行期定位虛擬機性能問題的首選工具。
      • jinfo:實時查看和修改指定進程的 JVM 配置參數。jinfo -flag查看和修改具體參數。
      • jstack:打印指定進程此刻的線程快照。定位線程長時間停頓的原因,例如死鎖、等待資源、阻塞。如果有死鎖會打印線程的互相占用資源情況。
        • 線程快照:該進程內每條線程正在執行的方法堆棧的集合。
    • JDK自帶的可視化監控工具:例如jconsole、Visual VM。Visual VM可以監視應用程序的 CPU、GC、堆、方法區、線程快照,查看JVM進程、JVM 參數、系統屬性。
    • MAT:解析Heap Dump(堆轉儲)文件dump.hprof,查看GC Roots、對象信息、類信息、引用鏈、線程信息。可以快速生成內存泄漏報表。
      • 生成dump文件方式:
        • jmap
        • JVM參數:OOM后生成、FGC前生成
        • Visual VM
        • MAT直接從Java進程導出dump文件
    // 開啟在出現 OOM 錯誤時生成堆轉儲文件 -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError // 將生成的堆轉儲文件保存到 /tmp 目錄下,并以進程 ID 和時間戳作為文件名 -XX:HeapDumpPath=/tmp/java_%p_%t.hprof// 在進行 Full GC 前生成堆轉儲文件 // 注:如果沒有開啟自動 GC,則此參數無效。JDK 9 之后該參數已被刪除。 -XX:+HeapDumpBeforeFullGC

    性能調優:

    • 調整JVM參數:
      • 減少停頓時間:垃圾收集器做垃圾回收中斷應用執行的時間。 可以通過-XX:MaxGCPauseMillis參數進行設置,以毫秒為單位,至少大于1
      • 提高吞吐量:垃圾收集的時間和總時間的占比:1/(1+n),吞吐量為1-1/(1+n) 。通過-XX:GCTimeRatio=n參數進行設置,99的話代表吞吐量為99%?
      • 調整堆內存大小:-Xms、-Xmx、-Xmn分別設置初始堆(最大堆大小的1/4到1/2)、最大堆(服務器內存一半到三分之二)、年輕代大小(最大堆大小的1/4到1/3)
    • 根據場景選擇垃圾回收器,升級垃圾回收器:不考慮應付面試的因素,升級垃圾回收器確實會是最有效的方式之一,例如:CMS 升級到 G1,甚至 ZGC。JDK8默認Parallel+Parallel Old,我們改成ParNew+CMS,吞吐量降低但是低停頓。
    • 優化代碼:優化代碼,控制內存使用
    • 增加機器:增加機器,分散節點壓力
    • 調整線程池參數:合理設置線程池線程數量
    • 緩存、MQ等中間件優化:使用中間件提高程序效率,比如緩存、消息隊列等
    -XX:MetaspaceSize=128m(元空間默認大小) -XX:MaxMetaspaceSize=128m(元空間最大大小) -Xms1024m(堆最大大小) -Xmx1024m(堆默認大小) -Xmn256m(新生代大小) -Xss256k(棧最大深度大小) -XX:SurvivorRatio=8(伊甸園:幸存區=8:2) -XX:+UseConcMarkSweepGC(指定使用的垃圾收集器,這里使用CMS收集器)#Heap Dump(堆轉儲)文件 #當發生OutOfMemoryError錯誤時,自動生成堆轉儲文件。 -XX:+HeapDumpOnOutOfMemoryError #錯誤輸出地址 -XX:HeapDumpPath=/Users/a123/IdeaProjects/java-test/logs/dump.hprof#GC日志 -XX:+PrintGCDetails(打印詳細GC日志) -XX:+PrintGCTimeStamps:打印GC時間戳(以基準時間的形式) -XX:+PrintGCDateStamps:打印GC時間戳(以日期格式) -Xlog:gc:(打印gc日志地址)

    7、項目中有沒有實際的JVM調優經驗?

    CPU飆升:?

    原因:CPU利用率過高,大量線程并發執行任務導致CPU飆升。例如鎖等待(例如CAS不斷自旋)、死循環、Redis被攻擊、網站被攻擊、文件IO、網絡IO。

    定位步驟:?

  • 定位進程ID:通過top命令查看當前服務CPU使用最高的進程,獲取到對應的pid(進程ID)
  • 定位線程ID:使用top -Hp pid,顯示指定進程下面的線程信息,找到消耗CPU最高的線程id
  • 線程ID轉十六進制:因為下一步jstack打印的線程快照(線程正在執行方法的堆棧集合)里線程id是十六進制。
  • 定位代碼:使用jstack pid | grep tid(十六進制),打印線程快照,找到線程執行的代碼。
  • 解決問題:優化代碼、增加系統資源(增多服務器、增大內存)。
  • GC調優:?

    上午8點是我們的業務高峰,一到高峰的時候,監控工具發現TP99(滿足百分之九十九的網絡請求所需要的最低耗時值)耗時會變高,有明顯的的毛刺,通過排查發現內存的使用率也會增大,然后再釋放,其他各項指標正常,于是懷疑是GC導致。

    通過jstat -gc或Visual VM觀察服務器的GC情況,發現youngGC的情況如下:大概每5分鐘,YGC55次,峰值最高可以達到220次。FullGC比較頻繁,每5分鐘大概0.5次,峰值8次。

    那么問題在于FullGC頻繁,而且youngGC峰值也會高。

    FullGC頻繁,那么會觸發stop the world。此時會導致我們的系統進行停頓,這個可能是導致我們的系統tp99耗時上升的主要原因。由于并發很高,我們的YoungGC頻繁,本應該在YoungGC就回收的對象沒有回收成功,直接進入了老年代,由于對象的晉升,導致了我們的老年代繼續觸發FUIIGC。于是峰值變高。

    目標:

    • YoungGC次數減少
    • YoungGC耗時減少
    • FullGC不超過6次一天
    • FullGC耗時減少

    分析:

    ① 垃圾收集器選擇低停頓組合:ParNew+CMS,或G1

    我們的jdk版本為8,并且這個服務未指定特定的收集器,走的是我們默認的收集器組合,年輕代為Parallel Scavenge,老年代為Parallel Old。這兩種并行收集器的組臺提高了系統的吞吐量,而不是低延遲配比,我們首先應該換一個低延遲的收集器。低延遲的組臺,我們選擇ParNew與CMS的組臺,如果jdk的版本高,也可以選擇G1或者ZGC。

    ② 年輕代擴大

    一些堆空間其實是空閑的。那么當我們年輕代的空間小,而且并發大的時候,年輕代的對象會激增,并且晉升到老年代。

    ③ 元數據區

    jdk 1.8后,原來的永久代變為元數據區,如果我們沒有指定元數據區的大小。其默認的初始值只有21M,那么如果動態代理的對象比較多,就會導致元數據區進行GC回收,元數據區的回收也會觸發FullGC,再次導致我們的stw。所以我們觀看了一下元數據的常駐對象的大小,大概是100M左右,所以我們直接用參數指定元數據區的大小為256M。我們的元數據區的最大容量也同時指定為256M,防止其進行動態凋整。

    ④ 并發預處理

    在FullGC發生時,會產生我們的GC root追蹤。老年代與年輕代之間又會存在跨年齡引用,如果我們在CMS收集器進行收集前,進行一次重新標記,其實會減少我們的對象掃描,減少我們的FullGC時間。所以我們就讓進行FullGC前,強制做一次MinorGC,
    XX:+CMSScavengeBeforeRemark,這樣就減少了我們要掃描的對象,減少了重新標記時間。

    最終方案:

    • 指定收集器為ParNew +CMS
    • 擴充年輕代的占比為之前的1.5倍
    • 指定元數據區的最大容量,防止無限動態擴容
    • FullGC前,強制做一次MinorGC。因為MinorGC回收率高,這樣可以減少重新標記階段對象的掃描,縮短CMS重新標記時間。
    • 根據以上四種方式配置后,我們重新進行了一次壓測,發現TP99耗時較之前降低60%。FullGC耗時降低80%。YoungGC次數減少30 %。TP99耗時基本持平,完全符臺預期。

    8、請你說說內存溢出

    得分點

    內存溢出、溢出原因、解決方案

    內存溢出:?申請的內存大于系統能提供的內存。

    溢出原因:

    • 本地直接內存溢出:本地直接內存設的太小導致溢出。設置直接內存最大值-XX:MaxDirectMemorySize,若不指定則默認與Java堆最大值一致
    • 虛擬機棧和本地方法棧溢出:如果虛擬機的棧內存允許動態擴展,并且方法遞歸層數太深時,導致擴展棧容量時無法申請到足夠內存。
    • 方法區溢出:運行時生成大量動態類時會內存溢出。例如CGlib動態代理產生大量類填滿了整個方法區(方法區存常量池、類信息、方法信息),直到溢出。CGlib動態代理是在內存中構建子類對象實現對目標對象功能擴展。例如大量JSP或動態產生JSP文件的應用。
    • 堆溢出:
      • 死循環創建過多對象;
      • 集合類中有對對象的引用,使用完后未清空,使得JVM不能回收;
      • 內存中加載的數據量過于龐大,如一次從數據庫取出過多數據;
    • 程序計數器不會內存溢出。

    使用JDK自帶的命令行調優工具?,判斷是否有OOM:

  • 使用jsp命令查看當前Java進程;
  • 使用jstat命令多次統計GC,比較GC時長占運行時長的比例;
  • 如果比例超過20%,就代表堆壓力已經很大了;
  • 如果比例超過98%,說明這段時期內幾乎一直在GC,堆里幾乎沒有可用空間,隨時都可能拋出 OOM 異常。
  • 解決方案:

  • 通過jinfo命令查看并修改JVM參數,直接增加內存。如-Xmx256m
  • 檢查錯誤日志,查看“OutOfMemory”錯誤前是否有其它異常或錯誤。
  • 對代碼進行走查和分析,找出可能發生內存溢出的位置。
  • 使用內存查看工具動態查看內存使用情況。
  • MAT分析OOM問題:

  • 假設不小心寫了死循環,創建了大量對象,導致堆內存溢出;
  • JVM參數設置,內存溢出后生成dump文件,設置路徑;-XX:+HeapDumpOnOutOfMemoryError、-XX:HeapDumpPath
  • MAT解析dump文件;
  • 點擊直方圖圖標,查看內存占用最大的對象;
  • 點擊關系圖標,看大對象被引用情況,包括被哪個線程引用、引用次數、空間大小;
  • 點擊概述圖標,看對應線程的方法調用鏈和堆棧信息,查看大對象所屬類和第幾行,定位到具體代碼,解決問題。
  • 標準回答

    內存溢出,簡單地說內存溢出就是指程序運行過程中申請的內存大于系統能夠提供的內存,導致無法申請到足夠的內存,于是就發生了內存溢出

    引起內存溢出的原因有很多種,常見的有以下幾種:

    1. 內存中加載的數據量過于龐大,如一次從數據庫取出過多數據;

    2. 集合類中有對對象的引用,使用完后未清空,使得JVM不能回收;

    3. 代碼中存在死循環或循環產生過多重復的對象實體;

    4. 使用的第三方軟件中的BUG;

    5. 啟動參數內存值設定的過小。

    加分回答

    除了程序計數器外,虛擬機內存的其他幾個運行時區域都有發生OOM異常的可能

    1. Java堆溢出

    Java堆用于儲存對象實例,我們只要不斷地創建對象,并且保證GC Roots到對象之間有可達路徑來避免垃圾回收機制清除這些對象,那么隨著對象數量的增加,總容量觸及最大堆的容量限制后就會產生內存溢出異常。

    2. 虛擬機棧和本地方法棧溢出

    HotSpot虛擬機中并不區分虛擬機棧和本地方法棧,如果虛擬機的棧內存允許動態擴展,當擴展棧容量無法申請到足夠的內存時,將拋出OutOfMemoryError異常。

    3. 方法區和運行時常量池溢出

    方法區溢出也是一種常見的內存溢出異常,在經常運行時生成大量動態類的應用場景里,就應該特別關注這些類的回收狀況。這類場景常見的包括:程序使用了CGLib字節碼增強和動態語言、大量JSP或動態產生JSP文件的應用、基于OSGi的應用等。 在JDK 6或更早之前的HotSpot虛擬機中,常量池都是分配在永久代中,即常量池是方法區的一部分,所以上述問題在常量池中也同樣會出現。而HotSpot從JDK 7開始逐步“去永久代”的計劃,并在JDK 8中完全使用元空間來代替永久代,所以上述問題在JDK 8中會得到避免。

    4. 本地直接內存溢出

    直接內存的容量大小可通過`-XX:MaxDirectMemorySize`參數來指定,如果不去指定,則默認與Java堆最大值一致。如果直接通過反射獲取Unsafe實例進行內存分配,并超出了上述的限制時,將會引發OOM異常。

    9、請你說說內存泄漏

    得分點

    內存泄漏、內存泄露的9種情況、性能分析工具判斷是否有內存泄漏、解決辦法

    內存泄漏:?不再使用的對象仍然被引用,導致GC無法回收;

    內存泄露的9種情況:

    • 靜態容器里的對象:靜態集合類的生命周期與 JVM 程序一致,容器里的對象引用也將一直被引用得不到GC;Java里不準靜態方法引用非靜態方法也是防止內存泄漏。
    • 單例對象引用的外部對象:單例模式里,如果單例對象如果持有外部對象的引用,因為單例對象不會被回收,那么這個外部對象也不會被回收
    • 外部類跟隨內部類被引用:內部類持有外部類,這個內部類對象被長期引用了,即使那個外部類實例對象不再被使用,但由于內部類持有外部類的實例對象,這個外部類對象將不會被垃圾回收,這也會造成內存泄漏。
    • 數據庫、網絡、IO等連接忘記關閉:在對數據庫進行操作的過程中,首先需要建立與數據庫的連接,當不再使用時,需要調用 close 方法來釋放與數據庫的連接。如果對 Connection、Statement 或 ResultSet 不顯性地關閉,將會造成大量的對象無法被回收,從而引起內存泄漏。
    • 變量作用域不合理:例如一個變量只會在某個方法中使用,卻聲明為成員變量,并且被使用后沒有被賦值為null,將會導致這個變量明明已經沒用了,生命周期卻還跟對象一致。
    • HashSet中對象改變哈希值:當一個對象被存儲進 HashSet 集合中以后,就不能修改這個對象中的那些參與計算哈希值的字段了。否則對象哈希值改變,找不到對應的value。
    • 緩存引用忘刪除:一旦你把對象引用放入到緩存中,他就很容易遺忘,緩存忘了刪除,將導致引用一直存在。
    • 邏輯刪除而不是真實刪除:監聽器和其他回調:如果客戶端在你實現的 API 中注冊回調,卻沒有顯示的取消,那么就會積聚。需要確保回調立即被當作垃圾回收的最佳方法是只保存它的弱引用,例如將他們保存成為 軟WeakHashMap 中的鍵。例如出棧只是移動了指針,而沒有將出棧的位置賦值null,導致已出棧的位置還存在引用。
    • 線程池時,ThreadLocal忘記remove():使用線程池的時候,ThreadLocal?需要在使用完線程中的線程變量手動?remove(),否則會內存泄漏。因為線程執行完后沒有銷毀而是被線程池回收,導致ThreadLocal中的對象不能被自動垃圾回收。?

    性能分析工具判斷是否有內存泄漏:

    • JDK自帶的命令行調優工具:
      • 每隔一段較長的時間通過jstat命令采樣多組 OU(老年代內存量) 的最小值;
      • 如果這些最小值在上漲,說明無法回收對象在不斷增加,可能是內存泄漏導致的。
    • MAT監視診斷內存泄漏:先生成堆轉儲文件,然后用MAT監視診斷內存泄漏;
    • GC詳細日志:啟動參數開啟GC詳細日志,設置日志地址;-XX:+PrintGCDetails;
    • 編譯器警告:查看Eclipse等編譯器的內存泄漏警告;
    • Java基準測試工具:分析代碼性能;?

    解決辦法:

  • 牢記內存泄漏的場景,當一個對象不會被使用時,給它的所有引用賦值null,堤防靜態容器,記得關閉連接、別用邏輯刪除,只要用到了引用,變量的作用域要合理。
  • 使用java.lang.ref包的弱引用WeakReference,下次垃圾收集器工作時被回收。
  • 檢查代碼;
  • 內存泄漏,是指不再使用的對象仍然被引用,導致垃圾收集器無法回收它們的內存。由于不再使用的對象仍然無法清理,甚至這種情況可能會越積越多,最終導致致命的OutOfMemoryError

    可以按照如下的思路來分析和解決內存泄漏問題:

    1. 啟用分析器

    Java分析器是通過應用程序監視和診斷內存泄漏的工具,它可以分析我們的應用程序內部發生的事情,例如如何分配內存。使用分析器,我們可以比較不同的方法并找到可以最佳利用資源的方式。

    2. 啟用詳細垃圾收集日志

    通過啟用詳細垃圾收集日志,我們可以跟蹤GC的詳細進度。要啟用該功能,我們需要將以下內容添加到JVM的配置當中:`-verbose:gc`。通過這個參數,我們可以看到GC內部發生的細節。

    3. 使用引用對象

    我們還可以借助java.lang.ref包內置的Java引用對象來規避問題,使用java.lang.ref包,而不是直接引用對象,即使用對象的特殊引用,使得它們可以輕松地被垃圾收集。

    4. Eclipse內存泄漏警告

    對于JDK1.5以及更高的版本中,Eclipse會在遇到明顯的內存泄漏情況時顯示警告和錯誤。因此,在Eclipse中開發時,我們可以定期地訪問“問題”選項卡,并更加警惕內存泄漏警告。

    5. 基準測試

    我們可以通過執行基準測試來衡量和分析Java代碼的性能。通過這種方式,我們可以比較執行相同任務的替代方法的性能。這可以幫助我們選擇更好的方法,并可以幫助我們節約內存。

    6. 代碼審查

    最后,我們總是采用經典的老方式來進行簡單的代碼演練。在某些情況下,即使這種看似微不足道的方法也有助于消除一些常見的內存泄漏問題。

    加分回答-沒有一刀切的解決方案,具體問題具體分析

    通俗地說,我們可以將內存泄漏視為一種疾病,它通過阻塞重要的內存資源降低應用程序的性能。和所有其他疾病一樣,如果不治愈,隨著時間的推移,它可能導致致命的應用程序崩潰

    內存泄漏很難解決,找到它們需要對Java語言有很深的理解并掌握復雜的命令。在處理內存泄漏時,沒有一刀切的解決方案,因為泄漏可能通過各種不同的事件發生。 但是,如果我們采用最佳實踐并定期執行嚴格的代碼演練和分析,那么我們就可以將應用程序中內存泄漏的風險降到最低。

    10、JVM中一次完整的GC流程是怎樣的

    堆分為哪幾個區、GC流程、注意大對象和年齡15

  • 首先,任何新對象都分配到 eden 空間。兩個幸存者空間開始時都是空的。
  • 當 eden 空間填滿時,將觸發一個Minor GC(年輕代的垃圾回收,也稱為Young GC),刪除所有未引用的對象,大對象(需要大量連續內存空間的Java對象,如那種很長的字符串)直接進入老年代。
  • 所有被引用的對象作為存活對象,將移動到第一個幸存者空間S0,并標記年齡為1,即經歷過一次Minor GC。之后每經過一次Minor GC,年齡+1。GC分代年齡存儲在對象頭的Mark Word里。
  • 當 eden 空間再次被填滿時,會執行第二次Minor GC,將Eden和S0區中所有垃圾對象清除,并將存活對象復制到S1并年齡加1,此時S0變為空。
  • 如此反復在S0和S1之間切換幾次之后,還存活的年齡等于15的對象在下一次Minor GC時將放到老年代中。
  • 當老年代滿了時會觸發Major GC(也稱為Full GC),Major GC 清理整個堆 – 包括年輕代和老年代。
  • 11、說說JVM的垃圾回收機制

    得分點

    新生代收集、老年代收集、混合收集、整堆收集

    依據分代假說理論,垃圾回收可以分為:?新生代收集、老年代收集、混合收集、整堆收集

    當前商業虛擬機的垃圾收集器,大多數都遵循了“分代收集”的理論進行設計,分代收集名為理論,實質是一套符合大多數程序運行實際情況的經驗法則。而分代收集理論,建立在如下三個分代假說之上,即弱分代假說、強分代假說、跨代引用假說。依據分代假說理論,垃圾回收可以分為如下幾類:

    1. 新生代收集:目標為新生代的垃圾收集。

    2. 老年代收集:目標為老年代的垃圾收集,目前只有CMS收集器會有這種行為。

    3. 混合收集:目標為整個新生代及部分老年代的垃圾收集,目前只有G1收集器會有這種行為。

    4. 整堆收集:目標為整個堆和方法區的垃圾收集。

    加分回答-垃圾收集器

    HotSpot虛擬機內置了很多垃圾收集器,其中針對新生代的垃圾收集器有Serial、ParNew、Parallel Scavenge,針對老年代的垃圾收集器有CMS、Serial Old、Parallel Old。此外,HotSpot還內置了面向整堆的G1收集器。

    在上述收集器中,常見的組合方式有:

    1. Serial + Serial Old,是客戶端模式下常用的收集器。

    2. ParNew + CMS,是服務端模式下常用的收集器。

    3. Parallel Scavenge + Parallel Old,適用于后臺運算而不需要太多交互的分析任務。

    12、說說GC的可達性分析算法

    得分點
    概念、GC Roots、引用鏈、非可達對象兩次標記

    可達性分析算法:

    以根對象集合(GC Roots)的每個跟對象為起始點,根據引用關系向下搜索,將所有與GC Roots直接或間接有引用關系的對象在對象頭的Mark Word里標記為可達對象,即不需要回收的有引用關系對象。搜索過程所走過的路徑稱為“引用鏈” 。

    GC Roots:即GC根節點集合,是一組必須活躍的引用。可作為GC Roots的對象:

    • 棧引用的對象:Java方法棧、本地方法棧中的參數引用、局部變量引用、臨時變量引用等。臨時變量是方法里的中間操作結果。
    • 方法區中常量、靜態變量引用的對象;
    • 所有被同步鎖持有的對象;
    • 所有線程對象;
    • 所有跨代引用對象;
    • JVM內部的引用:如基本數據類型對應的Class對象,常駐的異常對象,以及應用程序類類加載器;?

    非可達對象被回收需要兩次標記:

  • 第一次標記后篩選非可達對象:第一次被標記后,會進行一次篩選,篩選的條件是此對象是否有必要執行finalize()方法,也就是是否有機會自救。假如對象沒有覆蓋或者已被JVM調用過finalize()方法,也就是說不想自救或已自救過,那么此對象需要被回收;假如對象覆蓋并沒被JVM調用過finalize()方法,該對象將會被放置在一個名為F-Queue的隊列之中,并在稍后由一條由虛擬機自動建立的、低調度優先級的Finalizer線程去執行它們的finalize()方法。
  • 第二次標記F-Queue里的未自救對象:稍后,收集器將對F-Queue中的對象進行第二次小規模的標記。如果對象要在finalize()中成功拯救自己——只要重新與引用鏈上的任何一個對象建立關聯即可,譬如把自己(this)賦值給某個引用類型的類變量或者對象的成員變量,那在第二次標記時它將被移出“即將回收”的F-Queue。如果對象這時候還沒有逃脫,那基本上它就真的要被回收了。
  • finalize()方法:?

    finalize()方法是對象逃脫死亡命運的最后一次機會,需要注意的是,任何一個對象的finalize()方法都只會被系統自動調用一次,如果對象面臨下一次回收,它的finalize()方法不會被再次執行。

    另外,finalize()方法的運行代價高昂,不確定性大,無法保證各個對象的調用順序,如今已被官方明確聲明為不推薦使用的語法。

    當前主流的商用程序語言的內存管理子系統,都是通過可達性分析算法來判定對象是否存活的。

    這個算法的基本思路就是通過一系列稱為“GC Roots”的根對象作為起始節點集,從這些節點開始,根據引用關系向下搜索,搜索過程所走過的路徑稱為“引用鏈”,如果某個對象到GC Roots間沒有任何引用鏈相連,或者用圖論的話來說就是從GC Roots到這個對象不可達時,則證明此對象是不可能再被使用的。

    ?

    GC Roots?到底是什么東西呢,哪些對象可以作為 GC Root 呢?

    ?是一組必須活躍的引用。在Java技術體系里面,固定可作為GC Roots的對象包括以下幾種:

    • 在虛擬機棧中引用的對象,譬如各個線程被調用的方法堆棧中使用到的參數、局部變量、臨時變量等;
    • 在方法區中類靜態屬性引用的對象,譬如Java類的引用類型靜態變量;
    • 在方法區中常量引用的對象,譬如字符串常量池里的引用;
    • 在本地方法棧中引用的對象;
    • JVM內部的引用,如基本數據類型對應的Class對象,常駐的異常對象,以及系統類加載器;
    • 所有被同步鎖持有的對象;
    • 反映Java虛擬機內部情況的JMXBean、JVMTI中注冊的回調、本地代碼緩存等。


    加分回答-宣告對象死亡要經歷兩次標記
    真正宣告一個對象死亡,至少要經歷兩次標記過程:
    1. 第一次標記
    如果對象在進行可達性分析后發現沒有與GC Roots相連接的引用鏈,那它將會被第一次標記,隨后進行一次篩選,篩選的條件是此對象是否有必要執行finalize()方法。假如對象沒有覆蓋finalize()方法,或者finalize()方法已經被虛擬機調用過,那么虛擬機將這兩種情況都視為“沒有必要執行”。反之,該對象將會被放置在一個名為F-Queue的隊列之中,并在稍后由一條由虛擬機自動建立的、低調度優先級的Finalizer線程去執行它們的finalize()方法。
    2. 第二次標記
    稍后,收集器將對F-Queue中的對象進行第二次小規模的標記。如果對象要在finalize()中成功拯救自己——只要重新與引用鏈上的任何一個對象建立關聯即可,譬如把自己(this)賦值給某個類變量或者對象的成員變量,那在第二次標記時它將被移出“即將回收”的集合。如果對象這時候還沒有逃脫,那基本上它就真的要被回收了。
    ????finalize()方法是對象逃脫死亡命運的最后一次機會,需要注意的是,任何一個對象的finalize()方法都只會被系統自動調用一次,如果對象面臨下一次回收,它的finalize()方法不會被再次執行。另外,finalize()方法的運行代價高昂,不確定性大,無法保證各個對象的調用順序,如今已被官方明確聲明為不推薦使用的語法。

    13、說說JVM的垃圾回收算法

    得分點

    標記清除、標記復制、標記整理,比較優缺點(效率、空間浪費、調整引用、stw)、使用場景

    標記清除算法、標記復制算法、標記整理算法。

    標記清除算法(Mark-Sweep):

    • 標記、清除:當堆中有效內存空間被耗盡時,會STW(stop the world,暫停其他所有工作線程),然后先標記,再清除。
    • 標記:可達性分析法,從GC Roots開始遍歷,找到可達對象,并在對象頭中進行標記。
    • 清除:堆內存內從頭到尾進行線性遍歷,“清除”非可達對象。注意清除并不是真的置空,垃圾還在原來的位置。實際是把垃圾對象的地址維護在空閑列表,創建新對象時通過空閑列表找到合適大小的空閑內存分配給新對象。
    • 優點:簡單
    • 缺點:
      • 效率不高:需要可達性遍歷和線性遍歷,效率差。
      • STW導致用戶體驗差:GC時需要暫停其他所有工作線程,用戶體驗差。
      • 有內存碎片,要維護空閑列表:回收垃圾對象后沒有整理,導致堆中出現一塊塊不連續的內存碎片。
    • 適用場景:適合小型應用程序,內存空間不大的情況。應用程序越大越不適用這種回收算法。

    標記復制算法(Copying) :

    • 標記、復制、清除:將內存空間分為兩塊,每次只使用一塊。在進行垃圾回收時,先可達性分析法標記可達對象,然后將可達對象復制到沒有被使用的那個內存塊中,最后再清除當前內存塊中的所有對象。后續再按同樣的流程來回復制和清除。
    • 優點:
      • 垃圾多時效率高:只需可達性遍歷,效率很高。
      • 無內存碎片:因為有移動操作,所以內存規整。
    • 缺點:
      • 內存利用率低,浪費內存:始終有一半以上的空閑內存。
      • 需要調整引用地址:可達對象移動后,內存地址發生了變化,需要調整所有引用,指向移動后的地址。
      • 垃圾少時效率相對差,但還是比其他算法強:如果可達對象比較多,垃圾對象比較少,那么復制算法的效率就會比較低。只為了一點垃圾而移動所有對象未免有些小題大做。所以垃圾對象多的情況下,復制算法比較適合。
    • 適用場景:適合垃圾對象多,可達對象少的情況,這樣復制耗時短。非常適合新生代的垃圾回收,因為新生代要頻繁地把可達對象從伊甸園區移動到幸存區,而且是新生代滿了適合再Minor GC,垃圾對象占比高,所以回收性價比非常高,一次通常可以回收70-90%的內存空間,現在的商業虛擬機都是用這種GC算法回收新生代。

    標記整理算法(Mark-Compact) :

    • 標記、整理、清除:首先可達性分析法標記可達對象,然后將可達對象按順序整理到內存的一端,最后清理邊界外的垃圾對象。相當于內存碎片優化版的標記清楚算法,不用維護空閑列表。
    • 優點:
      • 無內存碎片:內存規整。
      • 內存利用率最高:內存既規整又不用浪費一般空間。
    • 缺點:
      • 效率最低:效率比其他兩種算法都低
      • 需要調整引用地址:可達對象移動后,內存地址發生了變化,需要調整所有引用,指向移動后的地址。
      • STW導致用戶體驗差:移動時需要暫停其他所有工作線程,用戶體驗差。

    分代收集算法:將堆分為新生代、老年代不同生命周期的對象放在不同的代,采用不同的收集算法,以提高回收效率。

    引用計數法

    每個對象都保存一個引用計數器屬性,用戶記錄對象被引用的次數

    可達性分析法

    可達性分析法會以GC Roots作為起始點,然后一層一層找到所引用的對象,被找到的對象就是存活對象,那么其他不可達的對象就是垃圾對象。

    1. 標記清除算法

    算法分為“標記”和“清除”兩個階段,首先標記出所有需要回收的對象,在標記完成后,統一回收掉所有被標記的對象,也可以反過來,標記存活的對象,統一回收所有未被標記的對象。它主要有如下兩個缺點: 第一個是執行效率不穩定,如果Java堆中包含大量對象,而且其中大部分是需要被回收的,這時必須進行大量標記和清除的動作,導致標記和清除兩個過程的執行效率都隨對象數量增長而降低。 第二個是內存空間碎片化問題,標記、清除之后會產生大量不連續的內存碎片,空間碎片太多可能會導致當程序在運行過程中需要分配較大對象時無法找到足夠的連續的內存而不得不提前觸發另一次垃圾收集。

    2. 標記復制算法

    將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。對于多數對象都是可回收的情況,算法需要復制的就是占少數的存活對象,而且每次都是針對整個半區進行內存回收,分配內存時也就不用考慮有空間碎片的復雜情況,只要移動堆頂指針,按順序分配即可。

    這種復制回收算法的代價是將可用內存縮小為了原來的一半空間浪費未免太多了一點。另外,如果內存中多數對象都是存活的,這種算法將會產生大量的內存間復制的開銷。所以,現在的商用Java虛擬機大多都優先采用了這種收集算法去回收新生代。

    3. 標記整理算法

    針對老年代對象的存亡特征,1974年Edward Lueders提出了另外一種有針對性的“標記-整理”算法,其中的標記過程仍然與“標記-清除”算法一樣,但后續步驟不是直接對可回收對象進行清理,而是讓所有存活的對象都向內存空間一端移動,然后直接清理掉邊界以外的內存。

    如果移動存活對象,尤其是在老年代這種每次回收都有大量對象存活區域,移動存活對象并更新所有引用這些對象的地方將會是一種極為負重的操作,而且這種對象移動操作必須全程暫停用戶應用程序才能進行,像這樣的停頓被最初的虛擬機設計者形象地描述為“Stop The World”。

    加分回答

    目前,新生代的垃圾回收采用標記復制算法比較多,老年代的垃圾回收采用標記整理算法比較多。而標記復制算法浪費一半內存的缺點長期以來被人詬病,所以業界也有人針對該算法給出了改進的方案。

    IBM公司曾有一項專門研究對新生代“朝生夕滅”的特點做了更量化的詮釋——新生代中的對象有98%熬不過第一輪收集。因此并不需要按照1∶1的比例來劃分新生代的內存空間。在1989年,Andrew

    Appel針對具備“朝生夕滅”特點的對象,提出了一種更優化的半區復制分代策略,現在稱為“Appel式回收”。

    Appel式回收的具體做法是把新生代分為一塊較大的Eden空間和兩塊較小的Survivor空間,每次分配內存只使用Eden和其中一塊Survivor。發生垃圾搜集時,將Eden和Survivor中仍然存活的對象一次性復制到另外一塊Survivor空間上,然后直接清理掉Eden和已用過的那塊Survivor空間。

    HotSpot虛擬機的Serial、ParNew等新生代收集器均采用了這種策略來設計新生代的內存布局。HotSpot虛擬機默認Eden和Survivor的大小比例是8:1:1,也即每次新生代中可用內存空間為整個新生代容量的90%(Eden的80%加上一個Survivor的10%),只有一個Survivor空間,即10%的新生代是會被“浪費”的。

    98%的對象可被回收僅僅是“普通場景”下測得的數據,任何人都沒有辦法百分百保證每次回收都只有不多于10%的對象存活,因此Appel式回收還有一個充當罕見情況的“逃生門”的安全設計,當Survivor空間不足以容納一次Minor

    GC之后存活的對象時,就需要依賴其他內存區域(實際上大多就是老年代)進行分配擔保。

    對比三種垃圾回收算法:

    14、說說七個垃圾回收器

    得分點
    Serial、Serial Old、PawNew、CMS、Parallel Scavenge、Parallel Old、G1

    各版本默認回收器:JDK8默認回收器是Parallel+Parallel Old。

    各區域對應算法:?

    • 新生代回收算法:標記復制算法;
    • 老年代回收算法:標記清除/整理算法
    • 整堆回收算法:分區算法。

    Serial(串行收集器):

    • 介紹:單線程、單處理器回收新生代,回收時會STW。
    • STW:Stop The World,暫停其他所有工作線程直到收集結束。
    • 算法:標記復制算法
    • 回收區域:新生代
    • 優點:簡單、比其他單線程收集器效率高:單線程,不用線程切換,可以專心進行垃圾回收。
    • 應用場景:適用于內存小的桌面應用,可以在較短時間完成收集。Serial GC是最基礎、歷史最悠久的收集器,曾是HotSpot虛擬機新生代收集器的唯一選擇。
    • 命令:指定新生代用Serial GC,老年代用Serial Old GC:-XX:+UseSerialGC

    Serial Old(老年代串行收集器):

    • 介紹:Serial收集器的老年代版本。單線程、單處理器回收老年代,回收時會STW。
    • 算法:標記-整理算法

    ParNew(并行新生代收集器):Par是Parallel(并行,平行)的縮寫,New:只能處理的是新生代

    • 介紹:Serial收集器的多線程并行版本。多線程并行回收新生代,回收時會STW。
    • 算法:標記復制算法
    • 回收區域:新生代
    • 優點:多CPU場景下性能高,吞吐量大
    • 缺點:單CPU場景下性能差,不如串行收集器
    • 應用場景:多CPU場景下。

    Parallel Scavenge(并行收集器):

    • 介紹:可控制高吞吐量,多線程并行回收新生代,回收時會STW。
    • 算法:標記復制算法
    • 回收區域:新生代
    • 應用場景:后臺運算量大而不需要太多交互的任務。JDK8默認回收器是Parallel+Parallel Old

    Parallel Old(老年代并行收集器):

    • 介紹:Parallel Scavenge收集器的老年代版本。可控制高吞吐量,多線程并行回收老生代,回收時會STW。
    • 算法:標記整理算法
    • 回收區域:老年代

    CMS(并發標記清除收集器):

    • 介紹:以最短停頓時間為目標,JDK1.5推出,第一次實現了垃圾收集線程和用戶線程同時工作。多線程并行回收老生代,低stw。初始標記和重新標記需要stw,但耗時很短。
    • 算法:標記清除算法。不使用標記整理算法是為了保證清除時不影響用戶線程中的工作線程,如果使用標記整理算法的話工作線程引用指向的對象地址就都變了。
    • 回收區域:老年代
    • 步驟:
      • 初始標記:標記GC Roots直接關聯的對象。單線程且停頓用戶線程,速度很快。
      • 并發標記:從直接關聯對象并發遍歷整個圖,標記可達對象。并發不停頓。
      • 重新標記:修正上一步用戶線程變動的標記。并發停頓。速度遠比并發標記階段快。注意只能修正原有對象不能修正新增對象,即只能修正原有對象非可達變可達、可達變非可達。
      • 并發清除:并發線性遍歷并清理未被標記的對象。并發不停頓。
    • 優點:
      • 并發速度快;
      • 低停頓:用戶線程和垃圾回收器同時執行,僅初始標記和重新標記階段需要停頓,這兩個階段運行速度很快。
    • 缺點:
      • 并發占線程
      • 有內存碎片:內存不規整,需要維護空閑列表。
      • 無法處理浮動垃圾:并發標記階段會產生新對象,重新標記階段又只能修正不能新增,所以會出現浮動垃圾。
      • 回收時要確保用戶線程有足夠內存:不能等老年代滿了再回收,而是內存到達某個閾值后回收,防止用戶線程在并發執行過程中新創建對象導致內存不夠,導致虛擬機補償使用Serial Old收集器進行回收并處理內存碎片,從而浪費更多時間。
    • 應用場景:因為底層是標記清除算法,所以有內存碎片,適合小應用。

    ??G1(Garbage-First,垃圾優先收集器):

    • 介紹:以延遲可控并保證高吞吐量為目標,為了適應內存大小和處理器數量不斷擴大而在JDK7推出的垃圾回收器。開創了收集器面向局部收集的設計思路和基于Region(區域)的內存布局形式。JDK8支持并發類卸載后被Oracle官方稱為“全功能的垃圾收集器”。并行低停頓,除了并發標記外需要stw,但耗時很短(初始標記和最終標記是真短,篩選回收是有指定STW)。
    • 實現機制:不再把堆劃分為連續的分代,而是將堆內存分割成2048個大小相等的Region,各Region根據需要扮演伊甸園區、幸存區、老年代區、巨大區。垃圾優先收集器跟蹤各Region里垃圾的回收價值(回收空間大小和預計回收時長),在后臺維護一個優先級列表,每次根據用戶設定允許的收集停頓時間,回收優先級最高的那些Region,以達到垃圾優先的效果。
    • 設置最大停頓時間:-XX:MaxGCPauseMillis=默認0.2s
    • Humongous Region(巨大區):存儲大小超過Region一半空間的大對象,如果大對象的內存大小超過了Region大小,將會被存在幾個連續的巨大區里。G1的大多數行為把巨大區看作老年代的一部分。
    • 算法:分區收集算法(整體是標記整理算法、Region之間標記復制算法)
    • 回收區域:整堆。整堆里哪個Region垃圾最多,回收收益最大。
    • 步驟:
      • 初始標記:標記GC Roots直接關聯的可達對象。單線程且停頓用戶線程,速度很快。
      • 并發標記:從直接關聯對象并發遍歷整個圖,標記可達對象。并發不停頓。
      • 最終標記:重新標記所有存活的對象。并發停頓。采用SATB算法,效率比CMS重新標記高。并發停頓。
      • 篩選回收:根據優先級列表,回收價值高的一些Region,將存活對象通過標記復制算法復制到同類型的空閑Region。根據指定的最大停頓時間回收,因此可能來不及回收所有垃圾對象,但能保證回收到最高回收價值的垃圾。并發停頓。
    • 記憶集:是一個抽象概念。每個Region都維護一個記憶集Rset,用來記錄其他Region對象對本Region對象的引用。本Region在回收后對象地址會改變,用記憶集就能直接知道直接找到對應引用修改指向的地址,從而不用全局掃描。
    • 卡表(CardTable):是記憶集的一種實現方式。卡表是一個字節數組,每個元素對應一個內存塊,每個內存塊大小都是2^n字節(Hotspot是2^9=512字節)。
    • 寫屏障:當前對象被其他Region對象通過引用關系賦值時,賦值前后會插入寫前屏障和寫后屏障中斷當前Region垃圾回收。
    • CMS的記憶集和寫屏障:其他回收器也用到了記憶集和寫后屏障,用來防止回收導致位置改變時,不用為了更正引用地址而掃描整個堆。例如CMS記憶集記錄老年代指向年輕代的引用。但只有G1用到了寫前屏障。
    • 優點:無內存碎片:因為整體和局部是整理和復制,都不會產生內存碎片。
    • 缺點:
      • 比CMS更耗費內存和負載
      • 可能來不及回收所有垃圾:根據指定的STW時間(默認0.2s)回收,因此可能來不及回收所有垃圾對象,但能保證回收到最高回收價值的垃圾。
      • 比CMS更耗費內存和負載:因為使用寫前屏障和寫后屏障維護記憶集,而cms只用寫后屏障。
    • 應用場景:適合多核CPU且內存大的大應用,小應用不及其他回收器,但未來會越來越適合。

    標準回答?

    《Java虛擬機規范》中對垃圾收集器應該如何實現并沒有做出任何規定,因此不同的廠商、不同版本的虛擬機所包含的垃圾收集器都可能會有很大差別,不同的虛擬機一般也都會提供各種參數供用戶根據自己的應用特點和要求組合出各個內存分代所使用的收集器。下圖是HotSpot虛擬機中包含的垃圾收集器,圖中展示了七種作用于不同分代的收集器,如果兩個收集器之間存在連線,就說明它們可以搭配使用,圖中收集器所處的區域,則表示它是屬于新生代收集器抑或是老年代收集器。

    ?

    串行收集器Serial

    Serial收集器是最基礎、歷史最悠久的收集器,使用復制算法,曾經是HotSpot虛擬機新生代收集器的唯一選擇。這個收集器是一個單線程工作的收集器,但它的“單線程”的意義并不僅僅是說明它只會使用一個處理器或一條收集線程去完成垃圾收集工作,更重要的是強調在它進行垃圾收集時,必須暫停其他所有工作線程,直到它收集結束。也就是說它在進行垃圾收集時,會發生“Stop The World”

    老年代串行收集器Serial Old
    Serial Old是Serial收集器的老年代版本,它同樣是一個單線程收集器,使用標記-整理算法,這個收集器的主要意義也是供客戶端模式下的HotSpot虛擬機使用。

    ParNew收集器

    ParNew收集器實質上是Serial收集器的多線程并行版本,除了同時使用多條線程進行垃圾收集之外,其余的行為包括Serial收集器可用的所有控制參數、收集算法、Stop The World、對象分配規則、回收策略等都與Serial收集器完全一致,在實現上這兩種收集器也共用了相當多的代碼。

    Parallel Scavenge收集器
    Parallel Scavenge收集器也是一款新生代收集器,它同樣是基于標記-復制算法實現的收集器,也是能夠并行收集的多線程收集器。它的關注點與其他收集器不同,CMS等收集器的關注點是盡可能地縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的目標則是達到一個可控制的吞吐量。

    Parallel Old

    Parallel Old是Parallel Scavenge收集器的老年代版本,支持多線程并發收集,基于標記-整理算法實現。直到Parallel Old收集器出現后,“吞吐量優先”收集器終于有了比較名副其實的搭配組合,在注重吞吐量或者處理器資源較為稀缺的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器這個組合。

    CMS
    CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器,從名字上就可以看出CMS收集器是基于標記-清除算法實現的,它的運作過程相對于前面幾種收集器來說要更復雜一些,整個過程分為四個步驟,包括:初始標記、并發標記、重新標記、并發清除。

    G1
    Garbage First(簡稱G1)收集器是垃圾收集器技術發展歷史上的里程碑式的成果,它開創了收集器面向局部收集的設計思路和基于Region的內存布局形式。到了JDK 8 Update 40的時候,G1提供并發的類卸載的支持,補全了其計劃功能的最后一塊拼圖。這個版本以后的G1收集器才被Oracle官方稱為“全功能的垃圾收集器”。

    加分回答
    通常,Serial收集器搭配Serial Old使用,ParNew收集器搭配CMS使用,Parallel Scavenge收集器搭配Parallel Old使用。此外,G1是整堆收集器,它無需搭配其他的垃圾收集器。

    15、請你講下CMS(并發標記清除)回收器

    得分點

    介紹、算法、回收區域、四個步驟、優缺點(并發、停頓、內存碎片、浮動垃圾、回收條件)、應用場景

    CMS(并發標記清除收集器):

    • 介紹:以最短停頓時間為目標,JDK1.5推出,第一次實現了垃圾收集線程和用戶線程同時工作。多線程并行回收老生代,低stw。初始標記和重新標記需要stw,但耗時很短。
    • 算法:標記清除算法。不使用標記整理算法是為了保證清除時不影響用戶線程中的工作線程,如果使用標記整理算法的話工作線程引用指向的對象地址就都變了。
    • 回收區域:老年代
    • 步驟:
      • 初始標記:標記GC Roots直接關聯的對象。單線程且停頓用戶線程,速度很快。
      • 并發標記:從直接關聯對象并發遍歷整個圖,標記可達對象。并發不停頓。
      • 重新標記:修正上一步用戶線程變動的標記。并發停頓。速度遠比并發標記階段快。注意只能修正原有對象不能修正新增對象,即只能修正原有對象非可達變可達、可達變非可達。
      • 并發清除:并發線性遍歷并清理未被標記的對象。并發不停頓。
    • 優點:
      • 并發速度快;
      • 低停頓:用戶線程和垃圾回收器同時執行,僅初始標記和重新標記階段需要停頓,這兩個階段運行速度很快。
    • 缺點:
      • 并發占線程拖慢速度
      • 有內存碎片:內存不規整,需要維護空閑列表。
      • 無法處理浮動垃圾:并發標記階段會產生新對象,重新標記階段又只能修正不能新增,所以會出現浮動垃圾。
      • 回收時要確保用戶線程有足夠內存:不能等老年代滿了再回收,而是內存到達某個閾值后回收,防止用戶線程在并發執行過程中新創建對象導致內存不夠,導致虛擬機補償使用Serial Old收集器進行回收并處理內存碎片,從而浪費更多時間。
    • 應用場景:因為底層是標記清除算法,所以有內存碎片,適合小應用。

    ?CMS收集器是一種以獲取最短回收停頓時間為目標的收集器,從名字上就可以看出CMS收集器是基于標記清除算法實現的,它的運作過程相對于前面幾種收集器來說要更復雜一些,整個過程分為四個步驟,包括:初始標記、并發標記、重新標記、并發清除。其中初始標記、重新標記這兩個步驟仍然需要“Stop The World”。?

    STW:Stop-The-World是在垃圾回收算法執行過程中,將jvm內存凍結,停頓的一種狀態。即暫停用戶線程。

    ?1. 初始標記僅僅只是標記一下GC Roots能直接關聯到的對象,速度很快。

    ?2. 并發標記階段就是從GC Roots的直接關聯對象開始遍歷整個對象圖的過程,這個過程耗時較長但是不需要停頓用戶線程,可以與垃圾收集線程一起并發運行。

    ?3. 重新標記階段則是為了修正并發標記期間,因用戶程序繼續運作而導致標記產生變動的那一部分對象的標記記錄,這個階段的停頓時間通常會比初始標記階段稍長一些,但也遠比并發標記階段的時間短。

    ?4. 并發清除階段,清理刪除掉標記階段判斷的已經死亡的對象,由于不需要移動存活對象,所以這個階段也是可以與用戶線程同時并發的。

    指定老年代使用CMS GC:

    -XX:+UseConcMarkSweepGC

    加分回答-優缺點

    CMS是一款優秀的收集器,它最主要的優點在名字上已經體現出來:并發收集、低停頓(單位時間內占用用戶線程的時間更少了),一些官方公開文檔里面也稱之為“并發低停頓收集器”

    CMS收集器是HotSpot虛擬機追求低停頓的第一次成功嘗試,但是它還遠達不到完美的程度,至少有以下三個明顯的缺點:

    ?1. 并發階段,它雖然不會導致用戶線程停頓,卻因為占用一部分線程而導致應用程序變慢,降低總吞吐量。

    ?2. 它無法處理“浮動垃圾”,有可能會出現“并發失敗”進而導致另一次Full GC的發生。

    ?3. 它是一款基于標記清除算法實現的收集器,這意味著收集結束時會有大量內存碎片產生。

    16、請你講下G1垃圾優先回收器

    得分點

    整堆、Region、標記整理、四個步驟

    ???G1(Garbage-First,垃圾優先收集器):

    • 介紹:以延遲可控并保證高吞吐量為目標,為了適應內存大小和處理器數量不斷擴大而在JDK7推出的垃圾回收器。開創了收集器面向局部收集的設計思路和基于Region(區域)的內存布局形式。JDK8支持并發類卸載后被Oracle官方稱為“全功能的垃圾收集器”。并行低停頓,除了并發標記外需要stw,但耗時很短(初始標記和最終標記是真短,篩選回收是有指定STW)。
    • 實現機制:不再把堆劃分為連續的分代,而是將堆內存分割成2048個大小相等的Region,各Region根據需要扮演伊甸園區、幸存區、老年代區、巨大區。垃圾優先收集器跟蹤各Region里垃圾的回收價值(回收空間大小和預計回收時長),在后臺維護一個優先級列表,每次根據用戶設定允許的收集停頓時間,回收優先級最高的那些Region,以達到垃圾優先的效果。
    • 設置最大停頓時間:-XX:MaxGCPauseMillis=默認0.2s
    • Humongous Region(巨大區):存儲大小超過Region一半空間的大對象,如果大對象的內存大小超過了Region大小,將會被存在幾個連續的巨大區里。G1的大多數行為把巨大區看作老年代的一部分。
    • 算法:分區收集算法(整體是標記整理算法、Region之間標記復制算法)
    • 回收區域:整堆。整堆里哪個Region垃圾最多,回收收益最大。
    • 步驟:
      • 初始標記:標記GC Roots直接關聯的可達對象。單線程且停頓用戶線程,速度很快。
      • 并發標記:從直接關聯對象并發遍歷整個圖,標記可達對象。并發不停頓。
      • 最終標記:重新標記所有存活的對象。并發停頓。采用SATB算法,效率比CMS重新標記高。并發停頓。
      • 篩選回收:根據優先級列表,回收價值高的一些Region,將存活對象通過標記復制算法復制到同類型的空閑Region。根據指定的最大停頓時間回收,因此可能來不及回收所有垃圾對象,但能保證回收到最高回收價值的垃圾。并發停頓。
    • 記憶集:是一個抽象概念。每個Region都維護一個記憶集Rset,用來記錄其他Region對象對本Region對象的引用。本Region在回收后對象地址會改變,用記憶集就能直接知道直接找到對應引用修改指向的地址,從而不用全局掃描。
    • 卡表(CardTable):是記憶集的一種實現方式。卡表是一個字節數組,每個元素對應一個內存塊,每個內存塊大小都是2^n字節(Hotspot是2^9=512字節)。
    • 寫屏障:當前對象被其他Region對象通過引用關系賦值時,賦值前后會插入寫前屏障和寫后屏障中斷當前Region垃圾回收。
    • CMS的記憶集和寫屏障:其他回收器也用到了記憶集和寫后屏障,用來防止回收導致位置改變時,不用為了更正引用地址而掃描整個堆。例如CMS記憶集記錄老年代指向年輕代的引用。但只有G1用到了寫前屏障。
    • 優點:無內存碎片:因為整體和局部是整理和復制,都不會產生內存碎片。
    • 缺點:
      • 比CMS更耗費內存和負載
      • 可能來不及回收所有垃圾:根據指定的STW時間(默認0.2s)回收,因此可能來不及回收所有垃圾對象,但能保證回收到最高回收價值的垃圾。
      • 比CMS更耗費內存和負載:因為使用寫前屏障和寫后屏障維護記憶集,而cms只用寫后屏障。
    • 應用場景:適合多核CPU且內存大的大應用,小應用不及其他回收器,但未來會越來越適合。

    Garbage First(G1)垃圾優先收集器開創了收集器面向局部收集的設計思路和基于Region的內存布局形式。在G1收集器出現之前的所有其他收集器,垃圾收集的目標范圍要么是整個新生代,要么就是整個老年代,再要么就是整個Java堆。而G1跳出了這個限制,它可以面向堆內存任何部分來組成回收集進行回收,衡量標準不再是它屬于哪個分代,而是哪塊內存中存放的垃圾數量最多,回收收益最大,這就是G1收集器的Mixed GC模式。

    G1也仍是遵循分代收集理論設計的,但其堆內存的布局與其他收集器有非常明顯的差異:G1不再堅持固定大小以及固定數量的分代區域劃分,而是把連續的Java堆劃分為多個大小相等的獨立區域(Region),每一個Region都可以根據需要,扮演新生代的Eden空間、Survivor空間,或者老年代空間。

    巨大區:此外,還有一類專門用來存儲大對象的特殊區域(Humongous Region)。G1認為只要超過了Region一半的對象即可判定為大對象。而對于那些超過了整個Region容量的超級大對象,將會被存放在N個連續的Humongous Region之中,G1的大多數行為都把Humongous Region作為老年代的一部分來進行看待。

    更具體的處理思路是,讓G1收集器去跟蹤各個Region里面的垃圾堆積的“價值”大小(垃圾數量),價值即回收所獲得的空間大小以及回收所需時間的經驗值,然后在后臺維護一個優先級列表,每次根據用戶設定允許的收集停頓時間優先處理回收價值收益最大的那些Region,這也就是“Garbage First”名字的由來。

    G1收集器的運作過程大致可劃分為以下四個步驟:初始標記、并發標記、最終標記、篩選回收。其中,初始標記和最終標記階段仍然需要停頓所有的線程,但是耗時很短。

    加分回答-G1與CMS的對比:

    G1從整體來看是基于標記整理算法實現的收集器,但從局部上看又是基于標記復制算法實現。無論如何,這兩種算法都意味著G1運作期間不會產生內存空間碎片,垃圾收集完成之后能提供規整的可用內比起CM存。S,G1的弱項也可以列舉出不少。例如在用戶程序運行過程中,G1無論是為了垃圾收集產生的內存占用還是程序運行時的額外執行負載都要比CMS要

    G1與CMS的選擇:

    目前在小內存應用上CMS的表現大概率仍然要會優于G1,而在大內存應用上G1則大多能發揮其優勢,這個優劣勢的Java堆容量平衡點通常在6GB至8GB之間。以上這些也僅是經驗之談,隨著HotSpot的開發者對G1的不斷優化,也會讓對比結果繼續向G1傾斜。

    G1比CMS更耗費內存和負載:因為使用寫前屏障和寫后屏障維護記憶集,而cms只用寫后屏障。

    總結

    以上是生活随笔為你收集整理的【Java常见面试题】JVM篇的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    久久精品成人欧美大片 | 久久精品一区二区三区四区 | 成 人影片 免费观看 | 成人三级无码视频在线观看 | 综合网日日天干夜夜久久 | 国产电影无码午夜在线播放 | 男女猛烈xx00免费视频试看 | 一区二区传媒有限公司 | 久久久久成人片免费观看蜜芽 | 在线观看国产午夜福利片 | 中文字幕人成乱码熟女app | aa片在线观看视频在线播放 | 乌克兰少妇性做爰 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲中文字幕在线观看 | 国产精品亚洲综合色区韩国 | 国产在线精品一区二区高清不卡 | 蜜桃臀无码内射一区二区三区 | 人妻中文无码久热丝袜 | 国产激情无码一区二区 | 色一情一乱一伦一视频免费看 | 99精品久久毛片a片 | 日本一区二区三区免费播放 | 国产精品美女久久久网av | 久久精品无码一区二区三区 | 亚洲中文无码av永久不收费 | 99久久99久久免费精品蜜桃 | 国产后入清纯学生妹 | 久久99精品久久久久婷婷 | 老太婆性杂交欧美肥老太 | 伊人久久大香线蕉av一区二区 | 亚洲最大成人网站 | 精品久久久久久亚洲精品 | 欧美怡红院免费全部视频 | 强奷人妻日本中文字幕 | 日本精品少妇一区二区三区 | 久久99精品久久久久久动态图 | 中文字幕无码视频专区 | 精品国产成人一区二区三区 | 久久久久亚洲精品男人的天堂 | аⅴ资源天堂资源库在线 | 九月婷婷人人澡人人添人人爽 | 蜜桃无码一区二区三区 | 双乳奶水饱满少妇呻吟 | 国产午夜视频在线观看 | 内射白嫩少妇超碰 | 色五月丁香五月综合五月 | 对白脏话肉麻粗话av | 日本护士xxxxhd少妇 | 领导边摸边吃奶边做爽在线观看 | 麻豆md0077饥渴少妇 | 国产乱人无码伦av在线a | 亚洲精品一区二区三区四区五区 | 国产一区二区不卡老阿姨 | 国产精品对白交换视频 | 欧美黑人性暴力猛交喷水 | 少妇人妻av毛片在线看 | 午夜精品一区二区三区的区别 | 国产偷自视频区视频 | 无码av最新清无码专区吞精 | 久久zyz资源站无码中文动漫 | 欧美人与禽猛交狂配 | 人妻尝试又大又粗久久 | 亚洲精品一区二区三区在线 | 国产精品毛片一区二区 | 日本丰满护士爆乳xxxx | 中文精品久久久久人妻不卡 | 在线天堂新版最新版在线8 | 色情久久久av熟女人妻网站 | 四虎国产精品一区二区 | 国内精品久久久久久中文字幕 | 在线观看国产午夜福利片 | 无码吃奶揉捏奶头高潮视频 | 亚洲 日韩 欧美 成人 在线观看 | 日本精品少妇一区二区三区 | 欧美性猛交xxxx富婆 | 老太婆性杂交欧美肥老太 | 亚洲国产成人a精品不卡在线 | 亚洲欧美日韩国产精品一区二区 | 97久久超碰中文字幕 | 国内少妇偷人精品视频 | 久久综合久久自在自线精品自 | 蜜桃视频插满18在线观看 | 97精品国产97久久久久久免费 | 亚洲国产一区二区三区在线观看 | 国产口爆吞精在线视频 | 中文字幕无码免费久久9一区9 | 免费乱码人妻系列无码专区 | www国产亚洲精品久久久日本 | 澳门永久av免费网站 | 一本色道婷婷久久欧美 | 我要看www免费看插插视频 | 欧美熟妇另类久久久久久不卡 | 少妇的肉体aa片免费 | 国产 浪潮av性色四虎 | 国产69精品久久久久app下载 | 国产成人无码午夜视频在线观看 | 久久久久免费精品国产 | 久久精品国产大片免费观看 | 国产亚洲人成在线播放 | 亚洲日韩中文字幕在线播放 | 无码帝国www无码专区色综合 | 亚洲经典千人经典日产 | 国产乱人偷精品人妻a片 | 亚洲性无码av中文字幕 | 国产人妖乱国产精品人妖 | 亚洲中文字幕无码中文字在线 | 国产乱码精品一品二品 | 永久免费观看美女裸体的网站 | 国产成人综合色在线观看网站 | 97无码免费人妻超级碰碰夜夜 | 欧美35页视频在线观看 | 中文字幕久久久久人妻 | 亚洲中文字幕无码中字 | 欧美自拍另类欧美综合图片区 | 日韩精品无码一本二本三本色 | 乱人伦人妻中文字幕无码 | 精品国产精品久久一区免费式 | 中文字幕日韩精品一区二区三区 | 人妻体内射精一区二区三四 | 日本高清一区免费中文视频 | 亚洲精品国偷拍自产在线麻豆 | 精品夜夜澡人妻无码av蜜桃 | 国产乡下妇女做爰 | 亚洲日韩av片在线观看 | 亚洲国产精华液网站w | 波多野结衣av在线观看 | 国产激情综合五月久久 | 欧美成人高清在线播放 | 亚洲另类伦春色综合小说 | 精品亚洲成av人在线观看 | 国产午夜视频在线观看 | 国内揄拍国内精品人妻 | 欧美 日韩 人妻 高清 中文 | 亚洲国产欧美国产综合一区 | 精品熟女少妇av免费观看 | 永久免费精品精品永久-夜色 | 国产超级va在线观看视频 | 精品久久久无码中文字幕 | 国产sm调教视频在线观看 | 日本大乳高潮视频在线观看 | 综合激情五月综合激情五月激情1 | 欧美激情一区二区三区成人 | 福利一区二区三区视频在线观看 | 色综合天天综合狠狠爱 | 国产偷国产偷精品高清尤物 | 波多野结衣高清一区二区三区 | 国产人妻人伦精品 | 成人精品一区二区三区中文字幕 | 久久精品国产99精品亚洲 | 日本乱人伦片中文三区 | 骚片av蜜桃精品一区 | 18黄暴禁片在线观看 | 欧美成人午夜精品久久久 | 中文字幕无码人妻少妇免费 | 久久亚洲a片com人成 | 国产人妻久久精品二区三区老狼 | 亚洲va中文字幕无码久久不卡 | 国产精品永久免费视频 | 亚洲一区二区三区国产精华液 | 激情亚洲一区国产精品 | 99国产精品白浆在线观看免费 | 日本成熟视频免费视频 | 亚洲欧美色中文字幕在线 | 亚洲精品一区二区三区婷婷月 | 初尝人妻少妇中文字幕 | 特级做a爰片毛片免费69 | 久久 国产 尿 小便 嘘嘘 | 亚洲综合无码一区二区三区 | 嫩b人妻精品一区二区三区 | 亚洲男人av香蕉爽爽爽爽 | 精品 日韩 国产 欧美 视频 | 久久综合给合久久狠狠狠97色 | 国产精品高潮呻吟av久久4虎 | 国产 浪潮av性色四虎 | 一本色道久久综合亚洲精品不卡 | 亚洲天堂2017无码 | 亚洲男人av天堂午夜在 | 4hu四虎永久在线观看 | 强开小婷嫩苞又嫩又紧视频 | 免费看男女做好爽好硬视频 | 亚洲aⅴ无码成人网站国产app | 无套内谢老熟女 | 色五月五月丁香亚洲综合网 | 亚洲精品www久久久 | 少妇无码一区二区二三区 | 日本xxxx色视频在线观看免费 | 久久久中文字幕日本无吗 | 无码人妻出轨黑人中文字幕 | 强奷人妻日本中文字幕 | 天堂а√在线中文在线 | 国产内射爽爽大片视频社区在线 | 波多野结衣av一区二区全免费观看 | 麻豆成人精品国产免费 | 亚洲综合伊人久久大杳蕉 | 女人和拘做爰正片视频 | 一本久久伊人热热精品中文字幕 | 成 人 免费观看网站 | 国产成人精品久久亚洲高清不卡 | 亚洲一区二区观看播放 | 亚洲性无码av中文字幕 | 国产精品久久久午夜夜伦鲁鲁 | 又色又爽又黄的美女裸体网站 | 亚洲午夜无码久久 | 亚洲欧美精品aaaaaa片 | 99久久精品国产一区二区蜜芽 | 国产三级久久久精品麻豆三级 | 亲嘴扒胸摸屁股激烈网站 | 啦啦啦www在线观看免费视频 | 国产精品久久久 | 久久伊人色av天堂九九小黄鸭 | 成年美女黄网站色大免费视频 | 无码人妻精品一区二区三区下载 | 国产精品久久久久久亚洲毛片 | 牛和人交xxxx欧美 | 精品无码国产自产拍在线观看蜜 | 欧美熟妇另类久久久久久不卡 | 久久午夜无码鲁丝片秋霞 | 18黄暴禁片在线观看 | 国产xxx69麻豆国语对白 | 性色av无码免费一区二区三区 | 亚洲综合无码一区二区三区 | 国产精品久久久久久久9999 | 亚洲欧洲日本无在线码 | 久久久婷婷五月亚洲97号色 | 麻豆精产国品 | 日韩精品久久久肉伦网站 | 久久久久亚洲精品男人的天堂 | 强辱丰满人妻hd中文字幕 | 少女韩国电视剧在线观看完整 | 亚洲国产成人a精品不卡在线 | 国产一区二区不卡老阿姨 | 久久国产自偷自偷免费一区调 | 亚洲理论电影在线观看 | 国产猛烈高潮尖叫视频免费 | 午夜熟女插插xx免费视频 | 小鲜肉自慰网站xnxx | 欧美喷潮久久久xxxxx | 两性色午夜免费视频 | 又紧又大又爽精品一区二区 | 精品午夜福利在线观看 | 亚洲自偷精品视频自拍 | 精品乱子伦一区二区三区 | 任你躁在线精品免费 | 免费国产成人高清在线观看网站 | 99在线 | 亚洲 | 亚洲日韩乱码中文无码蜜桃臀网站 | 99久久无码一区人妻 | 国产麻豆精品精东影业av网站 | 成熟妇人a片免费看网站 | 性生交大片免费看女人按摩摩 | 国产成人无码午夜视频在线观看 | 欧美野外疯狂做受xxxx高潮 | 日本www一道久久久免费榴莲 | 99国产精品白浆在线观看免费 | 97精品人妻一区二区三区香蕉 | 国产精品自产拍在线观看 | 国产精品亚洲一区二区三区喷水 | 人人妻人人澡人人爽精品欧美 | 欧美亚洲国产一区二区三区 | 好男人www社区 | 狠狠色噜噜狠狠狠7777奇米 | 精品久久久无码人妻字幂 | 国产无遮挡吃胸膜奶免费看 | 国产肉丝袜在线观看 | 人人妻人人澡人人爽人人精品 | 色窝窝无码一区二区三区色欲 | 97久久超碰中文字幕 | 暴力强奷在线播放无码 | 免费观看的无遮挡av | 国产精品无码成人午夜电影 | 大肉大捧一进一出好爽视频 | 人妻有码中文字幕在线 | 国产亚洲精品久久久久久久 | 国产成人无码av在线影院 | 久久天天躁狠狠躁夜夜免费观看 | 精品午夜福利在线观看 | 久久99精品久久久久久 | 装睡被陌生人摸出水好爽 | 国产人妻人伦精品1国产丝袜 | 国产精品怡红院永久免费 | 久久国产精品偷任你爽任你 | 天天综合网天天综合色 | 久久精品人人做人人综合试看 | 5858s亚洲色大成网站www | 在线a亚洲视频播放在线观看 | 欧美老妇与禽交 | 国产精品丝袜黑色高跟鞋 | 中文字幕人妻无码一区二区三区 | 日本精品人妻无码免费大全 | 国产在线aaa片一区二区99 | 国内精品久久久久久中文字幕 | 久久人人爽人人爽人人片av高清 | 日韩精品无码一本二本三本色 | 国产97人人超碰caoprom | 亚洲人成影院在线无码按摩店 | 亚洲 欧美 激情 小说 另类 | 草草网站影院白丝内射 | 又色又爽又黄的美女裸体网站 | 欧美自拍另类欧美综合图片区 | 55夜色66夜色国产精品视频 | 亚洲中文字幕久久无码 | 国产激情艳情在线看视频 | 在线天堂新版最新版在线8 | 成人精品一区二区三区中文字幕 | 国产农村妇女高潮大叫 | 国产精品无码一区二区三区不卡 | 少妇邻居内射在线 | 久久综合给合久久狠狠狠97色 | 动漫av一区二区在线观看 | 欧洲美熟女乱又伦 | 伊人久久大香线蕉亚洲 | 97久久国产亚洲精品超碰热 | 国产精品欧美成人 | 奇米影视888欧美在线观看 | 国产成人无码av在线影院 | 亚洲欧美综合区丁香五月小说 | 国产97色在线 | 免 | 一本久道高清无码视频 | 国产成人综合美国十次 | 久久久久99精品成人片 | 67194成是人免费无码 | 欧美国产日产一区二区 | 动漫av一区二区在线观看 | 风流少妇按摩来高潮 | 国产无av码在线观看 | 一本色道久久综合狠狠躁 | 国产综合在线观看 | 国内揄拍国内精品少妇国语 | 久久精品女人天堂av免费观看 | 无码人妻久久一区二区三区不卡 | 亚洲日韩av片在线观看 | 久青草影院在线观看国产 | 亚无码乱人伦一区二区 | www国产精品内射老师 | 好男人社区资源 | 精品国偷自产在线视频 | 亚洲日韩一区二区 | 亲嘴扒胸摸屁股激烈网站 | 97人妻精品一区二区三区 | 国内揄拍国内精品人妻 | 精品国产一区二区三区四区 | 兔费看少妇性l交大片免费 | 亚拍精品一区二区三区探花 | 老熟妇仑乱视频一区二区 | 久久久久久国产精品无码下载 | 亚洲 欧美 激情 小说 另类 | 熟妇女人妻丰满少妇中文字幕 | 狠狠色噜噜狠狠狠7777奇米 | 亚洲综合在线一区二区三区 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产精品第一区揄拍无码 | 亚洲第一无码av无码专区 | 人妻体内射精一区二区三四 | 成人免费视频视频在线观看 免费 | 久在线观看福利视频 | 日产精品高潮呻吟av久久 | 精品一区二区三区无码免费视频 | 亚洲 激情 小说 另类 欧美 | 亚洲第一网站男人都懂 | 99国产精品白浆在线观看免费 | 强开小婷嫩苞又嫩又紧视频 | 国产精品久久久久久无码 | 又大又硬又爽免费视频 | 欧美熟妇另类久久久久久多毛 | 十八禁真人啪啪免费网站 | av无码电影一区二区三区 | 亚洲精品成人福利网站 | 在线成人www免费观看视频 | 国产在线精品一区二区三区直播 | 成人无码精品1区2区3区免费看 | 国产办公室秘书无码精品99 | 粗大的内捧猛烈进出视频 | 美女毛片一区二区三区四区 | 久久久亚洲欧洲日产国码αv | 国产亚洲精品久久久久久 | 一本久久伊人热热精品中文字幕 | 精品国产福利一区二区 | 十八禁真人啪啪免费网站 | 色 综合 欧美 亚洲 国产 | 国产精品嫩草久久久久 | 日韩成人一区二区三区在线观看 | 俺去俺来也在线www色官网 | 国产亚洲tv在线观看 | 亚洲一区av无码专区在线观看 | 巨爆乳无码视频在线观看 | 欧美激情一区二区三区成人 | 两性色午夜视频免费播放 | 亚洲中文字幕久久无码 | 国产成人午夜福利在线播放 | 性欧美熟妇videofreesex | a片免费视频在线观看 | 一本久道久久综合婷婷五月 | 国产精品人妻一区二区三区四 | 色综合久久中文娱乐网 | 欧美日韩在线亚洲综合国产人 | 亚洲一区二区三区偷拍女厕 | 荫蒂被男人添的好舒服爽免费视频 | 免费无码av一区二区 | 2020久久超碰国产精品最新 | yw尤物av无码国产在线观看 | 国产福利视频一区二区 | 强辱丰满人妻hd中文字幕 | 给我免费的视频在线观看 | 性做久久久久久久久 | 天堂无码人妻精品一区二区三区 | 亚洲男人av天堂午夜在 | 精品欧美一区二区三区久久久 | 毛片内射-百度 | 天堂无码人妻精品一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 亚洲精品无码国产 | 亚洲最大成人网站 | 男女爱爱好爽视频免费看 | 性啪啪chinese东北女人 | 人妻互换免费中文字幕 | 欧美老妇交乱视频在线观看 | 午夜嘿嘿嘿影院 | 亚洲欧美精品aaaaaa片 | 婷婷丁香五月天综合东京热 | 日本精品久久久久中文字幕 | 欧美激情综合亚洲一二区 | 精品国产青草久久久久福利 | 国产艳妇av在线观看果冻传媒 | 国内少妇偷人精品视频免费 | 熟妇激情内射com | 色综合久久久无码网中文 | 帮老师解开蕾丝奶罩吸乳网站 | 国产一区二区三区影院 | 国产精品无码永久免费888 | 精品国精品国产自在久国产87 | 亚洲精品久久久久久久久久久 | 伊人久久婷婷五月综合97色 | 亚洲一区二区三区香蕉 | 欧美日韩视频无码一区二区三 | 98国产精品综合一区二区三区 | 桃花色综合影院 | 国产精品久久久久9999小说 | 国产成人精品优优av | 亚洲色欲色欲欲www在线 | 中文字幕无线码免费人妻 | 无码福利日韩神码福利片 | 水蜜桃av无码 | 亚洲无人区午夜福利码高清完整版 | 老司机亚洲精品影院无码 | 精品久久久久久亚洲精品 | 国产精品第一国产精品 | 人人澡人摸人人添 | 久激情内射婷内射蜜桃人妖 | 欧美精品无码一区二区三区 | 国产另类ts人妖一区二区 | 国产精品亚洲五月天高清 | 无码人中文字幕 | 中文字幕av无码一区二区三区电影 | 任你躁在线精品免费 | 国产亚洲精品久久久ai换 | 99精品国产综合久久久久五月天 | 无码av免费一区二区三区试看 | 国产精品亚洲综合色区韩国 | 亚洲春色在线视频 | 在线播放亚洲第一字幕 | 久久久久免费精品国产 | 欧美人与禽猛交狂配 | 欧美丰满熟妇xxxx | 国产成人精品无码播放 | 国产激情无码一区二区app | 内射后入在线观看一区 | 国产超碰人人爽人人做人人添 | 夜夜躁日日躁狠狠久久av | 亚洲国产av精品一区二区蜜芽 | 亚洲熟妇自偷自拍另类 | 中文字幕日产无线码一区 | 亚洲va欧美va天堂v国产综合 | 亚洲综合另类小说色区 | 亚洲国产精华液网站w | 人妻熟女一区 | 欧美国产亚洲日韩在线二区 | 亚洲爆乳精品无码一区二区三区 | 国产亚洲欧美日韩亚洲中文色 | 无人区乱码一区二区三区 | 国内精品九九久久久精品 | 日产精品99久久久久久 | yw尤物av无码国产在线观看 | 久久天天躁狠狠躁夜夜免费观看 | 鲁一鲁av2019在线 | 久在线观看福利视频 | aa片在线观看视频在线播放 | 亚洲日本一区二区三区在线 | 久久久www成人免费毛片 | 日本一卡二卡不卡视频查询 | 丰满少妇女裸体bbw | 日产精品99久久久久久 | 国产精品va在线播放 | 国产人成高清在线视频99最全资源 | 久久久久国色av免费观看性色 | 亚洲成a人片在线观看无码 | 国精品人妻无码一区二区三区蜜柚 | ass日本丰满熟妇pics | 久久精品国产亚洲精品 | 色欲人妻aaaaaaa无码 | 天堂а√在线地址中文在线 | 人妻中文无码久热丝袜 | 久久久av男人的天堂 | 又色又爽又黄的美女裸体网站 | 欧美国产日产一区二区 | 精品夜夜澡人妻无码av蜜桃 | 久久午夜无码鲁丝片午夜精品 | 亚洲精品国产品国语在线观看 | 午夜精品一区二区三区的区别 | 成人免费视频一区二区 | 久久亚洲国产成人精品性色 | 国产精品国产三级国产专播 | 最近免费中文字幕中文高清百度 | 国产亚洲精品久久久久久久久动漫 | 成人欧美一区二区三区黑人 | 亚洲色偷偷偷综合网 | 日日天干夜夜狠狠爱 | 国产无av码在线观看 | 中文字幕乱码人妻无码久久 | 色妞www精品免费视频 | 女人色极品影院 | 欧美日韩在线亚洲综合国产人 | 久久久婷婷五月亚洲97号色 | 欧美午夜特黄aaaaaa片 | 亚洲成av人综合在线观看 | 日韩少妇白浆无码系列 | 国产超级va在线观看视频 | 宝宝好涨水快流出来免费视频 | 久久精品人妻少妇一区二区三区 | 午夜丰满少妇性开放视频 | 亚洲国产精华液网站w | 男人扒开女人内裤强吻桶进去 | 人妻少妇精品无码专区二区 | 国产无套内射久久久国产 | 成人毛片一区二区 | 无码人妻丰满熟妇区毛片18 | 欧美三级不卡在线观看 | 国产亚洲精品久久久ai换 | 国产性生交xxxxx无码 | 国产国语老龄妇女a片 | 日本大香伊一区二区三区 | 鲁大师影院在线观看 | 亚洲 日韩 欧美 成人 在线观看 | 中文字幕人妻无码一区二区三区 | 国产精品人人爽人人做我的可爱 | 无码人妻精品一区二区三区不卡 | 久久婷婷五月综合色国产香蕉 | 少妇高潮一区二区三区99 | 强奷人妻日本中文字幕 | 国产精华av午夜在线观看 | 亚洲日韩一区二区 | 久久97精品久久久久久久不卡 | 国产高清av在线播放 | 撕开奶罩揉吮奶头视频 | 亚洲区欧美区综合区自拍区 | 欧美日韩人成综合在线播放 | 中文字幕人妻无码一夲道 | 国产精品无码永久免费888 | 国产午夜精品一区二区三区嫩草 | 国产真人无遮挡作爱免费视频 | 扒开双腿吃奶呻吟做受视频 | 国产欧美亚洲精品a | 99久久精品日本一区二区免费 | 99久久久无码国产精品免费 | 日本护士毛茸茸高潮 | 色偷偷人人澡人人爽人人模 | 亚洲国产综合无码一区 | 中国女人内谢69xxxx | 男女猛烈xx00免费视频试看 | 亚洲综合无码一区二区三区 | 亚洲国产日韩a在线播放 | 亚洲国产成人av在线观看 | 国产精品人人爽人人做我的可爱 | 欧美xxxxx精品 | 伦伦影院午夜理论片 | 国产尤物精品视频 | 欧美人与禽猛交狂配 | 国产成人无码av在线影院 | 国产香蕉尹人视频在线 | 丰满岳乱妇在线观看中字无码 | 亚洲第一无码av无码专区 | 免费人成网站视频在线观看 | 人妻中文无码久热丝袜 | av无码不卡在线观看免费 | 在线观看国产一区二区三区 | 久久97精品久久久久久久不卡 | 特黄特色大片免费播放器图片 | 天天拍夜夜添久久精品 | 国产精品亚洲lv粉色 | 无码吃奶揉捏奶头高潮视频 | 夜精品a片一区二区三区无码白浆 | 亚洲精品欧美二区三区中文字幕 | 日韩欧美成人免费观看 | 少女韩国电视剧在线观看完整 | 国产亚洲视频中文字幕97精品 | 综合激情五月综合激情五月激情1 | 国产欧美熟妇另类久久久 | 人人澡人摸人人添 | 亚洲阿v天堂在线 | 国产一区二区三区四区五区加勒比 | 国产在线aaa片一区二区99 | 亚洲狠狠婷婷综合久久 | 无码乱肉视频免费大全合集 | 国产成人无码一二三区视频 | 伊人久久大香线蕉亚洲 | 无码国产色欲xxxxx视频 | 久久99精品久久久久婷婷 | 亚洲中文字幕无码中字 | 一个人免费观看的www视频 | 丰满妇女强制高潮18xxxx | 国产精品99久久精品爆乳 | 国产日产欧产精品精品app | 天天摸天天透天天添 | 亚洲中文字幕在线观看 | 欧美日韩一区二区三区自拍 | 免费国产黄网站在线观看 | 97色伦图片97综合影院 | 超碰97人人做人人爱少妇 | 无码吃奶揉捏奶头高潮视频 | 麻花豆传媒剧国产免费mv在线 | 久久国产精品_国产精品 | 国产麻豆精品精东影业av网站 | 伊人久久婷婷五月综合97色 | 日产国产精品亚洲系列 | 少妇邻居内射在线 | 欧美亚洲日韩国产人成在线播放 | 国产无av码在线观看 | 粉嫩少妇内射浓精videos | 东北女人啪啪对白 | 在线观看国产午夜福利片 | 国产农村妇女高潮大叫 | 久久成人a毛片免费观看网站 | 人妻尝试又大又粗久久 | 人人妻人人澡人人爽欧美一区九九 | 国产精品亚洲а∨无码播放麻豆 | 亚洲乱码日产精品bd | 成人无码影片精品久久久 | 九一九色国产 | 日日摸日日碰夜夜爽av | 国产做国产爱免费视频 | 国产精品久久福利网站 | 夫妻免费无码v看片 | av无码不卡在线观看免费 | 无码人妻精品一区二区三区下载 | 夜夜躁日日躁狠狠久久av | 最新国产乱人伦偷精品免费网站 | 亚洲区欧美区综合区自拍区 | 无码一区二区三区在线观看 | 欧美老人巨大xxxx做受 | 成人亚洲精品久久久久 | 亚洲国产精品久久人人爱 | 成熟妇人a片免费看网站 | 免费无码肉片在线观看 | 中文字幕 亚洲精品 第1页 | 国产精品第一国产精品 | 午夜成人1000部免费视频 | 精品国产av色一区二区深夜久久 | 亚拍精品一区二区三区探花 | 在线а√天堂中文官网 | 亚洲一区av无码专区在线观看 | 国产高清av在线播放 | 精品国偷自产在线视频 | 国产无套粉嫩白浆在线 | 思思久久99热只有频精品66 | 丰满人妻精品国产99aⅴ | 亚洲国产精品久久人人爱 | 激情五月综合色婷婷一区二区 | 亚洲中文字幕成人无码 | 国产人妻人伦精品 | 中文字幕无码免费久久9一区9 | 亚洲精品久久久久久久久久久 | 精品成在人线av无码免费看 | 久久亚洲日韩精品一区二区三区 | 国产午夜福利亚洲第一 | 97资源共享在线视频 | 久久综合给合久久狠狠狠97色 | 天天综合网天天综合色 | 亚洲中文字幕久久无码 | 日日麻批免费40分钟无码 | 亚洲第一网站男人都懂 | av无码电影一区二区三区 | 学生妹亚洲一区二区 | 在线播放亚洲第一字幕 | 成人精品视频一区二区三区尤物 | 图片小说视频一区二区 | 国内精品人妻无码久久久影院蜜桃 | 免费播放一区二区三区 | 欧美成人午夜精品久久久 | 九月婷婷人人澡人人添人人爽 | 欧美肥老太牲交大战 | 国产精品无码一区二区三区不卡 | 国产色视频一区二区三区 | 草草网站影院白丝内射 | a片在线免费观看 | 亚洲精品美女久久久久久久 | 成在人线av无码免观看麻豆 | 免费无码午夜福利片69 | 亚洲乱码中文字幕在线 | 波多野结衣高清一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产日产欧产精品精品app | 中文字幕无码人妻少妇免费 | 国内精品久久久久久中文字幕 | 国产午夜精品一区二区三区嫩草 | 色婷婷久久一区二区三区麻豆 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 日日麻批免费40分钟无码 | 激情人妻另类人妻伦 | 99久久人妻精品免费一区 | 国产97在线 | 亚洲 | 国产香蕉尹人视频在线 | 日韩欧美成人免费观看 | 成人一区二区免费视频 | 成人无码精品一区二区三区 | 亚洲 激情 小说 另类 欧美 | 日韩精品无码一区二区中文字幕 | 日韩成人一区二区三区在线观看 | 国产精品久久久久久久9999 | 国产免费久久精品国产传媒 | 久久久久久久久蜜桃 | 久久99精品久久久久久动态图 | 久久成人a毛片免费观看网站 | 99视频精品全部免费免费观看 | 最近中文2019字幕第二页 | 欧美日韩人成综合在线播放 | 天天摸天天碰天天添 | 亚洲小说图区综合在线 | 国产人妻人伦精品1国产丝袜 | 欧美老人巨大xxxx做受 | 伦伦影院午夜理论片 | 四虎国产精品免费久久 | 1000部啪啪未满十八勿入下载 | 亚洲一区二区三区无码久久 | 香蕉久久久久久av成人 | 国产香蕉97碰碰久久人人 | 欧美人与禽猛交狂配 | 无码国产乱人伦偷精品视频 | 桃花色综合影院 | 国产成人精品优优av | 国产日产欧产精品精品app | 国内精品久久毛片一区二区 | 又大又黄又粗又爽的免费视频 | 国产欧美熟妇另类久久久 | 国产av人人夜夜澡人人爽麻豆 | 激情人妻另类人妻伦 | 久久久婷婷五月亚洲97号色 | 中文字幕无码日韩欧毛 | 久久婷婷五月综合色国产香蕉 | 国产亚洲人成在线播放 | 人人妻人人澡人人爽人人精品浪潮 | 中文字幕乱码人妻无码久久 | 亚洲熟妇色xxxxx欧美老妇y | 无码乱肉视频免费大全合集 | 久久婷婷五月综合色国产香蕉 | 国产黄在线观看免费观看不卡 | 日日摸天天摸爽爽狠狠97 | 一本色道久久综合亚洲精品不卡 | 欧美人与禽zoz0性伦交 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 精品久久综合1区2区3区激情 | 久久久国产一区二区三区 | 国产日产欧产精品精品app | 欧美人妻一区二区三区 | 国产明星裸体无码xxxx视频 | 精品久久久无码人妻字幂 | 性欧美疯狂xxxxbbbb | 久久精品国产99精品亚洲 | 99久久人妻精品免费一区 | 永久免费观看美女裸体的网站 | 国产激情综合五月久久 | 国色天香社区在线视频 | 国产精品久久久久9999小说 | 国产精品第一区揄拍无码 | 亚洲国产一区二区三区在线观看 | 又大又紧又粉嫩18p少妇 | 国产凸凹视频一区二区 | 老头边吃奶边弄进去呻吟 | 激情五月综合色婷婷一区二区 | 欧美人与善在线com | 国产成人精品无码播放 | 国产精品久久福利网站 | 亚洲国产一区二区三区在线观看 | 99视频精品全部免费免费观看 | 午夜无码区在线观看 | 天堂亚洲2017在线观看 | 两性色午夜视频免费播放 | 久9re热视频这里只有精品 | 最新国产乱人伦偷精品免费网站 | 扒开双腿疯狂进出爽爽爽视频 | 日韩视频 中文字幕 视频一区 | 亚洲国产精品久久久天堂 | 夫妻免费无码v看片 | 欧美日韩人成综合在线播放 | 骚片av蜜桃精品一区 | 久久zyz资源站无码中文动漫 | 人妻少妇被猛烈进入中文字幕 | 国产人妻精品一区二区三区不卡 | 欧美 丝袜 自拍 制服 另类 | 日韩人妻无码一区二区三区久久99 | 狠狠色欧美亚洲狠狠色www | 99国产精品白浆在线观看免费 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲s色大片在线观看 | 欧美熟妇另类久久久久久多毛 | 成人精品一区二区三区中文字幕 | 色婷婷av一区二区三区之红樱桃 | 欧美阿v高清资源不卡在线播放 | 六月丁香婷婷色狠狠久久 | 国产激情无码一区二区app | 久久人人爽人人人人片 | 麻豆av传媒蜜桃天美传媒 | 麻豆精品国产精华精华液好用吗 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲の无码国产の无码影院 | 亚洲一区二区三区国产精华液 | 国产又粗又硬又大爽黄老大爷视 | 亚洲成色www久久网站 | 欧美黑人性暴力猛交喷水 | 国产又爽又猛又粗的视频a片 | 无码中文字幕色专区 | 亚洲国产午夜精品理论片 | 欧美性黑人极品hd | 中文字幕乱妇无码av在线 | 少妇激情av一区二区 | 日本高清一区免费中文视频 | 欧美老熟妇乱xxxxx | 性生交大片免费看女人按摩摩 | 国产成人无码区免费内射一片色欲 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 一区二区传媒有限公司 | 亚洲国产一区二区三区在线观看 | 日韩av激情在线观看 | 精品国产乱码久久久久乱码 | 少女韩国电视剧在线观看完整 | 亚洲性无码av中文字幕 | 99麻豆久久久国产精品免费 | 日本一区二区更新不卡 | 国产在线aaa片一区二区99 | 四十如虎的丰满熟妇啪啪 | 18禁止看的免费污网站 | 久久精品成人欧美大片 | 亚洲七七久久桃花影院 | 日韩精品久久久肉伦网站 | 精品无码国产一区二区三区av | 一本色道久久综合亚洲精品不卡 | www国产亚洲精品久久久日本 | 亚洲经典千人经典日产 | 欧美一区二区三区视频在线观看 | 激情爆乳一区二区三区 | 强开小婷嫩苞又嫩又紧视频 | 乱码av麻豆丝袜熟女系列 | 丰满人妻被黑人猛烈进入 | 久久综合网欧美色妞网 | 亚洲va中文字幕无码久久不卡 | 亚洲综合久久一区二区 | 最近的中文字幕在线看视频 | 亚洲人成网站在线播放942 | 娇妻被黑人粗大高潮白浆 | 99久久婷婷国产综合精品青草免费 | 一二三四在线观看免费视频 | 日韩精品无码免费一区二区三区 | 亚洲国产精品久久人人爱 | 老熟妇乱子伦牲交视频 | 亚洲第一网站男人都懂 | 精品一区二区不卡无码av | 亚洲 日韩 欧美 成人 在线观看 | 免费观看黄网站 | 午夜时刻免费入口 | 国产午夜无码精品免费看 | 亚洲日韩av一区二区三区四区 | 一二三四社区在线中文视频 | 国产精品资源一区二区 | 精品国偷自产在线视频 | 成人片黄网站色大片免费观看 | 日本又色又爽又黄的a片18禁 | 国产乱人伦av在线无码 | 婷婷综合久久中文字幕蜜桃三电影 | 国产suv精品一区二区五 | 色婷婷综合激情综在线播放 | 日日碰狠狠丁香久燥 | 国产性生交xxxxx无码 | 国产电影无码午夜在线播放 | 色一情一乱一伦 | 中文字幕乱码亚洲无线三区 | 国产精品多人p群无码 | 在线天堂新版最新版在线8 | 在线欧美精品一区二区三区 | 成人无码视频在线观看网站 | 亚洲国产精品久久人人爱 | 丰满人妻翻云覆雨呻吟视频 | 精品aⅴ一区二区三区 | 日本护士xxxxhd少妇 | 国产三级久久久精品麻豆三级 | 精品国产一区二区三区av 性色 | 天天拍夜夜添久久精品大 | 人人妻人人藻人人爽欧美一区 | 人人妻人人澡人人爽人人精品浪潮 | 日本精品高清一区二区 | 在线精品国产一区二区三区 | 亚洲狠狠婷婷综合久久 | 国产精品va在线播放 | 亚洲国产精品一区二区美利坚 | 九一九色国产 | 日韩精品一区二区av在线 | 久久国产劲爆∧v内射 | 国产深夜福利视频在线 | 国产午夜福利亚洲第一 | 精品亚洲韩国一区二区三区 | 99re在线播放 | 帮老师解开蕾丝奶罩吸乳网站 | 精品日本一区二区三区在线观看 | 亚洲 高清 成人 动漫 | 久在线观看福利视频 | 麻花豆传媒剧国产免费mv在线 | 欧美 丝袜 自拍 制服 另类 | 亚洲 激情 小说 另类 欧美 | 国产人成高清在线视频99最全资源 | 久久国产精品萌白酱免费 | 日日摸夜夜摸狠狠摸婷婷 | 性色av无码免费一区二区三区 | 精品久久久中文字幕人妻 | 国产精品久久久av久久久 | 最近的中文字幕在线看视频 | 国产精品第一国产精品 | 精品久久久久香蕉网 | 精品一二三区久久aaa片 | 蜜桃视频插满18在线观看 | 领导边摸边吃奶边做爽在线观看 | 成人性做爰aaa片免费看 | 99riav国产精品视频 | а√天堂www在线天堂小说 | 东京无码熟妇人妻av在线网址 | 欧美35页视频在线观看 | 网友自拍区视频精品 | 精品久久久无码中文字幕 | 97精品国产97久久久久久免费 | 国产肉丝袜在线观看 | 黑人玩弄人妻中文在线 | 欧美亚洲日韩国产人成在线播放 | 亚洲区小说区激情区图片区 | 99在线 | 亚洲 | 性生交大片免费看女人按摩摩 | 嫩b人妻精品一区二区三区 | 亚洲区欧美区综合区自拍区 | 欧美喷潮久久久xxxxx | 成人亚洲精品久久久久软件 | 国产综合色产在线精品 | 久久无码中文字幕免费影院蜜桃 | 久久精品人人做人人综合 | 久久久久免费看成人影片 | 亚洲欧美中文字幕5发布 | 男人的天堂2018无码 | 国产精品第一国产精品 | 亚洲а∨天堂久久精品2021 | 伊在人天堂亚洲香蕉精品区 | 中文毛片无遮挡高清免费 | 香港三级日本三级妇三级 | 亚洲自偷精品视频自拍 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产三级久久久精品麻豆三级 | 麻花豆传媒剧国产免费mv在线 | 精品偷拍一区二区三区在线看 | 亚洲一区二区三区偷拍女厕 | 内射后入在线观看一区 | 99视频精品全部免费免费观看 | 一区二区三区乱码在线 | 欧洲 | 露脸叫床粗话东北少妇 | 中文字幕无码人妻少妇免费 | 精品国产精品久久一区免费式 | 性生交大片免费看l | 亚洲乱码国产乱码精品精 | 九月婷婷人人澡人人添人人爽 | 伊人久久婷婷五月综合97色 | 99久久精品午夜一区二区 | 一本久道高清无码视频 | 国产精品无码mv在线观看 | 无码人中文字幕 | 四十如虎的丰满熟妇啪啪 | 亚洲精品一区国产 | 精品aⅴ一区二区三区 | 亚洲日韩一区二区三区 | 亚洲精品美女久久久久久久 | 曰韩无码二三区中文字幕 | 久久精品国产大片免费观看 | 人人妻人人藻人人爽欧美一区 | 成人精品天堂一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 亚洲日韩av一区二区三区中文 | 无码纯肉视频在线观看 | 99视频精品全部免费免费观看 | av在线亚洲欧洲日产一区二区 | av无码不卡在线观看免费 | 国产在热线精品视频 | 巨爆乳无码视频在线观看 | 性色欲情网站iwww九文堂 | 国产精品亚洲lv粉色 | 性啪啪chinese东北女人 | 天天躁夜夜躁狠狠是什么心态 | 中文字幕乱码人妻无码久久 | 天堂无码人妻精品一区二区三区 | 国产后入清纯学生妹 | 亚洲狠狠色丁香婷婷综合 | 4hu四虎永久在线观看 | www国产亚洲精品久久网站 | 人人澡人人妻人人爽人人蜜桃 | 亚洲爆乳无码专区 | 东京无码熟妇人妻av在线网址 | 中文字幕无码日韩专区 | 亚洲精品午夜国产va久久成人 | 久久精品女人的天堂av | 亚洲日本一区二区三区在线 | 大地资源中文第3页 | 亚洲の无码国产の无码步美 | 人妻有码中文字幕在线 | 久久国内精品自在自线 | 国产精品久久久久久亚洲影视内衣 | 欧美老妇与禽交 | 亚洲爆乳无码专区 | 人人妻人人澡人人爽欧美一区 | 精品水蜜桃久久久久久久 | 久久综合九色综合欧美狠狠 | 男人和女人高潮免费网站 | 乌克兰少妇xxxx做受 | 国产高清不卡无码视频 | 美女毛片一区二区三区四区 | 欧美第一黄网免费网站 | 国产亚洲精品精品国产亚洲综合 | 亚洲精品久久久久久久久久久 | 99久久久无码国产aaa精品 | 精品国产青草久久久久福利 | 兔费看少妇性l交大片免费 | 国内精品人妻无码久久久影院蜜桃 | 中文字幕人妻无码一区二区三区 | 国产福利视频一区二区 | 无码人妻久久一区二区三区不卡 | 无套内谢的新婚少妇国语播放 | 一二三四社区在线中文视频 | 人人妻人人澡人人爽欧美一区 | 亚洲日韩一区二区 | 欧美精品在线观看 | 无码av中文字幕免费放 | 兔费看少妇性l交大片免费 | 亚洲精品国产a久久久久久 | 网友自拍区视频精品 | 日本精品人妻无码免费大全 | 国产麻豆精品精东影业av网站 | 精品人妻人人做人人爽 | 日韩精品乱码av一区二区 | 激情内射亚州一区二区三区爱妻 | 久久精品成人欧美大片 | 欧美性色19p | 国产明星裸体无码xxxx视频 | 一本久道久久综合婷婷五月 | 97精品人妻一区二区三区香蕉 | 久久久久久久人妻无码中文字幕爆 | 乱人伦人妻中文字幕无码 | 亚洲国产综合无码一区 | 国产精品亚洲а∨无码播放麻豆 | 久久精品人人做人人综合 | 一本久久a久久精品亚洲 | 狠狠亚洲超碰狼人久久 | 亚洲区小说区激情区图片区 | 日日天日日夜日日摸 | 精品国产一区av天美传媒 | 无码av中文字幕免费放 | 色五月五月丁香亚洲综合网 | 内射老妇bbwx0c0ck | 午夜成人1000部免费视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲欧美国产精品专区久久 | 国产精品丝袜黑色高跟鞋 | 日本护士xxxxhd少妇 | 久久精品国产一区二区三区 | 99精品国产综合久久久久五月天 | 国内少妇偷人精品视频 | 亚洲日韩av一区二区三区中文 | 最新版天堂资源中文官网 | 亚洲色www成人永久网址 | 对白脏话肉麻粗话av | 内射后入在线观看一区 | 国产亚洲精品久久久久久大师 | 天海翼激烈高潮到腰振不止 | 精品国产一区二区三区四区 | 国产精品手机免费 | 女人被男人躁得好爽免费视频 | 在线观看免费人成视频 | 激情国产av做激情国产爱 | 天天躁日日躁狠狠躁免费麻豆 | 在线亚洲高清揄拍自拍一品区 | 377p欧洲日本亚洲大胆 | 国产免费久久精品国产传媒 | 日本一本二本三区免费 | 99久久婷婷国产综合精品青草免费 | 欧美日本日韩 | 成人免费视频一区二区 | 日日天日日夜日日摸 | 狠狠噜狠狠狠狠丁香五月 | 一区二区三区高清视频一 | 男女超爽视频免费播放 | 国产内射老熟女aaaa | 1000部夫妻午夜免费 | 免费看少妇作爱视频 | 伊人色综合久久天天小片 | 青草视频在线播放 | 中文字幕无码视频专区 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲熟妇色xxxxx亚洲 | 图片区 小说区 区 亚洲五月 | 亚洲中文字幕在线观看 | 国产亚洲精品精品国产亚洲综合 | 一本久久a久久精品vr综合 | 亚洲狠狠色丁香婷婷综合 | 亚洲综合无码一区二区三区 | 日本丰满护士爆乳xxxx | av人摸人人人澡人人超碰下载 | 亚洲日本在线电影 | 国产疯狂伦交大片 | 精品久久久无码人妻字幂 | 麻豆国产人妻欲求不满 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久这里只有精品视频9 | 欧美日韩人成综合在线播放 | 97夜夜澡人人爽人人喊中国片 | 久久精品国产大片免费观看 | 亚洲国产午夜精品理论片 | 亚洲国产一区二区三区在线观看 | 亚洲精品成人福利网站 | 欧美大屁股xxxxhd黑色 | 亚洲人亚洲人成电影网站色 | 亚洲国产一区二区三区在线观看 | 国产精品丝袜黑色高跟鞋 | 国产精品无码永久免费888 | 激情五月综合色婷婷一区二区 | 国产香蕉尹人综合在线观看 | 老头边吃奶边弄进去呻吟 | 国产午夜亚洲精品不卡 | 国产极品美女高潮无套在线观看 | 免费中文字幕日韩欧美 | 国产在线精品一区二区三区直播 | 久久97精品久久久久久久不卡 | 人妻体内射精一区二区三四 | 精品日本一区二区三区在线观看 | 国产亚洲日韩欧美另类第八页 | 成人aaa片一区国产精品 | 十八禁视频网站在线观看 | 中文字幕无码日韩专区 | 日本大香伊一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 99久久无码一区人妻 | 永久免费观看美女裸体的网站 | 亚洲 日韩 欧美 成人 在线观看 | 国产亚洲精品久久久久久国模美 | 亚洲色在线无码国产精品不卡 | 久久午夜无码鲁丝片 | 国产午夜无码精品免费看 | 夜精品a片一区二区三区无码白浆 | 极品嫩模高潮叫床 | 精品国产成人一区二区三区 | 亚洲精品中文字幕乱码 | 久久久久国色av免费观看性色 | 永久免费观看美女裸体的网站 | 精品人妻中文字幕有码在线 | 青春草在线视频免费观看 | 亚洲国产精华液网站w | 国产午夜福利亚洲第一 | 在线天堂新版最新版在线8 | 欧美性生交xxxxx久久久 | 亚洲精品久久久久中文第一幕 | 国产乱人无码伦av在线a | 日韩欧美群交p片內射中文 | 日日噜噜噜噜夜夜爽亚洲精品 | 日韩成人一区二区三区在线观看 | 国产亚洲美女精品久久久2020 | v一区无码内射国产 | 牲欲强的熟妇农村老妇女视频 | 亚洲人成网站在线播放942 | 国产午夜精品一区二区三区嫩草 | 国产精华av午夜在线观看 | 午夜精品久久久内射近拍高清 | 人妻夜夜爽天天爽三区 | 在线播放免费人成毛片乱码 | 亚洲精品午夜无码电影网 | 成 人影片 免费观看 | 亚洲gv猛男gv无码男同 | 一本色道久久综合狠狠躁 | 日韩成人一区二区三区在线观看 | 亚洲精品一区二区三区在线 | av香港经典三级级 在线 | 午夜理论片yy44880影院 | 国产性生大片免费观看性 | 99久久久无码国产精品免费 | 最新国产麻豆aⅴ精品无码 | 婷婷综合久久中文字幕蜜桃三电影 | 最近免费中文字幕中文高清百度 | 欧美日本日韩 | 亚洲欧美国产精品专区久久 | 4hu四虎永久在线观看 | 日本xxxx色视频在线观看免费 | 亚洲娇小与黑人巨大交 | 国产精品久久久久久久9999 | 久久99精品国产.久久久久 | 成人精品一区二区三区中文字幕 | 性色av无码免费一区二区三区 | 国内丰满熟女出轨videos | 精品午夜福利在线观看 | 好爽又高潮了毛片免费下载 | 中文字幕无线码免费人妻 | 国产日产欧产精品精品app | 牲交欧美兽交欧美 | 国产综合在线观看 | 红桃av一区二区三区在线无码av | 成熟妇人a片免费看网站 | a在线观看免费网站大全 | 亚洲日韩中文字幕在线播放 | 久久99精品久久久久久动态图 | 搡女人真爽免费视频大全 | 强伦人妻一区二区三区视频18 | 国产成人久久精品流白浆 | 国产人妻人伦精品1国产丝袜 | 又色又爽又黄的美女裸体网站 | 九九综合va免费看 | 日日夜夜撸啊撸 | 亚洲日韩中文字幕在线播放 | 国产精品美女久久久网av | 精品无码国产一区二区三区av | 午夜性刺激在线视频免费 | 日韩精品无码免费一区二区三区 | 国产 精品 自在自线 | 国产无av码在线观看 | 色欲综合久久中文字幕网 | 精品国产国产综合精品 | 国产精品国产三级国产专播 | 色婷婷综合中文久久一本 | 又色又爽又黄的美女裸体网站 | 精品成在人线av无码免费看 | 十八禁视频网站在线观看 | 欧美成人高清在线播放 | 久久无码专区国产精品s | 国产精品无码mv在线观看 | 久久aⅴ免费观看 | 对白脏话肉麻粗话av | 2020最新国产自产精品 | 国产内射爽爽大片视频社区在线 | 国产精品久久久午夜夜伦鲁鲁 | 久久午夜无码鲁丝片 | 乱人伦人妻中文字幕无码久久网 | 人妻少妇精品无码专区动漫 | 久久人人爽人人爽人人片av高清 | 欧美老人巨大xxxx做受 | 乱人伦人妻中文字幕无码久久网 | 任你躁国产自任一区二区三区 | 成人影院yy111111在线观看 | 色婷婷欧美在线播放内射 | 中文久久乱码一区二区 | 欧美色就是色 | 老熟妇乱子伦牲交视频 | 中文字幕无线码免费人妻 | 牲欲强的熟妇农村老妇女视频 | 久久99精品久久久久久动态图 | 内射白嫩少妇超碰 | 日日夜夜撸啊撸 | 丰满人妻翻云覆雨呻吟视频 | 国内揄拍国内精品人妻 | 奇米影视888欧美在线观看 | 久久久精品欧美一区二区免费 | 激情综合激情五月俺也去 | 国产免费久久精品国产传媒 | 精品久久久无码人妻字幂 | 99久久精品日本一区二区免费 | 激情亚洲一区国产精品 | 无码人妻丰满熟妇区毛片18 | 亚洲国产成人av在线观看 | 国内精品久久毛片一区二区 | 亚洲 激情 小说 另类 欧美 | 国产精品久久久久久久9999 | 免费观看又污又黄的网站 | 无码纯肉视频在线观看 | 波多野结衣一区二区三区av免费 | 久久成人a毛片免费观看网站 | 国产成人精品一区二区在线小狼 | 成人试看120秒体验区 | 欧洲vodafone精品性 | 98国产精品综合一区二区三区 | 国内精品一区二区三区不卡 | 精品无人国产偷自产在线 | 性生交大片免费看l | 亚洲熟妇色xxxxx欧美老妇 | 精品久久久无码中文字幕 | 人妻中文无码久热丝袜 | 东京热无码av男人的天堂 | 狠狠色噜噜狠狠狠7777奇米 | 色综合久久中文娱乐网 | 国产精品久久久av久久久 | 国产精品久久久久无码av色戒 | 无码人妻久久一区二区三区不卡 | 纯爱无遮挡h肉动漫在线播放 | 国产成人无码av片在线观看不卡 | 领导边摸边吃奶边做爽在线观看 | 天天躁日日躁狠狠躁免费麻豆 | 国产一区二区三区影院 | 国产高潮视频在线观看 | 欧美性生交活xxxxxdddd | 奇米影视7777久久精品人人爽 | 中文字幕人妻无码一夲道 | 午夜精品久久久内射近拍高清 | 乱人伦中文视频在线观看 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 两性色午夜视频免费播放 | 亚洲欧美国产精品专区久久 | 日本精品人妻无码免费大全 | 国产精品美女久久久久av爽李琼 | 又大又紧又粉嫩18p少妇 | 国产suv精品一区二区五 | 高清国产亚洲精品自在久久 | 日韩人妻无码一区二区三区久久99 | 日本熟妇大屁股人妻 | 丰满少妇人妻久久久久久 | 大肉大捧一进一出视频出来呀 | 日本一区二区三区免费播放 | 国产精品第一区揄拍无码 | 色婷婷综合激情综在线播放 | 免费乱码人妻系列无码专区 | √8天堂资源地址中文在线 | 亚洲中文字幕无码中文字在线 | 国内精品久久久久久中文字幕 | 一本久道高清无码视频 | av无码久久久久不卡免费网站 | 成人综合网亚洲伊人 | 午夜无码区在线观看 | 少妇一晚三次一区二区三区 | 日本精品久久久久中文字幕 | 欧美午夜特黄aaaaaa片 | 亚洲国产精品美女久久久久 | 久久精品无码一区二区三区 | 久久亚洲日韩精品一区二区三区 | 少妇无套内谢久久久久 | 亚洲国产av美女网站 | 日本护士毛茸茸高潮 | 久久久久久国产精品无码下载 | 99久久精品国产一区二区蜜芽 | 精品 日韩 国产 欧美 视频 | 性色av无码免费一区二区三区 | 丰满肥臀大屁股熟妇激情视频 | 领导边摸边吃奶边做爽在线观看 | 国产三级久久久精品麻豆三级 | 99久久99久久免费精品蜜桃 | 久久午夜无码鲁丝片午夜精品 | 在线天堂新版最新版在线8 | 日本精品人妻无码免费大全 | 欧美人与禽zoz0性伦交 | 国产精品高潮呻吟av久久4虎 | 日日天干夜夜狠狠爱 | 一区二区传媒有限公司 | 国产另类ts人妖一区二区 | 大肉大捧一进一出视频出来呀 | 免费国产成人高清在线观看网站 | 国产精品久久久午夜夜伦鲁鲁 | 黄网在线观看免费网站 | 图片区 小说区 区 亚洲五月 | 成人精品一区二区三区中文字幕 | 国产极品美女高潮无套在线观看 | 国产99久久精品一区二区 | 日本一本二本三区免费 | 久久久久人妻一区精品色欧美 | 亚洲成av人影院在线观看 | 国产乡下妇女做爰 | 国产精品人人妻人人爽 | 无码一区二区三区在线观看 | 欧美精品无码一区二区三区 | 欧美日韩综合一区二区三区 | 97se亚洲精品一区 | 人妻无码αv中文字幕久久琪琪布 | 大屁股大乳丰满人妻 | 国产麻豆精品一区二区三区v视界 | 亚洲国产精品久久人人爱 | 色婷婷久久一区二区三区麻豆 | √8天堂资源地址中文在线 | 97久久超碰中文字幕 | 国产无遮挡又黄又爽免费视频 | 国产亚洲精品久久久闺蜜 | 亚洲成av人片在线观看无码不卡 | 久久精品丝袜高跟鞋 | 久久99精品国产麻豆蜜芽 | 久久国语露脸国产精品电影 | 无码人妻出轨黑人中文字幕 | 国产午夜福利亚洲第一 | 十八禁真人啪啪免费网站 | 巨爆乳无码视频在线观看 | 亚洲自偷自拍另类第1页 | 天天拍夜夜添久久精品 | 亚洲爆乳无码专区 | 国产精品亚洲综合色区韩国 | 六月丁香婷婷色狠狠久久 | 少妇被黑人到高潮喷出白浆 | 亚洲精品成a人在线观看 | 黑人巨大精品欧美黑寡妇 | 欧美日韩综合一区二区三区 | 在线精品国产一区二区三区 | 精品无码国产一区二区三区av | 97夜夜澡人人爽人人喊中国片 | 午夜精品一区二区三区的区别 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产成人精品三级麻豆 | 欧美三级a做爰在线观看 | 成人精品视频一区二区三区尤物 | 在线成人www免费观看视频 | 狠狠色噜噜狠狠狠狠7777米奇 | 无码一区二区三区在线观看 | 爽爽影院免费观看 | 国产在线aaa片一区二区99 | 精品厕所偷拍各类美女tp嘘嘘 | 欧美日本精品一区二区三区 | 亚洲精品一区二区三区在线观看 | 日韩欧美成人免费观看 | 国产精品鲁鲁鲁 | 玩弄少妇高潮ⅹxxxyw | 国产国产精品人在线视 | 欧美日韩人成综合在线播放 | 国产亚洲人成a在线v网站 | 免费乱码人妻系列无码专区 | 日韩欧美中文字幕在线三区 | 国产精品久久久久影院嫩草 | а天堂中文在线官网 | 亚洲日韩av一区二区三区四区 | 精品乱码久久久久久久 | 一本久久a久久精品vr综合 | 亚洲 另类 在线 欧美 制服 | 又大又硬又爽免费视频 | 久久www免费人成人片 | 久久国产精品精品国产色婷婷 | 日本熟妇大屁股人妻 | 精品偷自拍另类在线观看 | 久久久久99精品成人片 | 久久久久人妻一区精品色欧美 | 欧美性猛交内射兽交老熟妇 | 亚洲国产精品美女久久久久 | 2019午夜福利不卡片在线 | 亚洲综合精品香蕉久久网 | 成人无码视频在线观看网站 | 少妇无码av无码专区在线观看 | 欧美丰满老熟妇xxxxx性 | 日韩欧美成人免费观看 | 国产又爽又黄又刺激的视频 | 国产午夜无码视频在线观看 | 国产亚洲日韩欧美另类第八页 | 一区二区传媒有限公司 | 精品国产青草久久久久福利 | 人妻夜夜爽天天爽三区 | 亚洲国产av精品一区二区蜜芽 | 国产偷抇久久精品a片69 | 国产日产欧产精品精品app | 一区二区三区高清视频一 | 中文字幕乱妇无码av在线 | 精品一二三区久久aaa片 | 国产成人综合色在线观看网站 | 国产无遮挡又黄又爽免费视频 | 国产免费无码一区二区视频 | 无码一区二区三区在线观看 | 最近免费中文字幕中文高清百度 | 东京热一精品无码av | 免费网站看v片在线18禁无码 | 亚洲成色www久久网站 | 亚洲人成人无码网www国产 | 欧美日韩一区二区综合 | 四虎国产精品一区二区 | 在线观看免费人成视频 | 亚洲一区二区三区国产精华液 | 人人妻人人澡人人爽人人精品 | 亚洲欧洲中文日韩av乱码 | 成人免费无码大片a毛片 | 欧美精品国产综合久久 | 国产特级毛片aaaaaa高潮流水 | 欧美丰满熟妇xxxx性ppx人交 | 人妻有码中文字幕在线 | 精品一区二区不卡无码av | 久久熟妇人妻午夜寂寞影院 | 色噜噜亚洲男人的天堂 | 中国女人内谢69xxxxxa片 | 亚洲国产欧美在线成人 | 国产精品对白交换视频 | 成熟人妻av无码专区 | 久久午夜无码鲁丝片午夜精品 | 国产做国产爱免费视频 | 久久久久人妻一区精品色欧美 | 天天摸天天碰天天添 | 午夜肉伦伦影院 | 99久久精品国产一区二区蜜芽 | 中文字幕乱码中文乱码51精品 | 无码免费一区二区三区 | 亲嘴扒胸摸屁股激烈网站 | 色欲综合久久中文字幕网 | 国产欧美熟妇另类久久久 | 亚洲熟妇色xxxxx欧美老妇y | 午夜男女很黄的视频 | 国产综合在线观看 | 亚洲色欲久久久综合网东京热 | 免费人成在线观看网站 | 亚洲一区二区观看播放 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品国产第一综合99久久 | 亚洲中文字幕无码一久久区 | 人妻人人添人妻人人爱 | 国产精品久久久久久亚洲影视内衣 | 欧美 日韩 亚洲 在线 | 日本一区二区三区免费播放 | 国产又爽又黄又刺激的视频 | 亚洲色欲色欲欲www在线 | 亚洲 激情 小说 另类 欧美 | 青青青爽视频在线观看 | 丝袜 中出 制服 人妻 美腿 | 一本大道久久东京热无码av | 丰腴饱满的极品熟妇 | 国产97人人超碰caoprom | 一本一道久久综合久久 | 国产成人无码午夜视频在线观看 | 精品乱子伦一区二区三区 | 成人精品视频一区二区三区尤物 | 一个人免费观看的www视频 | 未满成年国产在线观看 | 亚洲国产精品一区二区第一页 | 亚洲精品无码国产 | 午夜男女很黄的视频 | 久久午夜无码鲁丝片秋霞 | 2020久久超碰国产精品最新 | 国产午夜福利100集发布 | 99久久亚洲精品无码毛片 | 国产精品美女久久久久av爽李琼 | 亚洲va中文字幕无码久久不卡 | 97久久超碰中文字幕 | 国内丰满熟女出轨videos | 日本精品少妇一区二区三区 | 国内精品久久久久久中文字幕 | 日本www一道久久久免费榴莲 | 国产电影无码午夜在线播放 | 日韩av激情在线观看 | 无码国模国产在线观看 | 少妇太爽了在线观看 | 日韩精品成人一区二区三区 | 欧美亚洲国产一区二区三区 | 一区二区传媒有限公司 | 中文精品无码中文字幕无码专区 | 精品无码国产自产拍在线观看蜜 | 成人一在线视频日韩国产 | 国产精品高潮呻吟av久久4虎 | 67194成是人免费无码 | 兔费看少妇性l交大片免费 | 亚洲熟悉妇女xxx妇女av | 久久天天躁狠狠躁夜夜免费观看 | 国产综合色产在线精品 | 大屁股大乳丰满人妻 | 国产精品久久久久久亚洲毛片 | 99久久无码一区人妻 | 亚洲爆乳无码专区 | 国产免费无码一区二区视频 | 亚洲s码欧洲m码国产av | 中文字幕乱码人妻无码久久 | 蜜桃av抽搐高潮一区二区 | 300部国产真实乱 | 人妻体内射精一区二区三四 | 国产精品久久久久久无码 | 免费人成网站视频在线观看 | 国产乱子伦视频在线播放 | 免费无码一区二区三区蜜桃大 | 成人无码精品1区2区3区免费看 | 成人精品一区二区三区中文字幕 | 亚洲va欧美va天堂v国产综合 | 99久久久国产精品无码免费 | 色老头在线一区二区三区 | 亚洲成av人影院在线观看 | 99久久精品无码一区二区毛片 | 国产舌乚八伦偷品w中 | 国产精品久久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 99国产欧美久久久精品 | 国产人妻精品一区二区三区不卡 | 夜精品a片一区二区三区无码白浆 | 免费中文字幕日韩欧美 | 欧美xxxx黑人又粗又长 | 国产成人无码一二三区视频 | 欧美xxxx黑人又粗又长 | 亚洲精品综合五月久久小说 | 欧美三级不卡在线观看 | 男人的天堂av网站 | 蜜桃视频插满18在线观看 | 亚洲欧美综合区丁香五月小说 | 女人和拘做爰正片视频 | 沈阳熟女露脸对白视频 | 成人三级无码视频在线观看 | 日日橹狠狠爱欧美视频 | ass日本丰满熟妇pics | 强开小婷嫩苞又嫩又紧视频 | a在线观看免费网站大全 | 国产av无码专区亚洲a∨毛片 | 国内少妇偷人精品视频 | 真人与拘做受免费视频 | 久精品国产欧美亚洲色aⅴ大片 | 欧美日韩一区二区免费视频 | 黑人巨大精品欧美一区二区 | 玩弄人妻少妇500系列视频 | 丰满岳乱妇在线观看中字无码 | 伊人久久婷婷五月综合97色 | 蜜臀av在线播放 久久综合激激的五月天 | 国产精品久久久久久久影院 | 中文字幕无码av激情不卡 | 在教室伦流澡到高潮hnp视频 | 国产偷自视频区视频 | 亚洲一区av无码专区在线观看 | 国产色xx群视频射精 | 最新版天堂资源中文官网 | 小鲜肉自慰网站xnxx | 久精品国产欧美亚洲色aⅴ大片 | 无码任你躁久久久久久久 | 国内综合精品午夜久久资源 | 粉嫩少妇内射浓精videos | 好男人www社区 | 无码帝国www无码专区色综合 | 亚洲人成人无码网www国产 | 国产精品无码永久免费888 | 成 人 网 站国产免费观看 | 国产国产精品人在线视 | 精品国产福利一区二区 | 激情内射亚州一区二区三区爱妻 | 亚洲一区二区三区 | 久久久久免费精品国产 | 成人片黄网站色大片免费观看 | 午夜福利试看120秒体验区 | ass日本丰满熟妇pics | 久久天天躁狠狠躁夜夜免费观看 | 在线а√天堂中文官网 | 未满成年国产在线观看 | 欧美国产亚洲日韩在线二区 | 日韩精品久久久肉伦网站 | 青青青爽视频在线观看 | 亚洲第一网站男人都懂 | 久久综合给久久狠狠97色 | 欧美日韩视频无码一区二区三 | 日本免费一区二区三区最新 | yw尤物av无码国产在线观看 | 综合激情五月综合激情五月激情1 | 偷窥日本少妇撒尿chinese | 色婷婷av一区二区三区之红樱桃 | 丝袜美腿亚洲一区二区 | 精品国产一区二区三区四区在线看 | 国产网红无码精品视频 | 国产精品久久久久久亚洲毛片 | 丁香花在线影院观看在线播放 | 蜜桃臀无码内射一区二区三区 | 国产在线精品一区二区高清不卡 | 男人扒开女人内裤强吻桶进去 | 中文字幕乱码中文乱码51精品 | 精品国产福利一区二区 | 欧美大屁股xxxxhd黑色 | 成人免费无码大片a毛片 | 最近的中文字幕在线看视频 | 久久精品丝袜高跟鞋 | 免费无码肉片在线观看 | 亚洲毛片av日韩av无码 | 国产午夜无码精品免费看 | 亚洲精品国产a久久久久久 | 亚洲欧洲中文日韩av乱码 | 色婷婷综合激情综在线播放 | 无码人妻精品一区二区三区不卡 | 久久久www成人免费毛片 | 亚洲精品一区二区三区在线 | 亚洲熟妇色xxxxx欧美老妇 | 丝袜人妻一区二区三区 | 2020久久香蕉国产线看观看 | 欧美自拍另类欧美综合图片区 | 国产亚洲tv在线观看 | 国产特级毛片aaaaaa高潮流水 | 中文字幕乱妇无码av在线 | 欧美日韩亚洲国产精品 | 55夜色66夜色国产精品视频 | 国产成人精品必看 | 久久这里只有精品视频9 | 无码任你躁久久久久久久 |