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

JVM 從入門到放棄之 ZGC 垃圾收集器

開發(fā) 后端
本文主要是從概念上描述了 ZGC 的特征和工作過程。目前大多數(shù)互聯(lián)網(wǎng)公司還是使用 jdk 8、jdk 11 主流使用的還是 ParNew + CMS 組合或者 G1。

ZGC 概述

Z Garbage Collector,也稱為ZGC,在 jdk 11 中引入的一種可擴(kuò)展的低延遲垃圾收集器,在 jdk 15 中發(fā)布穩(wěn)定版。在旨在滿足以下目標(biāo):

  • < 1ms 最大暫停時(shí)間(jdk < 16 是 10ms,jdk >=16 是 <1ms )。
  • 暫停時(shí)間不會(huì)隨著堆、live-set 或 root-set 的大小而增加。
  • 適用內(nèi)存大小從 8MB 到16TB 的堆。

ZGC 具有以下特征:

  • 并發(fā)
  • 基于 region
  • 壓縮
  • NUMA 感知
  • 使用彩色指針
  • 使用負(fù)載屏障

ZGC 的核心是一個(gè)并發(fā)垃圾收集器,這意味著所有繁重的工作都在Java 線程繼續(xù)執(zhí)行的同時(shí)完成。這極大地限制了垃圾收集對(duì)應(yīng)用程序響應(yīng)時(shí)間的影響。

ZGC 特征

ZGC 收集器是一款基于 Region 內(nèi)存布局的,(暫時(shí)) 不設(shè)分代的,使用了讀屏障、染色指針和內(nèi)存多重映射等技術(shù)來實(shí)現(xiàn)可并發(fā)的標(biāo)記-整理算法的,以低延遲為首要目標(biāo)的一款垃圾收集器。

內(nèi)存布局

ZGC 沒有分代的概念

ZGC 的內(nèi)存布局說起。與 Shenandoah 和 G1一樣,ZGC 也采用基于 Region 的堆內(nèi)存布局,但與它們不同的是 , ZGC 的 Region 具 有 動(dòng) 態(tài) 性 (動(dòng)態(tài)創(chuàng)建和銷毀 , 以及動(dòng)態(tài)的區(qū)域容量大小)。在 x64硬件平臺(tái)下 , ZGC 的 Region 可以具有大、中、小三類容量(如下圖所示):

  • 小型 Region (Small Region ):容量固定為 2M, 存放小于 256K 的對(duì)象。
  • 中型 Region (Medium Region):容量固定為 32M,放置大于等于256K但小于4M的對(duì)象。
  • 大型 Region (Large Region): 容量不固定,可以動(dòng)態(tài)變化,但必須為2MB 的整數(shù)倍,用于放置 4MB或以上的大對(duì)象。

NUMA-aware

NUMA 對(duì)應(yīng)的有 NMA 、UMA 即 Uniform Memory Access Architecture, NUMA 就是 Non Uniform Memory Access Architecture. UMA 表示內(nèi)存只有一塊,所有的 CUU 都要去訪問這些內(nèi)存,那么會(huì)存在競(jìng)爭問題(競(jìng)爭內(nèi)存總線訪問權(quán)),有競(jìng)爭就要去加鎖,有鎖效率就會(huì)受到影響,而且 CPU 核心數(shù)越多,競(jìng)爭就越激烈。NUMA 的話每個(gè) CPU 對(duì)應(yīng)有一個(gè)內(nèi)存塊,且這塊內(nèi)存在主板上離這個(gè) CPU 是最近的,每個(gè) CPU 優(yōu)先訪問這塊內(nèi)存,那效率就自然提高了。

服務(wù)器的 NUMA 架構(gòu)在中大型系統(tǒng)上非常流行,也就是高性能的解決方案,尤其在系統(tǒng)延遲方面表現(xiàn)非常優(yōu)秀,ZGC 是能自動(dòng)感知 NUMA 架構(gòu)并且充分利用 NUMA 架構(gòu)的特征。

染色指針(Colored Pointer)

Colored Pointer, 即染色指針,如圖所示, ZGC 的核心設(shè)計(jì)之一。以前的垃圾收集器的 GC 信息都保存在對(duì)象頭中,而 ZGC 的 GC 信息保存在指針中(直接把標(biāo)記信息記錄在對(duì)象的引用指針上)。

每個(gè)對(duì)象有一個(gè)64位指針,這64位被分為:

  • 18位:預(yù)留給以后使用。
  • 1位:Finalizable標(biāo)識(shí),此位與并發(fā)引用處理有關(guān),它表示這個(gè)對(duì)象只能通過finalizer才能訪問(finalizer:object基類的一個(gè)空方法,如果被重寫則會(huì)在GC之前調(diào)用該方法,該方法會(huì)且只會(huì)被調(diào)用一次)。
  • 1位:Remapped 標(biāo)識(shí),設(shè)置此位的值后,對(duì)象未指向relocation set中(relocation set表示需要GC的Region集合)。
  • 1位:Marked1標(biāo)識(shí)。
  • 1位:Marked0標(biāo)識(shí),和上面的Marked1都是標(biāo)記對(duì)象用于輔助GC。
  • 42位:對(duì)象的地址(所以它可以支持2^42=4T內(nèi)存):

為什么會(huì)有兩個(gè) mark 標(biāo)記?

每一個(gè)GC周期開始時(shí),會(huì)交換使用的標(biāo)記位,使上次GC周期中修正的已標(biāo)記狀態(tài)失效,所有引用都變成未標(biāo)記。GC周期1:使用mark0, 則周期結(jié)束所有引用mark標(biāo)記都會(huì)成為 01。GC周期2:使用mark1, 與周期1相同,所有的mark標(biāo)記都會(huì)成為 10。

ZGC不能做指針壓縮?

指針壓縮指的是壓縮為32位,尋址位數(shù)不能超過35,也就是JVM內(nèi)存最大為32G(2^35=32GB),這里的尋址位數(shù)已經(jīng)達(dá)到了42位。

顏色指針的三大優(yōu)勢(shì) ?

  1. 在一個(gè)Region中的所有存活對(duì)象都被移走后(復(fù)制走后),這個(gè)Region就可以被立即釋放掉,因?yàn)樗€有轉(zhuǎn)發(fā)表記錄著原始地址和新地址,這樣的話,理論上,只要還有一個(gè)Region對(duì)象空閑,ZGC就能完成垃圾收集。
  2. 顏色指針有指針的“自愈”(Self-Healing)能力,這樣子就減少了寫屏障(例如三色標(biāo)記中的增量更新或原始快照),只需要一個(gè)讀屏障就可以解決問題,減少了內(nèi)存屏障的使用數(shù)量。
  3. 顏色指針有著極大的擴(kuò)展性,因?yàn)檫€有18位未使用,這樣更有利于后續(xù)功能的擴(kuò)展。

多重映射尋址

不同的虛擬機(jī)內(nèi)存到物理內(nèi)存的轉(zhuǎn)換關(guān)系可以在硬件層面,操作系統(tǒng)層面或者軟件層面來實(shí)現(xiàn)。在 Linux 平臺(tái)上 ZGC 采用了多重映射(Mult-Mapping)將多個(gè)不同的虛擬內(nèi)存地址映射到同一個(gè)物理內(nèi)存地址上,著是一種多對(duì)一映射,一位著 ZGC 在虛擬內(nèi)中看到的地址空間要比時(shí)機(jī)的堆內(nèi)存容量來得更大。把染色指針中的標(biāo)志位看作是地址分段符,那只要將這些不同的地址分段符都映射到同一個(gè)福利內(nèi)空間,經(jīng)過多重映射轉(zhuǎn)換后,就可以直接使用染色指針進(jìn)行尋址了,如下圖所示:

多重映射技術(shù)確實(shí)可能帶來一些諸如復(fù)制大對(duì)象時(shí)會(huì)更容易這樣額外的好處,但是從源頭上來說,ZGC 的多重映射只是采用染色指針的衍生品,并不是為了專門的為實(shí)現(xiàn)其他某種特征需求而做的。

讀屏障

ZGC采用的讀屏障的方式來修正指針引用,由于ZGC采用的是復(fù)制整理的方式進(jìn)行GC,很有可能在對(duì)象的位置改變之后指針位置尚未更新時(shí)程序調(diào)用了該對(duì)象,那么此時(shí)在程序需要并行的獲取該對(duì)象的引用時(shí),ZGC就會(huì)對(duì)該對(duì)象的指針進(jìn)行讀取,判斷Remapped標(biāo)識(shí),如果標(biāo)識(shí)為該對(duì)象位于本次需要清理的region區(qū)中,該對(duì)象則會(huì)有內(nèi)存地址變化,會(huì)在指針中將新的引用地址替換原有對(duì)象的引用地址,然后再進(jìn)行返回。

如此,使用讀屏障便解決了并發(fā)GC的對(duì)象讀取問題。

Object o = obj.fieldA;    // Loading an object reference from heap
<load barrier needed here>
Object p = o; // No barrier, not a load from heap
o.doSomething(); // No barrier, not a load from heap
int i = obj.fieldB; // No barrier, not an object reference

LoadBarriers的存在,所以會(huì)導(dǎo)致配置ZGC的應(yīng)用的吞吐量會(huì)變低。官方的測(cè)試數(shù)據(jù)是需要多出額外4%的開銷:

ZGC 工作過程

ZGC 的運(yùn)作過程主要可以分為以下四個(gè)階段:

ZGC 處理過程.png

并發(fā)標(biāo)記(Concurrent Mark):與G1、Shenandoah一樣,并發(fā)標(biāo)記是遍歷對(duì)象圖做可達(dá)性分析的 階段,前后也要經(jīng)過類似于G1、Shenandoah的初始標(biāo)記、最終標(biāo)記(盡管ZGC中的名字不叫這些)的短暫停頓,而且這些停頓階段所做的事情在目標(biāo)上也是相類似的。與G1、Shenandoah不同的是,ZGC的標(biāo)記是在指針上而不是在對(duì)象上進(jìn)行的,標(biāo)記階段會(huì)更新染色指針中的Marked 0、Marked 1標(biāo)志位。

并發(fā)預(yù)備重分配(Concurrent Prepare for Relocate):這個(gè)階段需要根據(jù)特定的查詢條件統(tǒng)計(jì)得出本次收集過程要清理哪些Region,將這些Region組成重分配集(Relocation Set)。重分配集與G1收集器的回收集(Collection Set)還是有區(qū)別的,ZGC劃分Region的目的并非為了像G1那樣做收益優(yōu)先的增量回收。相反,ZGC每次回收都會(huì)掃描所有的Region,用范圍更大的掃描成本換取省去G1中記憶集的維護(hù)成本。因此,ZGC的重分配集只是決定了里面的存活對(duì)象會(huì)被重新復(fù)制到其他的Region中,里面 的Region會(huì)被釋放,而并不能說回收行為就只是針對(duì)這個(gè)集合里面的Region進(jìn)行,因?yàn)闃?biāo)記過程是針對(duì)全堆的。此外,在JDK 12的ZGC中開始支持的類卸載以及弱引用的處理,也是在這個(gè)階段中完成的。

并發(fā)重分配(Concurrent Relocate):重分配是ZGC執(zhí)行過程中的核心階段,這個(gè)過程要把重分配集中的存活對(duì)象復(fù)制到新的Region上,并為重分配集中的每個(gè)Region維護(hù)一個(gè)轉(zhuǎn)發(fā)表(Forward Table),記錄從舊對(duì)象到新對(duì)象的轉(zhuǎn)向關(guān)系。得益于染色指針的支持,ZGC收集器能僅從引用上就明確得知一個(gè)對(duì)象是否處于重分配集之中,如果用戶線程此時(shí)并發(fā)訪問了位于重分配集中的對(duì)象,這次訪問將會(huì)被預(yù)置的內(nèi)存屏障所截獲,然后立即根據(jù)Region上的轉(zhuǎn)發(fā)表記錄將訪問轉(zhuǎn)發(fā)到新復(fù)制的對(duì)象上,并同時(shí)修正更新該引用的值,使其直接指向新對(duì)象,ZGC將這種行為稱為指針的“自愈”(Self-Healing)能力。

這樣做的好處是只有第一次訪問舊對(duì)象會(huì)陷入轉(zhuǎn)發(fā),也就是只慢一次,對(duì)比 Shenandoah 的 Brooks 轉(zhuǎn)發(fā)指針,那是每次對(duì)象訪問都必須付出的固定開銷,簡單地說就是每 次都慢,因此 ZGC 對(duì)用戶程序的運(yùn)行時(shí)負(fù)載要 Shenandoah 來得更低一些。還有另外一個(gè)直接的好處是由于染色指針的存在,一旦重分配集中某個(gè) Region 的存活對(duì)象都復(fù)制完畢后,這個(gè) Region 就可以立即釋放用于新對(duì)象的分配(但是轉(zhuǎn)發(fā)表還得留著不能釋放掉),哪怕堆中還有很多指向這個(gè)對(duì)象的未更新指針也沒有關(guān)系,這些舊指針一旦被使用,它們都是可以自愈的。

并發(fā)重映射(Concurrent Remap):重映射所做的就是修正整個(gè)堆中指向重分配集中舊對(duì)象的所有引用,這一點(diǎn)從目標(biāo)角度看是與 Shenandoah 并發(fā)引用更新階段一樣的,但是 ZGC 的并發(fā)重映射并不是一個(gè)必須要“迫切”去完成的任務(wù),因?yàn)榍懊嬲f過,即使是舊引用,它也是可以自愈的,最多只是第一次使用時(shí)多一次轉(zhuǎn)發(fā)和修正操作。重映射清理這些舊引用的主要目的是為了不變慢(還有清理結(jié)束后可以釋放轉(zhuǎn)發(fā)表這樣的附帶收益),所以說這并不是很“迫切”。因此,ZGC 很巧妙地把并發(fā)重映射階段要做的工作,合并到了下一次垃圾收集循環(huán)中的并發(fā)標(biāo)記階段里去完成,反正它們都是要遍歷所有對(duì)象的,這樣合并就節(jié)省了一次遍歷對(duì)象的開銷。一旦所有指針都被修正之后,原來記錄新舊對(duì)象關(guān)系的轉(zhuǎn)發(fā)表就可以釋放掉了。

ZGC 核心參數(shù)

ZGC 觸發(fā)時(shí)機(jī)

ZGC 中的幾種觸發(fā)GC場(chǎng)景:

  • 定時(shí)觸發(fā):默認(rèn)為不使用,可以通過 ZCollectionInterval 參數(shù)配置。GC 日志中的關(guān)鍵字 “Timer”。
  • 預(yù)熱觸發(fā):最多三次,在堆內(nèi)存空間達(dá)到 10%、20%、30% 時(shí)機(jī)觸發(fā)、主要是通過 GC 的時(shí)間、為其他的 GC 觸發(fā)準(zhǔn)備。GC日志關(guān)鍵字 “Warmup”。
  • 分配速率:基于正態(tài)分布統(tǒng)計(jì),計(jì)算內(nèi)存 99% 可能的最大分配速率,以及此速率下內(nèi)存將要耗盡的時(shí)間點(diǎn),在耗盡之前觸發(fā) GC (耗盡時(shí)間,一次 GC 最大持續(xù)時(shí)間-一次 GC 檢測(cè)周期時(shí)間)。GC日志關(guān)鍵字 “Allocation Rate”。
  • 主動(dòng)觸發(fā):(默認(rèn)開啟,可以通過 ZProactictive 參數(shù)配置)距上一次 GC 堆內(nèi)存增長 10%,超過 5 分鐘時(shí),對(duì)比上次 GC的間隔時(shí)間限(一次 GC 最大持續(xù)時(shí)間),超過則觸發(fā)。GC 日志關(guān)鍵字 “Proactive”。
  • 元數(shù)據(jù)分配觸發(fā):元數(shù)據(jù)區(qū)不足導(dǎo)致,GC 日志關(guān)鍵中是 “Metadata GC Threshold”
  • 直接觸發(fā):代碼中顯示調(diào)用 System.gc() 觸發(fā),GC 日志關(guān)鍵字是 “System.gc()”。
  • 阻塞內(nèi)存分配請(qǐng)求觸發(fā):垃圾對(duì)象來不及揮手,占滿整個(gè)堆空間,導(dǎo)致部分線程阻塞,GC 日志關(guān)鍵字是 “Allocation Stall”。

ZGC 日志分析

我們將對(duì)下面的一個(gè)簡單的程序做一個(gè) ZGC LOG 做一個(gè)分析,下面是具體的代碼和分析。

示例代碼

下面是一段簡單的代碼:

/**
* VM Args:-XX:+UseZGC -Xmx8m -Xlog:gc*
*/
public class HeapOOM {

public static void main(String[] args) {
List<byte[]> list = new ArrayList<>();
while (true) {
list.add(new byte[2048]);
}
}
}

GC 日志分析

GC 日志如下(運(yùn)行環(huán)境 JDK 17),舉個(gè)例子: GC 日志中每一行都標(biāo)注了對(duì) GC 過程中的信息,關(guān)鍵信息如下:

  • Start:開始GC,并標(biāo)明的GC觸發(fā)的原因。上圖中觸發(fā)原因是自適應(yīng)算法。
  • Phase-Pause Mark Start:初始標(biāo)記,會(huì)STW。
  • Phase-Pause Mark End:再次標(biāo)記,會(huì)STW。
  • Phase-Pause Relocate Start:初始轉(zhuǎn)移,會(huì)STW。

Heap信息:記錄了GC過程中Mark、Relocate前后的堆大小變化狀況。High和Low記錄了其中的最大值和最小值,我們一般關(guān)注High中Used的值,如果達(dá)到100%,在GC過程中一定存在內(nèi)存分配不足的情況,需要調(diào)整GC的觸發(fā)時(shí)機(jī),更早或者更快地進(jìn)行GC。

GC信息統(tǒng)計(jì):可以定時(shí)的打印垃圾收集信息,觀察10秒內(nèi)、10分鐘內(nèi)、10個(gè)小時(shí)內(nèi),從啟動(dòng)到現(xiàn)在的所有統(tǒng)計(jì)信息。利用這些統(tǒng)計(jì)信息,可以排查定位一些異常點(diǎn)。

ZGC 總結(jié)

本文主要是從概念上描述了 ZGC 的特征和工作過程。

目前大多數(shù)互聯(lián)網(wǎng)公司還是使用 jdk 8、jdk 11 主流使用的還是 ParNew + CMS 組合或者 G1。

對(duì)于我們一線 Java 開發(fā)者應(yīng)該具備新技術(shù)的學(xué)習(xí)熱情和關(guān)注度,才能在激烈的社會(huì)競(jìng)爭中保持優(yōu)勢(shì)。

參考資料

  • 深入理解 JVM 虛擬機(jī)第三版 周志明。
  • https://wiki.openjdk.java.net/display/zgc/Main。
  • http://cr.openjdk.java.net/~pliden/slides/ZGC-Jfokus-2018.pdf。
  • https://tech.meituan.com/2020/08/06/new-zgc-practice-in-meituan.html。
責(zé)任編輯:姜華 來源: 運(yùn)維開發(fā)故事
相關(guān)推薦

2022-03-28 11:00:34

JVMJava對(duì)象

2024-03-27 10:27:35

延遲垃圾收集器

2017-09-21 14:40:06

jvm算法收集器

2021-11-08 07:11:49

決策樹數(shù)據(jù)分類器

2024-08-26 08:58:50

2024-12-30 08:03:08

2011-12-20 10:43:21

Java

2024-03-14 09:00:00

2020-02-25 22:01:36

理解JVM垃圾收集器

2009-10-30 10:47:48

VB.NET垃圾收集器

2011-07-21 14:54:26

java垃圾收集器

2022-07-25 10:15:29

垃圾收集器Java虛擬機(jī)

2021-11-03 06:57:42

數(shù)據(jù)線性邏輯

2025-07-11 02:33:00

JVM垃圾回收

2019-07-02 14:17:18

API網(wǎng)關(guān)網(wǎng)關(guān)流量

2023-11-16 08:00:56

Java11G1

2017-03-25 20:30:15

2011-05-10 16:04:45

Java垃圾收集器

2013-12-19 09:46:04

垃圾收集器

2017-12-25 11:15:06

JavaArray數(shù)組
點(diǎn)贊
收藏

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

国产乱码精品一区二区三区四区| 国产传媒在线播放| 奇米在线7777在线精品| 久久亚洲精品毛片| 国产xxxxxxxxx| 国产一区二区精品调教| 欧美69wwwcom| 亚洲精品理论电影| 日本xxxx黄色| 黄色美女视频在线观看| 免费看日韩精品| 欧美精品手机在线| 午夜精产品一区二区在线观看的| 97色婷婷成人综合在线观看| 午夜精品久久久久久久久久| 一级特黄录像免费播放全99| 国产成人在线视频观看| 视频精品二区| 亚洲少妇30p| 久久精品国产一区二区三区不卡| 一区二区三区精彩视频| 一区二区日本视频| 久久国产精品亚洲| 一区二区三区伦理片| 香蕉免费一区二区三区在线观看| 色婷婷精品大视频在线蜜桃视频| 台湾无码一区二区| 午夜免费福利在线观看| 久久影院午夜论| 国产经品一区二区| 一区二区三区亚洲视频| 久久婷婷丁香| 国产91精品黑色丝袜高跟鞋| 欧美精品一区二区成人| 久久亚洲影视| 夜夜嗨av一区二区三区免费区| yy1111111| 97青娱国产盛宴精品视频| 在线播放欧美女士性生活| 九热视频在线观看| 美脚恋feet久草欧美| 亚洲成人一二三| 精品国产日本| 亚洲AV无码成人片在线观看| 韩国久久久久| 欧美精品在线看| 一区二区三区四区五区| 成人女性视频| 永久免费看mv网站入口亚洲| 免费在线观看污| 久久av资源| 国产婷婷色综合av蜜臀av| 免费成人蒂法网站| 日韩精品社区| 欧美日韩第一区日日骚| 午夜免费福利在线| 成人在线视频观看| 欧美午夜电影网| 精品国产三级a∨在线| 天天综合视频在线观看| 国产精品国产精品国产专区不片| 91精品视频在线播放| 亚洲综合精品视频| 国内精品伊人久久久久av影院| 国产欧美日韩精品丝袜高跟鞋| 在线播放成人av| 精品一区二区三区在线播放| 亚洲a中文字幕| 丰满少妇一级片| 99综合电影在线视频| 久久久精品动漫| 国产午夜视频在线观看| 中文字幕在线一区| 成人在线观看www| 1024在线看片你懂得| 色综合欧美在线视频区| 中文字幕 日韩 欧美| av电影在线免费| 精品欧美国产一区二区三区| 国产麻花豆剧传媒精品mv在线| 欧美精品总汇| 91精品中文字幕一区二区三区| 日本77777| 成午夜精品一区二区三区软件| 日韩av在线天堂网| 免费看日本黄色片| 午夜精品999| 日本韩国欧美精品大片卡二| 91高潮大合集爽到抽搐| 国产成人av一区| 欧美一区二区三区在线播放 | 欧美日韩国产一二三区| 欧美一区成人| 日韩免费av一区二区| 国产美女www爽爽爽视频| 99精品久久只有精品| 椎名由奈jux491在线播放| av中文在线资源| 欧美性大战久久久久久久蜜臀| 少妇丰满尤物大尺度写真| 精品中文一区| 久久91亚洲精品中文字幕| 国产手机在线观看| 影音先锋日韩精品| 国产盗摄xxxx视频xxx69| 国产激情视频在线播放| 国产欧美中文在线| 日本一区二区精品视频| www视频在线免费观看| 色婷婷精品大在线视频| 香蕉视频1024| 日韩精品水蜜桃| 57pao成人永久免费视频| 97人妻人人澡人人爽人人精品| 99久久精品免费看| 青青在线免费视频| 91在线成人| 日韩av在线网址| 青青草免费av| 六月丁香婷婷色狠狠久久| 国产98色在线| 黄色av网站免费在线观看| 国产精品久久久久久久久免费相片| 欧美日韩二三区| 日韩在线精品强乱中文字幕| 中文字幕日本欧美| 99久久久久久久久| 成人蜜臀av电影| 日本一二三区视频在线| 88xx成人网| 亚洲欧美日韩精品| 久久久久久国产免费a片| 亚洲黄色影片| 国产成人精品免费视频大全最热 | 国产淫片av片久久久久久| av成人资源| 美女精品视频一区| 国产免费高清av| 国产精品青草综合久久久久99| 国内精品在线观看视频| a级日韩大片| 色综合久久88色综合天天看泰| 91精品国产综合久| 国产精品激情偷乱一区二区∴| 国内自拍视频一区| 自拍亚洲一区| 欧美在线视频免费观看| 涩爱av在线播放一区二区| 精品国产精品自拍| 添女人荫蒂视频| 校园激情久久| 欧美综合77777色婷婷| 日本不卡一二三| 亚洲最新中文字幕| 亚洲一区二区色| 自拍视频在线观看一区二区| 六月婷婷激情网| 国产精品**亚洲精品| 欧美成人小视频| 亚洲av综合色区无码一二三区| 伊人婷婷欧美激情| 欧美图片自拍偷拍| 一本久道久久久| 欧洲精品一区色| 99久久精品一区二区成人| 亚洲精品乱码久久久久久金桔影视 | 亚洲免费黄色片| 天天操天天干天天综合网| 中文字幕日韩在线观看| 国产xxxxxxxxx| 噜噜爱69成人精品| 亚洲乱码一区二区三区三上悠亚| japansex久久高清精品| 久久久久久国产精品美女| 午夜在线观看视频18| 色婷婷国产精品| 免费观看特级毛片| 懂色av噜噜一区二区三区av| 日韩精品一区二区三区久久| 欧美一级精品片在线看| 69174成人网| 瑟瑟视频在线看| 欧美三级视频在线播放| 五月天av网站| av成人老司机| 污视频免费在线观看网站| 欧美精品国产一区| 日韩欧美在线观看强乱免费| 国产精品高清乱码在线观看| 久久艳片www.17c.com| 瑟瑟在线观看| 日韩亚洲欧美一区二区三区| 好吊操这里只有精品| 日本一区二区成人| 91黄色小网站| 久久久精品久久久久久96| 国产视频精品网| 欧洲美女精品免费观看视频 | 激情四射综合网| 久久久精品一品道一区| 国产精品欧美性爱| 欧美aaaaa成人免费观看视频| 毛片av在线播放| 日韩高清欧美| 久久另类ts人妖一区二区| 精品国产鲁一鲁****| 欧美做受高潮电影o| av观看在线| 中文字幕亚洲欧美日韩在线不卡| 成人精品在线播放| 在线观看精品一区| 中文字幕激情小说| 一区二区三区在线观看国产| 亚洲天堂岛国片| 97se狠狠狠综合亚洲狠狠| 午夜福利123| 麻豆精品国产91久久久久久| 欧美三级一级片| 国产一区视频在线观看免费| 亚洲午夜精品久久| 在线成人动漫av| 国产一区免费在线观看| 亚洲精品在线播放| 91欧美精品午夜性色福利在线| 国产精品高清乱码在线观看| 青青a在线精品免费观看| 1区2区在线观看| 久久久成人精品| 日本在线视频观看| 在线成人中文字幕| 超碰免费97在线观看| 亚洲人成啪啪网站| 香蕉视频黄色片| 亚洲国产精品小视频| 亚洲第一页视频| 91精品国产色综合久久ai换脸| 亚洲天堂视频网| 欧美午夜精品久久久| 日韩欧美国产另类| 在线观看视频欧美| 久久久国产免费| 欧美亚洲国产一区在线观看网站| 一本一道无码中文字幕精品热| 精品国产乱码久久久久久天美 | 日韩午夜av| 亚洲人成无码网站久久99热国产| 欧美 日韩 国产一区二区在线视频 | 欧美精品日本| 久久人人爽人人爽人人av| 伊人成人网在线看| 日本在线xxx| 久久99久久人婷婷精品综合| 欧美日本韩国一区二区三区| 992tv国产精品成人影院| 国产精品普通话| 羞羞视频在线观看一区二区| 91青草视频久久| 99ri日韩精品视频| 极品尤物一区二区三区| 杨幂一区二区三区免费看视频| 欧洲国产精品| 婷婷亚洲五月| 97免费视频观看| 人人狠狠综合久久亚洲婷| 亚洲精品在线免费看| 久久久久久久久久久9不雅视频| 国内自拍中文字幕| 亚洲精品孕妇| 三级在线免费看| 久久99这里只有精品| 欧美一区二区三区影院| 成人国产电影网| 伊人网在线视频观看| 国产精品麻豆网站| 久久精品www| 色综合夜色一区| 国产精品人人爽| 亚洲国产精品99| www.中文字幕久久久| 欧美插天视频在线播放| 一区二区精品伦理...| 国产精品网红直播| 国产精品香蕉| 亚州欧美一区三区三区在线| 女人色偷偷aa久久天堂| 国产a级一级片| 国产一区啦啦啦在线观看| 亚洲の无码国产の无码步美| 国产精品网站在线观看| 久久精品女人毛片国产| 欧美制服丝袜第一页| 亚洲高清视频在线播放| 一区二区三区视频观看| 国产在线观看精品一区| 美女黄色丝袜一区| 蜜桃精品在线| 99在线高清视频在线播放| 久久综合另类图片小说| 国产精品久久久久久久久久久久冷| 色愁久久久久久| 日韩人妻精品一区二区三区| 久久精品女人| 欧美精品久久一区二区三区| a级黄色片免费看| 色哟哟国产精品| 蜜桃91麻豆精品一二三区| 中文字幕亚洲一区二区三区五十路| a级大胆欧美人体大胆666| 国产欧美日韩视频| 亚洲第一福利社区| 国产二区视频在线| 国产精品一区二区在线看| 婷婷色一区二区三区 | 手机看片久久久| 日韩免费高清视频| 永久免费av在线| 国产精国产精品| 日本欧美高清| 亚洲人精品午夜射精日韩| 国产九九视频一区二区三区| 欧美aaa级片| 在线观看不卡视频| 欧美人体大胆444www| 久久久噜噜噜久久久| 欧美高清hd| ijzzijzzij亚洲大全| 蜜臀久久久久久久| 摸摸摸bbb毛毛毛片| 欧美性xxxx在线播放| 天天色天天操天天射| 久久青草福利网站| av不卡一区| 男的插女的下面视频| 粉嫩嫩av羞羞动漫久久久| 我家有个日本女人| 69久久夜色精品国产69蝌蚪网 | 久久久久久中文字幕| 日韩激情欧美| 香港三级日本三级a视频| 国产精品99久久久久| 亚洲国产成人精品综合99| 欧美一区二区三区播放老司机| 黄网址在线观看| 亚洲尤物视频网| 欧美激情精品久久久六区热门| 青青草原播放器| 一区二区三区四区五区视频在线观看 | 亚洲免费观看| 理论片大全免费理伦片| 高清成人免费视频| 精品爆乳一区二区三区无码av| 日韩免费一区二区三区在线播放| 最新超碰在线| 国产精品久久久久久久小唯西川| 国产精品啊v在线| 国产十八熟妇av成人一区| 午夜久久久久久久久 | 日韩在线观看视频免费| 91精品一区| 日韩免费在线观看av| av中文字幕在线不卡| 精品国产一区二区三区四| 中文字幕综合一区| 狂野欧美xxxx韩国少妇| www.日本三级| 久久免费国产精品| 中文字幕一区二区在线视频| 久久亚洲精品成人| 国产精品成人自拍| 成人精品视频一区二区| 国产精品日日摸夜夜摸av| 精品国产av一区二区三区| 国语对白做受69| sdde在线播放一区二区| 特级黄色片视频| 无码av中文一区二区三区桃花岛| 国产一区二区影视| 亚洲一区二区三区香蕉| 国产亚洲在线观看| 精品在线观看一区| 精品伦理精品一区| 人人鲁人人莫人人爱精品| 亚洲小视频在线播放| 久久久久国产精品人| 国产成人久久精品77777综合 | 99国产精品视频免费观看| www.亚洲激情| 久久久久国色av免费观看性色| 综合亚洲自拍| 992tv人人草| 日本道免费精品一区二区三区| 爆操欧美美女| 免费在线观看一区二区| 国产精品77777| 中文字幕xxxx| 久久久免费高清电视剧观看| 欧美一区二区三区激情视频| 香蕉视频污视频| 欧美日韩和欧美的一区二区| 1024在线看片你懂得|