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

12 張圖帶你徹底理解 ZGC

存儲 存儲設(shè)備
ZGC(Z Garbage Collector) 是一款性能比 G1 更加優(yōu)秀的垃圾收集器。ZGC 的一大創(chuàng)舉是將 GC 信息保存在了染色指針上。染色指針是一種將少量信息直接存儲在指針上的技術(shù)。

大家好,我是君哥。今天來聊一聊 ZGC。

ZGC(Z Garbage Collector) 是一款性能比 G1 更加優(yōu)秀的垃圾收集器。ZGC 第一次出現(xiàn)是在 JDK 11 中以實驗性的特性引入,這也是 JDK 11 中最大的亮點(diǎn)。在 JDK 15 中 ZGC 不再是實驗功能,可以正式投入生產(chǎn)使用了,使用 –XX:+UseZGC 可以啟用 ZGC。

ZGC 有 3 個重要特性:

  • 暫停時間不會超過 10 ms。

JDK 16 發(fā)布后,GC 暫停時間已經(jīng)縮小到 1 ms 以內(nèi),并且時間復(fù)雜度是 o(1),這也就是說 GC 停頓時間是一個固定值了,并不會受堆內(nèi)存大小影響。

下面圖片來自:https://malloc.se/blog/zgc-jdk16

  • 最大支持 16TB 的大堆,最小支持 8MB 的小堆。
  • 跟 G1 相比,對應(yīng)用程序吞吐量的影響小于 15 %。

1.內(nèi)存多重映射

內(nèi)存多重映射,就是使用 mmap 把不同的虛擬內(nèi)存地址映射到同一個物理內(nèi)存地址上。如下圖:

ZGC 為了更靈活高效地管理內(nèi)存,使用了內(nèi)存多重映射,把同一塊兒物理內(nèi)存映射為 Marked0、Marked1 和 Remapped 三個虛擬內(nèi)存。

當(dāng)應(yīng)用程序創(chuàng)建對象時,會在堆上申請一個虛擬地址,這時 ZGC 會為這個對象在 Marked0、Marked1 和 Remapped 這三個視圖空間分別申請一個虛擬地址,這三個虛擬地址映射到同一個物理地址。

Marked0、Marked1 和 Remapped 這三個虛擬內(nèi)存作為 ZGC 的三個視圖空間,在同一個時間點(diǎn)內(nèi)只能有一個有效。ZGC 就是通過這三個視圖空間的切換,來完成并發(fā)的垃圾回收。

2.染色指針

2.1 三色標(biāo)記回顧

我們知道 G1 垃圾收集器使用了三色標(biāo)記,這里先做一個回顧。下面是一個三色標(biāo)記過程中的對象引用示例圖:

總共有三種顏色,說明如下:

  • 白色:本對象還沒有被標(biāo)記線程訪問過。
  • 灰色:本對象已經(jīng)被訪問過,但是本對象引用的其他對象還沒有被全部訪問。
  • 黑色:本對象已經(jīng)被訪問過,并且本對象引用的其他對象也都被訪問過了。

三色標(biāo)記的過程如下:

  • 初始階段,所有對象都是白色。
  • 將 GC Roots 直接引用的對象標(biāo)記為灰色。
  • 處理灰色對象,把當(dāng)前灰色對象引用的所有對象都變成灰色,之后將當(dāng)前灰色對象變成黑色。
  • 重復(fù)步驟 3,直到不存在灰色對象為止。

三色標(biāo)記結(jié)束后,白色對象就是沒有被引用的對象(比如上圖中的 H 和 G),可以被回收了。

2.2 染色指針

ZGC 出現(xiàn)之前, GC 信息保存在對象頭的 Mark Word 中。比如 64 位的 JVM,對象頭的 Mark Word 中保存的信息如下圖:

前 62位保存了 GC 信息,最后兩位保存了鎖標(biāo)志。

ZGC 的一大創(chuàng)舉是將 GC 信息保存在了染色指針上。染色指針是一種將少量信息直接存儲在指針上的技術(shù)。在 64 位 JVM 中,對象指針是 64 位,如下圖:

在這個 64 位的指針上,高 16 位都是 0,暫時不用來尋址。剩下的 48 位支持的內(nèi)存可以達(dá)到 256 TB(2 ^48),這可以滿足多數(shù)大型服務(wù)器的需要了。不過 ZGC 并沒有把 48 位都用來保存對象信息,而是用高 4 位保存了四個標(biāo)志位,這樣 ZGC 可以管理的最大內(nèi)存可以達(dá)到 16 TB(2 ^ 44)。

通過這四個標(biāo)志位,JVM 可以從指針上直接看到對象的三色標(biāo)記狀態(tài)(Marked0、Marked1)、是否進(jìn)入了重分配集(Remapped)、是否需要通過 finalize 方法來訪問到(Finalizable)。

無需進(jìn)行對象訪問就可以獲得 GC 信息,這大大提高了 GC 效率。

3.內(nèi)存布局

首先我們回顧一下 G1 垃圾收集器的內(nèi)存布局。G1把整個堆分成了大小相同的 region,每個堆大約可以有 2048 個region,每個 region 大小為 1~32 MB (必須是 2 的次方)。如下圖:

  • 跟 G1 類似,ZGC 的堆內(nèi)存也是基于 Region 來分布,不過 ZGC 是不區(qū)分新生代老年代的。不同的是,ZGC 的 Region 支持動態(tài)地創(chuàng)建和銷毀,并且 Region 的大小不是固定的,包括三種類型的 Region :
  • Small Region:2MB,主要用于放置小于 256 KB 的小對象。
  • Medium Region:32MB,主要用于放置大于等于 256 KB 小于 4 MB 的對象。
  • Large Region:N * 2MB。這個類型的 Region 是可以動態(tài)變化的,不過必須是 2MB 的整數(shù)倍,最小支持 4 MB。每個 Large Region 只放置一個大對象,并且是不會被重分配的。

4.讀屏障

讀屏障類似于 Spring AOP 的前置增強(qiáng),是 JVM 向應(yīng)用代碼中插入一小段代碼,當(dāng)應(yīng)用線程從堆中讀取對象的引用時,會先執(zhí)行這段代碼。注意:只有從堆內(nèi)存中讀取對象的引用時,才會執(zhí)行這個代碼。下面代碼只有第一行需要加入讀屏障。

Object o = obj.FieldA
Object p = o //不是從堆中讀取引用
o.dosomething() //不是從堆中讀取引用
int i = obj.FieldB //不是引用類型




讀屏障在解釋執(zhí)行時通過 load 相關(guān)的字節(jié)碼指令加載數(shù)據(jù)。作用是在對象標(biāo)記和轉(zhuǎn)移過程中,判斷對象的引用地址是否滿足條件,并作出相應(yīng)動作。如下圖:

標(biāo)記、轉(zhuǎn)移和重定位這些過程請看下一節(jié)。

讀屏障會對應(yīng)用程序的性能有一定影響,據(jù)測試,對性能的最高影響達(dá)到 4%,但提高了 GC 并發(fā)能力,降低了 STW。

5.GC 過程

前面已經(jīng)講過,ZGC 使用內(nèi)存多重映射技術(shù),把物理內(nèi)存映射為 Marked0、Marked1 和 Remapped 三個地址視圖,利用地址視圖的切換,ZGC 實現(xiàn)了高效的并發(fā)收集。

ZGC 的垃圾收集過程包括標(biāo)記、轉(zhuǎn)移和重定位三個階段。如下圖:

ZGC 初始化后,整個內(nèi)存空間的地址視圖被設(shè)置為 Remapped。

5.1 初始標(biāo)記

從 GC Roots 出發(fā),找出 GC Roots 直接引用的對象,放入活躍對象集合,這個過程需要 STW,不過STW 的時間跟 GC Roots 數(shù)量成正比,耗時比較短。

5.2 并發(fā)標(biāo)記

并發(fā)標(biāo)記過程中,GC 線程和 Java 應(yīng)用線程會并行運(yùn)行。這個過程需要注意下面幾點(diǎn):

  • GC 標(biāo)記線程訪問對象時,如果對象地址視圖是 Remapped,就把對象地址視圖切換到 Marked0,如果對象地址視圖已經(jīng)是 Marked0,說明已經(jīng)被其他標(biāo)記線程訪問過了,跳過不處理。
  • 標(biāo)記過程中Java 應(yīng)用線程新創(chuàng)建的對象會直接進(jìn)入 Marked0 視圖。
  • 標(biāo)記過程中Java 應(yīng)用線程訪問對象時,如果對象的地址視圖是 Remapped,就把對象地址視圖切換到 Marked0,可以參考前面講的讀屏障。
  • 標(biāo)記結(jié)束后,如果對象地址視圖是 Marked0,那就是活躍的,如果對象地址視圖是 Remapped,那就是不活躍的。

標(biāo)記階段的活躍視圖也可能是 Marked1,為什么會采用兩個視圖呢?

這里采用兩個視圖是為了區(qū)分前一次標(biāo)記和這一次標(biāo)記。如果這次標(biāo)記的視圖是 Marked0,那下一次并發(fā)標(biāo)記就會把視圖切換到 Marked1。這樣做可以配合 ZGC 按照頁回收垃圾的做法。如下圖:

第二次標(biāo)記的時候,如果還是切換到 Marked0,那么 2 這個對象區(qū)分不出是活躍的還是上次標(biāo)記過的。如果第二次標(biāo)記切換到 Marked1,就可以區(qū)分出了。

這時 Marked0 這個視圖的對象就是上次標(biāo)記過程被標(biāo)記過活躍,轉(zhuǎn)移的時候沒有被轉(zhuǎn)移,但這次標(biāo)記沒有被標(biāo)記為活躍的對象。Marked1 視圖的對象是這次標(biāo)記被標(biāo)記為活躍的對象。Remapped 視圖的對象是上次垃圾回收發(fā)生轉(zhuǎn)移或者是被 Java 應(yīng)用線程訪問過,本次垃圾回收中被標(biāo)記為不活躍的對象。

5.3 再標(biāo)記

并發(fā)標(biāo)記階段 GC 線程和 Java 應(yīng)用線程并發(fā)執(zhí)行,標(biāo)記過程中可能會有引用關(guān)系發(fā)生變化而導(dǎo)致的漏標(biāo)記問題。再標(biāo)記階段重新標(biāo)記并發(fā)標(biāo)記階段發(fā)生變化的對象,還會對非強(qiáng)引用(軟應(yīng)用,虛引用等)進(jìn)行并行標(biāo)記。

這個階段需要 STW,但是需要標(biāo)記的對象少,耗時很短。

5.4 初始轉(zhuǎn)移

轉(zhuǎn)移就是把活躍對象復(fù)制到新的內(nèi)存,之前的內(nèi)存空間可以被回收。

初始轉(zhuǎn)移需要掃描 GC Roots 直接引用的對象并進(jìn)行轉(zhuǎn)移,這個過程需要 STW,STW 時間跟 GC Roots 成正比。

5.5 并發(fā)轉(zhuǎn)移

并發(fā)轉(zhuǎn)移過程 GC 線程和 Java 線程是并發(fā)進(jìn)行的。上面已經(jīng)講過,轉(zhuǎn)移過程中對象視圖會被切回 Remapped 。轉(zhuǎn)移過程需要注意以下幾點(diǎn):

如果 GC 線程訪問對象的視圖是 Marked0,則轉(zhuǎn)移對象,并把對象視圖設(shè)置成 Remapped。

如果 GC 線程訪問對象的視圖是 Remapped,說明被其他 GC 線程處理過,跳過不再處理。

并發(fā)轉(zhuǎn)移過程中 Java 應(yīng)用線程創(chuàng)建的新對象地址視圖是 Remapped。

如果 Java 應(yīng)用線程訪問的對象被標(biāo)記為活躍并且對象視圖是 Marked0,則轉(zhuǎn)移對象,并把對象視圖設(shè)置成 Remapped。

5.6 重定位

轉(zhuǎn)移過程對象的地址發(fā)生了變化,在這個階段,把所有指向?qū)ο笈f地址的指針調(diào)整到對象的新地址上。

6.垃圾收集算法

ZGC 采用標(biāo)記 - 整理算法,算法的思想是把所有存活對象移動到堆的一側(cè),移動完成后回收掉邊界以外的對象。如下圖:

6.1 JDK 16 之前

在 JDK 16 之前,ZGC 會預(yù)留(Reserve)一塊兒堆內(nèi)存,這個預(yù)留內(nèi)存不能用于 Java 線程的內(nèi)存分配。即使從 Java 線程的角度看堆內(nèi)存已經(jīng)滿了也不能使用 Reserve,只有 GC 過程中搬移存活對象的時候才可以使用。如下圖:

這樣做的好處是算法簡單,非常適合并行收集。但這樣做有幾個問題:

因為有預(yù)留內(nèi)存,能給 Java 線程分配的堆內(nèi)存小于 JVM 聲明的堆內(nèi)存。

Reserve 僅僅用于存放 GC 過程中搬移的對象,有點(diǎn)內(nèi)存浪費(fèi)。

因為 Reserve 不能給 GC 過程中搬移對象的 Java 線程使用,搬移線程可能會因為申請不到足夠內(nèi)存而不能完成對象搬移,這返回過來又會導(dǎo)致應(yīng)用程序的 OOM。

6.2 JDK 16 改進(jìn)

JDK 16 發(fā)布后,ZGC 支持就地搬移對象(G1 在 Full GC 的時候也是就地搬移)。這樣做的好處是不用預(yù)留空閑內(nèi)存了。如下圖:

不過就地搬移也有一定的挑戰(zhàn)。比如:必須考慮搬移對象的順序,否則可能會覆蓋尚未移動的對象。這就需要 GC 線程之間更好的進(jìn)行協(xié)作,不利于并發(fā)收集,同時也會導(dǎo)致搬移對象的 Java 線程需要考慮什么可以做什么不可以做。

為了獲得更好的 GC 表現(xiàn),JDK 16 在支持就地搬移的同時,也支持預(yù)留(Reserve)堆內(nèi)存的方式,并且 ZGC 不需要真的預(yù)留空閑的堆內(nèi)存。默認(rèn)情況下,只要有空閑的 region,ZGC 就會使用預(yù)留堆內(nèi)存的方式,如果沒有空閑的 region,否則 ZGC 就會啟用就地搬移。如果有了空閑的 region, ZGC 又會切換到預(yù)留堆內(nèi)存的搬移方式。

7.總結(jié)

內(nèi)存多重映射和染色指針的引入,使 ZGC 的并發(fā)性能大幅度提升。

ZGC 只有 3 個需要 STW 的階段,其中初始標(biāo)記和初始轉(zhuǎn)移只需要掃描所有 GC Roots,STW 時間 GC Roots 的數(shù)量成正比,不會耗費(fèi)太多時間。再標(biāo)記過程主要處理并發(fā)標(biāo)記引用地址發(fā)生變化的對象,這些對象數(shù)量比較少,耗時非常短。可見整個 ZGC 的 STW 時間幾乎只跟 GC Roots 數(shù)量有關(guān)系,不會隨著堆大小和對象數(shù)量的變化而變化。

ZGC 也有一個缺點(diǎn),就是浮動垃圾。因為 ZGC 沒有分代概念,雖然 ZGC 的 STW 時間在 1ms 以內(nèi),但是 ZGC 的整個執(zhí)行過程耗時還是挺長的。在這個過程中 Java 線程可能會創(chuàng)建大量的新對象,這些對象會成為浮動垃圾,只能等下次 GC 的時候進(jìn)行回收。

責(zé)任編輯:武曉燕 來源: 君哥聊技術(shù)
相關(guān)推薦

2022-07-11 11:06:11

RocketMQ函數(shù).消費(fèi)端

2021-05-18 06:55:07

Java AQS源碼

2022-07-04 11:06:02

RocketMQ事務(wù)消息實現(xiàn)

2021-12-06 07:15:47

Pulsar地域復(fù)制

2020-10-16 06:30:45

分布式場景方案

2021-08-15 18:59:13

垃圾收集器JDK

2020-11-27 06:28:55

Spring循環(huán)依賴

2020-11-13 10:29:37

流程控制語句

2022-04-11 11:55:34

架構(gòu)技術(shù)調(diào)優(yōu)

2023-04-11 08:35:22

RocketMQ云原生

2022-06-13 11:05:35

RocketMQ消費(fèi)者線程

2022-06-11 18:15:26

KubernetesDockerLinux

2021-04-25 10:45:59

Docker架構(gòu)Job

2024-07-03 08:28:44

HWKafkaLEO

2021-10-22 09:28:15

開發(fā)技能代碼

2020-11-03 10:32:48

回調(diào)函數(shù)模塊

2022-06-27 11:04:24

RocketMQ順序消息

2019-07-24 08:49:36

Docker容器鏡像

2022-10-20 08:31:33

加鎖解鎖代碼

2020-06-28 07:39:44

Kafka分布式消息
點(diǎn)贊
收藏

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

天天操天天摸天天舔| 四虎永久在线精品无码视频| 国产日韩免费视频| 欧美日韩亚洲一区三区| 亚洲电影免费观看高清完整版在线| 国产精品久久..4399| 青青色在线视频| 精品一区二区国语对白| 久久久久在线观看| 欧美狂猛xxxxx乱大交3| 粉嫩一区二区三区在线观看| 精品久久久久久久中文字幕| 性欧美.com| 色窝窝无码一区二区三区成人网站| 日韩中文字幕av电影| 欧美精品免费在线观看| 欧美黄色一级生活片| 一本一道久久a久久| 欧美性三三影院| 无码av天堂一区二区三区| 高清日韩av电影| 本田岬高潮一区二区三区| 国产精品视频自在线| 中日韩黄色大片| 欧美国产免费| 色妞欧美日韩在线| 亚洲第一香蕉网| 4438全国亚洲精品观看视频| 精品1区2区3区| 男人日女人bb视频| 国产盗摄在线视频网站| 亚洲男女一区二区三区| 亚洲精品国产精品久久| 日韩欧美在线番号| 99在线精品视频| av一区二区三区在线观看| 亚洲天堂网在线观看视频| 久久精品一区二区三区中文字幕| 欧美激情在线播放| 中文字幕电影av| 日本一本不卡| 在线播放国产一区中文字幕剧情欧美 | 伊人久久大香线蕉综合热线| 俺去亚洲欧洲欧美日韩| 天堂а√在线中文在线鲁大师| 国产成人精品一区二区免费看京| 日韩av网站电影| 北岛玲一区二区| 女同久久另类99精品国产| 亚洲精品一区二区三区蜜桃下载| 色哟哟免费视频| 国产精品免费精品自在线观看| 欧美日韩五月天| 一道本在线免费视频| 97久久网站| 欧美日韩一二区| 深夜黄色小视频| 国产成人77亚洲精品www| 在线观看免费视频综合| 精品久久久久久中文字幕2017| 欧美xxx性| 91国内精品野花午夜精品 | 亚洲色偷偷综合亚洲av伊人| 成人免费在线观看av| 最近2019中文字幕第三页视频| 国产视频不卡在线| 久久视频在线| 久久最新资源网| 精品无码人妻一区二区三| 激情综合激情| 538国产精品视频一区二区| 一区二区三区福利视频| 日韩制服丝袜av| 国产乱人伦真实精品视频| 亚洲视频中文字幕在线观看| 韩国v欧美v日本v亚洲v| 99re在线国产| 天天影院图片亚洲| 国产蜜臀av在线一区二区三区 | 韩国欧美一区| 日本三级韩国三级久久| 国产日韩在线免费观看| 国产在线精品国自产拍免费| 成人欧美一区二区| 青青操在线视频| 国产精品欧美久久久久无广告| 2025韩国大尺度电影| 久久青青色综合| 91久久线看在观草草青青| 亚洲小视频网站| 成人午夜三级| 亚洲最新中文字幕| 国产高潮国产高潮久久久91 | 亚洲同性gay激情无套| 国产a级黄色大片| 欧美电影免费看| 制服丝袜中文字幕一区| 久久久久成人精品无码中文字幕| 成人6969www免费视频| 欧美丰满老妇厨房牲生活| 精品国产乱码久久久久久88av| 香蕉免费毛片视频| 奇米精品一区二区三区在线观看| 91精品网站| 国产中文字幕在线视频| 亚洲精选免费视频| 国语对白做受xxxxx在线中国| 日韩欧美专区| 国产视频欧美视频| 99久久99久久精品国产| 亚洲免费综合| 成人情视频高清免费观看电影| 裸体xxxx视频在线| 亚洲国产一区二区视频| 色噜噜狠狠一区二区| 日韩精品亚洲aⅴ在线影院| 精品国产拍在线观看| 久草视频一区二区| 丁香啪啪综合成人亚洲小说| 在线看成人av电影| 三叶草欧洲码在线| 女厕盗摄一区二区三区| 91精品国产综合久久蜜臀| 中文字幕av网址| 激情综合中文娱乐网| 成人激情视频网| 成人综合影院| 欧美性猛交xxxx黑人猛交| 岛国大片在线免费观看| 日本黄色精品| 国产精品96久久久久久| 婷婷色在线视频| 亚洲香蕉伊在人在线观| 中文字幕一二三| 91中文字幕精品永久在线| 国产精品91免费在线| 色网站在线免费观看| 午夜欧美在线一二页| 中文字幕永久免费| 欧美婷婷在线| 99热国产免费| 污污网站在线观看| 欧美一级夜夜爽| 色欲一区二区三区精品a片| 精品一区二区影视| 咪咪色在线视频| 四虎成人精品一区二区免费网站| 国产一区二区三区精品久久久| 免费黄色网址在线| 久久亚洲一级片| www国产黄色| 精品中文一区| 国产精品第一视频| 97最新国自产拍视频在线完整在线看| 日本精品视频一区二区| 久久久久亚洲av成人无码电影| 老鸭窝91久久精品色噜噜导演| 久久精品国产理论片免费| 天堂√中文最新版在线| 国产视频精品xxxx| 尤物视频免费观看| 国产精品系列在线| 亚洲天堂伊人网| 中文字幕日韩欧美精品高清在线| 亚洲影院在线看| 欧美寡妇性猛交xxx免费| 欧美mv日韩mv国产| 国产精品xxxx喷水欧美| 国产亚洲美州欧州综合国| 国产日韩欧美久久| 亚洲激情久久| 精品国产电影| 97人人做人人爽香蕉精品| 久久精品中文字幕免费mv| 国产喷水福利在线视频| 亚洲国产精品一区二区尤物区| 无码精品一区二区三区在线播放 | 欧美一级黄色片视频| 精品一级毛片| 4444kk亚洲人成电影在线| segui88久久综合| 亚洲性生活视频| 国产美女无遮挡永久免费| 亚洲www啪成人一区二区麻豆| 黄色a一级视频| 久久精品99国产精品| 日本久久久网站| 国产a久久精品一区二区三区| 国产欧美韩国高清| 俺来也官网欧美久久精品| 一区二区三区无码高清视频| 国产婷婷一区二区三区久久| 亚洲成国产人片在线观看| 男人的天堂av网| 成人午夜视频网站| 91视频免费版污| 极品中文字幕一区| 午夜精品一区二区在线观看的 | 另类的小说在线视频另类成人小视频在线| 在线无限看免费粉色视频| 大香伊人久久精品一区二区| 国产成人av网址| 黄色羞羞视频在线观看| 中文字幕日韩高清| 五月婷婷在线播放| 91精品国产一区二区三区蜜臀| 五月婷婷亚洲综合| 亚洲精品高清在线| a资源在线观看| 97精品国产露脸对白| 色播五月综合网| 亚洲一区自拍| 国产aaa免费视频| 欧美超碰在线| 日韩久久久久久久| 欧美电影免费网站| 亚洲一区二区三区777| 欧美电影免费观看| 91高潮在线观看| 欧美一卡二卡| 美日韩在线视频| 免费看美女视频在线网站| 亚洲女人被黑人巨大进入al| 亚洲精品字幕在线| 欧美美女一区二区三区| 黄色网址中文字幕| 福利视频一区二区| 精品在线视频免费| 一区二区三区在线观看欧美| 日本中文在线视频| 国产精品三级av在线播放| 亚洲AV无码国产成人久久| 91老司机福利 在线| 2018国产精品| 成人免费视频免费观看| 国产精品熟女一区二区不卡| 开心九九激情九九欧美日韩精美视频电影| 精品人妻一区二区三区四区在线| 黄色成人精品网站| 男女啪啪免费观看| 亚洲精品成人无限看| 自拍另类欧美| 国产精品久久久久久| 午夜午夜精品一区二区三区文| 经典一区二区| 热re99久久精品国产99热| 加勒比久久综合| 亚洲国产高清国产精品| 大片网站久久| 亚洲欧洲一区二区| 99精品国产一区二区三区| 亚洲一区二区三区色| 欧美超碰在线| 97在线免费视频观看| 欧美视频成人| 丰满少妇大力进入| 99精品福利视频| 97国产精东麻豆人妻电影| 午夜亚洲性色福利视频| 国产又黄又猛视频| 麻豆传媒在线完整视频| 久久免费的精品国产v∧| 爱爱免费小视频| 国产日韩欧美激情| 99热这里只有精品4| 亚洲天堂中文字幕| 久久久国产成人| 精品久久久久久久久中文字幕| 精品成人av一区二区在线播放| 欧美日韩亚洲网| 中文字幕乱伦视频| 欧美精品亚洲一区二区在线播放| 国产精品久久无码一三区| 日韩午夜激情视频| 少妇av一区二区| 亚洲午夜色婷婷在线| 黄色av电影在线播放| 欧美激情一区二区三区高清视频| 国产乱码精品一区二三赶尸艳谈| 国产97色在线|日韩| 色综合久久久| 精品欧美日韩在线| 成人精品久久| 999一区二区三区| 欧美亚洲一级| 色18美女社区| 99久久99久久久精品齐齐| 亚洲精品乱码久久久久久久久久久久| 国产精品久久久久久久久免费相片 | 国产视频一视频二| 久久国产免费看| av2014天堂网| 亚洲欧美在线视频观看| 少妇一级淫片免费放中国 | 五月天视频在线观看| 成人国产精品免费观看动漫| 欧美丰满美乳xxⅹ高潮www| 一区二区三区在线观看欧美| 天堂网视频在线| 日韩一区二区免费电影| 精品成人一区二区三区免费视频| 久久视频在线看| 久久精品女人天堂av免费观看 | 日本黄色福利视频| 97久久超碰国产精品电影| 日韩欧美综合视频| 91黄色在线观看| 婷婷视频在线观看| 九九九久久久久久| 欧美激情福利| 欧美一区二区三区四区五区六区 | 中文字幕视频三区| 久久色在线观看| 国产精品第二十页| 欧美久久一二三四区| 免费a级毛片在线观看| 欧美精品videos| 久久av网站| 亚洲精品乱码久久久久久蜜桃91| 影音先锋久久久| 欧美高清精品一区二区| 国产精品国产三级国产aⅴ中文 | 777a∨成人精品桃花网| 美国一级片在线免费观看视频 | 日韩中文字幕在线观看| 亚洲午夜天堂| 黄色国产精品一区二区三区| 在线国产一区| 黄色a级三级三级三级| 国产精品久久久久永久免费观看| caoporn国产| 日韩av影片在线观看| 欧美aaaaaaa| 91丝袜脚交足在线播放| 我不卡伦不卡影院| 男人的天堂最新网址| 亚洲欧洲另类国产综合| 在线视频播放大全| 色噜噜狠狠色综合网图区| 一呦二呦三呦精品国产| 欧美日韩亚洲免费| 久久综合五月| 一区二区三区四区免费| 色综合久久综合网| 暖暖视频在线免费观看| 欧美一级片久久久久久久| 美女av一区| 妺妺窝人体色www在线小说| 99久久99久久精品国产片果冻| 91蜜桃视频在线观看| 亚洲国模精品私拍| 成人勉费视频| 日韩欧美一区二区视频在线播放| 日韩二区在线观看| 国产精品久久久久久成人| 欧美蜜桃一区二区三区| 黄色一级大片在线免费看产| 91牛牛免费视频| 亚洲无线视频| 久久久久国产精品区片区无码| 欧美日韩国产麻豆| 黄上黄在线观看| 国产精品久久久久久久一区探花 | www..com日韩| 91丨九色丨黑人外教| 无码人妻精品一区二| 在线播放日韩欧美| 国产一区二区三区免费观看在线 | 成人手机在线视频| 久热这里只有精品6| 国产亚洲激情视频在线| 欧美少妇激情| 色婷婷777777仙踪林| 不卡av在线网| 国产第一页在线观看| www亚洲精品| 国产精品久久久网站| 国产性生交xxxxx免费| 日韩一区在线免费观看| 成人爽a毛片一区二区| 青草成人免费视频| 久久一区二区三区喷水| 中国特级黄色片| 色久综合一二码| 亚洲制服国产| 免费精品视频一区二区三区| 久久99精品一区二区三区三区| 欧美三级 欧美一级| 亚洲视频第一页| 日韩成人在线看| 亚洲成熟丰满熟妇高潮xxxxx| 国产精品萝li| 日韩一级免费毛片| 国产精品久久久久久久久久小说 | 91成人天堂久久成人| 久久免费精品视频在这里| 91丨porny丨对白| 欧美三级电影在线看| 岛国在线视频网站| 一区二区不卡在线视频 午夜欧美不卡' |