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

帶你了解垃圾收集算法實現(xiàn)細節(jié)

原創(chuàng) 精選
開發(fā) 前端
很多人都知道垃圾收集會掃描 GC Roots,但是卻不清楚這么多的根對象,如何提升性能?提升性能的設計又會帶來什么新的問題?了解這些,對于JVM調(diào)優(yōu)是很有幫助的。只有了解機制,才能更好地優(yōu)化性能。

作者 | 蔡柱梁

審校 | 重樓

前言

很多人都知道垃圾收集會掃描GC Roots,但是卻不清楚這么多的根對象,如何提升性能?提升性能的設計又會帶來什么新的問題?了解這些,對于JVM調(diào)優(yōu)是很有幫助的。只有了解機制,才能更好地優(yōu)化性能。

根節(jié)點枚舉

垃圾收集的第一件事就是根節(jié)點枚舉,這樣才能標記垃圾對象,完成垃圾收集。

OopMap

要進行根節(jié)點枚舉,最簡單的實現(xiàn)是遍歷掃描所有 GC Roots。可如果挨個遍歷做引用判斷的話,將會消耗大量的時間,而且至今為止所有垃圾收集器在做根節(jié)點枚舉時都是需要暫停用戶線程的(因為可達性分析算法做引用判斷時需要根節(jié)點的對象引用關系是不變的,這樣才能保證不會出現(xiàn)回收非死亡對象這種嚴重的Bug)。這樣Java的應用就無法提供給人使用了,因為明顯的卡頓對用戶體驗來說是毀滅性的打擊。

實際上,虛擬機不需要遍歷所有根節(jié)點,根據(jù)自己想要回收的內(nèi)存區(qū)域去掃描這個區(qū)域相關的 GC Roots 即可。在 HotSpot 中,它是通過維護 OopMap 來記錄哪些地方存放著對象引用的,這樣收集器在掃描時就不需要檢查所有的 GC Roots。

安全點

在 OopMap 的協(xié)助下,HotSpot 可以快速準確地完成 GC Roots 枚舉,但是也帶來了新的問題:

可能導致引用關系變化或者說導致 OopMap 內(nèi)容變化的指令非常多。如果為每一條指令都生成對應的 OopMap,那將會需要大量的額外存儲空間。這樣垃圾收集伴隨而來的空間成本就會變得無法忍受的高昂。

實際上 HotSpot 也只是在 “特定的位置” 記錄了這些信息,這些位置被稱為安全點(Safepoint)。用戶程序執(zhí)行時并非在代碼指令流的任意位置都能夠停頓下來開始垃圾收集的,而是強制要求必須到達安全點才能夠暫停。

因此,安全點的選定既不能太少以至于讓垃圾收集器等待時間過長,也不能太多以至于過分增大運行時的內(nèi)存負荷。安全點位置的選取基本上是以 “是否具有讓程序長時間執(zhí)行的特征” 為標準進行選定的。“長時間執(zhí)行”的最明顯特征就是指令序列的復用(例如:方法調(diào)用、循環(huán)跳轉(zhuǎn)、異常跳轉(zhuǎn)等等),所以只有具有這些功能的指令才會產(chǎn)生安全點。

知道安全點的選取之后,就要思考:如何在垃圾收集發(fā)生時讓所有線程(不包括執(zhí)行 JNI 調(diào)用的線程)都跑到最近的安全點,然后停頓下來。有兩種方案可供選擇:搶先式中斷(Preemptive Suspension)和主動式中斷(Voluntary Suspension,目前大多數(shù)虛擬機都采用這個方案響應 GC 事件)。

  • 搶先式中斷:搶先式中斷不需要線程的執(zhí)行代碼主動配合,在垃圾收集發(fā)生時,系統(tǒng)首先把所有用戶線程全部中斷;如果發(fā)現(xiàn)有線程不在安全點上,就恢復該線程執(zhí)行,讓它跑到安全點再重新中斷。
  • 主動式中斷:當垃圾收集需要中斷線程時,不直接對線程操作,僅僅設置一個標志位,各個線程執(zhí)行過程中會不停地輪詢該標志,一旦發(fā)現(xiàn)該標志為true時,就會在最近的安全點上主動掛起。

安全區(qū)域

安全點看似已經(jīng)完美解決如何停頓用戶線程,讓虛擬機進入垃圾回收狀態(tài)的問題。安全點機制保證了程序執(zhí)行時在不太長的時間內(nèi)就會遇到可進入垃圾收集過程的安全點,但是程序“不執(zhí)行”的時候呢?比如用戶線程處于 Sleep 狀態(tài)或者 Blocked 狀態(tài),這時候線程無法響應虛擬機的中斷請求,不能再走到安全點中斷掛起自己,虛擬機也不可能一直傻傻地等線程重新激活走到安全點。對于這種情況,就必須引入安全區(qū)域(Safe Region)來解決。

安全區(qū)域是指能夠確保在某一段代碼片段之中,引用關系不會發(fā)生變化。因此,在這個區(qū)域任意地方開始垃圾收集都是安全的。我們也可以把安全區(qū)域看作為被拉伸了的安全點。

當用戶線程執(zhí)行到安全區(qū)域時,首先會標識自己已進入安全區(qū)域,虛擬機發(fā)起垃圾收集時就不需要管那些聲明在安全區(qū)域的線程。當線程要離開安全區(qū)域時,它要檢查虛擬機是否已經(jīng)完成垃圾收集過程中需要暫停用戶線程的階段(如:根節(jié)點枚舉)。如果完成了,那線程可以離開安全區(qū)域繼續(xù)執(zhí)行;否則它需要收到垃圾收集器發(fā)出可以離開安全區(qū)域的信號才可以離開安全區(qū)域。

記憶集與卡表

使用分代收集理論實現(xiàn)的垃圾收集器存在對象跨代引用的問題(哪怕是現(xiàn)在ZGC,雖然沒有分代的概念了,但是仍然有區(qū)域的概念跨代引用的問題本質(zhì)上就是分區(qū)域進行垃圾收集,可是對象關系圖并非獨立所帶來的問題。這里以跨代用為例子)。因此,我們有必要了解虛擬機是如何解決這個問題的。

記憶集是一種用于記錄從非收集區(qū)域指向收集區(qū)域的指針集合的抽象數(shù)據(jù)結構。

最簡單的實現(xiàn)方式如下

Class RememberedSet {
 Object[] set[OBJECT_INTERGENERATIONAL_REFERENCE_SIZE];
}

這種記錄全部含跨代引用對象的實現(xiàn)方案,無論是空間占用還是維護成本都相當高。而在垃圾收集的場景中,收集器只需要通過記憶集判斷出某一塊非收集區(qū)域是否存在指向收集區(qū)域的指針即可。因此,設計記憶集時,可以選擇記錄精度更粗的實現(xiàn)方式來節(jié)省記憶集的存儲成本和維護成本,具體如下:

  • 字長精度

每個記錄精確到機器字長(處理器的尋址位數(shù)),該字包含跨代指針。

  • 對象精度

每個記錄精確到一個對象,該對象里有字段含有跨代指針。

  • 卡精度

每個記錄精確到一塊內(nèi)存區(qū)域,該區(qū)域內(nèi)有對象含有跨代指針。

“卡精度” 所指的是用一種稱為“卡表”(Card Table)的方式去實現(xiàn)記憶集,這也是目前最常用的一種記憶集實現(xiàn)形式。這里需要知道“記憶集”是一種思路,只有一個大概設計方向的數(shù)據(jù)結構;而“卡表”則是“記憶集”的一種具體實現(xiàn)方案了,它定義了記憶集的記錄精度、堆內(nèi)存的映射關系等。如果覺得還是難理解它們的關系,那可以簡單理解成 HashMap 與 Map 之間的關系。

HotSpot 是用一個字節(jié)數(shù)組實現(xiàn)卡表的,變量聲明如下

CARD_TABLE[this address >>9]=1;

CARD_TABLE 的每個元素都對應著一塊特定大小的內(nèi)存塊,這個內(nèi)存塊被稱作 “卡頁”。看上面代碼可知 HotSpot 中使用的卡頁是 2 的 9 次冪,即 512 字節(jié),如下圖

一個卡頁內(nèi)往往有許多對象,只要卡頁內(nèi)有對象的字段存在著跨代指針,那就將該卡頁對應的卡表元素標識為1,稱為這個元素變臟,沒有則標識為0。垃圾收集時,只要篩選卡表中變臟的元素對應卡頁中的對象加入 GC Root 中一起掃描即可。

寫屏障

我們已經(jīng)用記憶集來縮減 GC Roots 掃描范圍的問題,但還沒有解決卡表元素如何維護的問題,例如:何時變臟、誰來讓它們變臟等等。

卡表元素何時變臟?有其他分代區(qū)域中對象引用了本區(qū)域?qū)ο髸r,其對應的卡表元素就應該變臟,變臟時間點原則上應該發(fā)生在引用類型字段賦值的那一刻。那么要如何才能在對象賦值的那一刻去更新維護卡表呢?垃圾收集在編譯執(zhí)行的場景中發(fā)生,這里需要面對的是機器指令流。這就需要從機器碼層面去把維護卡表的動作放到每一個賦值的操作之中。

HotSpot 是通過寫屏障(Write Barrier)技術維護卡表的。

這個寫屏障可不是我們學習并發(fā)時說的“內(nèi)存屏障”,千萬不要混淆。

寫屏障解決問題的思想類似Spring 的 AOP,在引用對象賦值這個動作做了一個切面,在對象賦值動作的前后做技術處理。在賦值前執(zhí)行的部分叫“寫前屏障”(Pre-Write Barrier),在賦值后的部分邏輯則稱為“寫后屏障”(Post-Write Barrier)。

冷門小知識:在 G1 出現(xiàn)之前,其他收集器都只用了寫后屏障。

應用寫屏障后,虛擬機就會為所有賦值操作生成相應的指令,一旦收集器在寫屏障中增加了更新卡表操作,無論更新的是不是老年代對新生代的引用,每次只要對引用進行更新,就會產(chǎn)生額外的開銷,不過這個開銷與 Minor GC 時掃描整個老年代的代價相比還是低得多。

實際上卡表除了寫屏障這個額外開銷以外在高并發(fā)的場景下還有“偽共享”問題。現(xiàn)代 CPU 的緩存行大小一般為 64 字節(jié)。而我們卡表一個元素是一個字節(jié),假設有 64 個卡表元素共享了一個緩存行,那么這 64 個卡表元素映射的32KB(64 * 512 字節(jié))內(nèi)存里的對象被不同線程更新時,就會導致更新卡表時因為是用了同一個緩存行而導致性能降低。

為了提升性能,在更新卡表元素狀態(tài)前,要先判斷下狀態(tài)是否已經(jīng)“臟”了,只有還是“干凈”的元素需要更改狀態(tài),這個叫有條件更新卡表,我們可以通過 -XX:+UseCondCardMark 來選擇是“有條件更新卡表”,還是“無條件更新卡表”。

PS:具體是開啟“有條件更新卡表”更好,還是使用“無條件更新卡表”更好,需要根據(jù)自己應用進行實測來判斷。

并發(fā)的可達性分析,三色標記算法

所周知,當前主流的垃圾收集器基本上都是依靠可達性分析算法來判斷對象是否存活,可達性分析算法理論上要求全過程都基于一個能保障一致性的快照中才進行分析,這意味著“Stop the World”。根節(jié)點枚舉這個步驟在 OopMap 的優(yōu)化技巧下,它所需要的停頓時間已經(jīng)非常短暫且相對固定(不隨堆容量而增長)了。可是從 GC Roots 往下遍歷對象圖,這一步驟的停頓時間勢必與堆容量成正比關系——堆的對象越多,對象圖越復雜,標記對象所產(chǎn)生的停頓時間越長。

“標記”階段是所有追蹤式垃圾收集算法的共同特征,如果這個階段會隨堆變大而等比例增加停頓時間,那么采用這類型算法的垃圾收集器都會被詬病。因此,如果能夠削減這部分的停頓時間的話,那么帶來的收益也將會是巨大的。

為了降低用戶線程的停頓問題,出現(xiàn)了三色標記算法。三色標記算法通過將垃圾回收過程拆分為多個小步驟,使得垃圾回收器和應用程序可以交替執(zhí)行(也就是支持并發(fā)執(zhí)行),從而減少垃圾回收對應用程序運行的影響,增強了實時性和響應性。

三色標記算法顧名思義,它定義了三種顏色,如下:

  • 白色

表示對象尚未被垃圾收集器訪問過。

  • 黑色

表示對象已經(jīng)被垃圾收集器訪問過,而且其子對象也掃描完成(因此黑色對象不可能沒有關聯(lián)灰色對象直接指向白色對象),屬于存活對象。

  • 灰色

表示對象已經(jīng)被垃圾收集器訪問過,但這個對象上至少存在一個引用還沒有被掃描過。三色標記算法的執(zhí)行過程如下:

1.初始化階段

  • 所有對象最初都標記為白色。
  • 根對象標記為灰色,并將其放入一個待處理集合(通常是隊列或棧)。

2.標記階段

  • 從灰色對象集合中取出一個對象,將其標記為黑色,并將該對象引用的所有白色子對象標記為灰色,并加入灰色對象集合。
  • 重復上述過程,直到灰色對象集合為空。

3.清除階段

  • 當標記階段完成后,所有仍為白色的對象即為垃圾對象,可以被回收。

要支持并發(fā)執(zhí)行,要注意不能誤刪存活對象,否則就是一個嚴重 Bug。Wilson 于 1940 年在理論上證明了,當且僅當以下兩個條件同時滿足時,會產(chǎn)生誤刪問題:

  • 賦值器插入了一條或者多條從黑色對象到白色對象的新引用。
  • 賦值器刪除了全部從灰色對象到某白色對象的直接或間接引用。

因此,要解決誤刪問題,只需要破壞上述任一條件即可。由此分別產(chǎn)生了兩種解決方案:增量更新(Incremental Update)和原始快照(Snapshot At The Beginning,SATB)。

  • 增量更新破壞的是第一個條件,當黑色對象插入新的指向白色對象的引用關系時,就將這個新插入的引用記錄下來,等并發(fā)掃描結束后,再將這些記錄過的引用關系中的黑色對象為根,重新掃描一次。
  • 原始快照破壞的是第二個條件,當灰色對象要刪除指向白色對象的引用關系時,就將這個要刪除的引用記錄下來,在并發(fā)掃描結束后,再將這些記錄過的引用關系中的灰色對象為根,重新掃描一次。

以上兩種方案都是通過寫屏障實現(xiàn)的。在 HotSpot 中,這兩種方案都有實際的應用,比如 CMS 就是基于增量更新來做并發(fā)標記的,G1 和 Shenandoah 則是使用原始快照來實現(xiàn)的。

總結

這里對上面的知識點進行簡單的總結。

  • 安全區(qū)域

解決何時可以開始垃圾收集(必須 Stop the world 的行為)。

  • 記憶集

解決 GC Roots 掃描范圍問題。

  • 寫屏障

解決卡表維護問題。

至此,各位對垃圾收集實現(xiàn)的細節(jié)應該比較清楚了,想更深入了解就需要結合實際的垃圾收集器的實現(xiàn)來學習了。

作者介紹

蔡柱梁,51CTO社區(qū)編輯,從事Java后端開發(fā)8年,做過傳統(tǒng)項目廣電BOSS系統(tǒng),后投身互聯(lián)網(wǎng)電商,負責過訂單,TMS,中間件等。

責任編輯:華軒 來源: 51CTO
相關推薦

2010-03-04 10:08:54

.Net垃圾收集

2009-06-15 16:14:40

Java垃圾收集算法GC

2010-01-06 16:33:50

.Net Framew

2009-10-30 10:47:48

VB.NET垃圾收集器

2024-05-28 00:00:03

Java垃圾收集機制

2023-02-26 11:50:04

Hbase程序Oracle

2016-10-20 08:46:17

2017-09-21 14:40:06

jvm算法收集器

2024-03-15 08:04:30

G1CMSJVM

2022-05-06 22:13:56

JVM垃圾收集算法

2020-10-26 13:42:28

Python算法垃圾

2021-08-15 18:59:13

垃圾收集器JDK

2020-05-14 13:39:19

Java 垃圾回收機制

2022-03-14 08:01:06

LRU算法線程池

2022-03-23 08:31:25

LRU 算法JavaScripLFU 緩存算法

2022-09-26 11:30:40

MQTT協(xié)議客戶端協(xié)議

2010-03-04 14:33:11

.NET垃圾收集

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI協(xié)議

2024-01-15 11:12:28

Go內(nèi)存開發(fā)
點贊
收藏

51CTO技術棧公眾號

久久久久se| 97在线观看视频国产| 青青草原国产在线视频| 欧美jizz18性欧美| 福利91精品一区二区三区| 97久久久免费福利网址| 婷婷色一区二区三区| 日本午夜免费一区二区| 亚洲一区在线观看免费观看电影高清| 国产欧美在线一区二区| 91麻豆精品在线| 欧美va亚洲va日韩∨a综合色| 亚洲成人av在线| 男人天堂成人在线| 自拍亚洲图区| 久久精品日产第一区二区三区高清版| 成人免费午夜电影| 一级片在线观看免费| 欧美va天堂在线| 亚洲香蕉成视频在线观看| 亚洲成人av免费观看| 欧美色999| 亚洲午夜一区二区| 在线视频亚洲自拍| 每日更新av在线播放| 国产精品一卡二| 国产精品91久久久| 亚洲国产综合久久| 国产精品久久久乱弄| 精品夜色国产国偷在线| 手机看片国产精品| 国产成人77亚洲精品www| 亚洲成人在线网站| 中文字幕在线乱| 国产系列在线观看| av在线不卡电影| 91精品视频在线播放| 免费黄色小视频在线观看| 午夜国产精品视频| 久久精品视频va| 久久亚洲AV无码专区成人国产| 97一区二区国产好的精华液| 精品视频在线视频| 日韩中文字幕免费在线| 免费在线小视频| 一区二区三区在线高清| 亚洲一区二区三区色| 九色视频在线观看免费播放| 成人免费视频网站在线观看| 亚洲jizzjizz日本少妇| 中文字幕第99页| 久久男女视频| 日本欧美在线视频| 好吊妞视频一区二区三区| 欧美成人嫩草网站| 久久国产色av| 欧美激情图片小说| 91精品国产麻豆国产在线观看| 中文字幕亚洲综合久久| 人妻aⅴ无码一区二区三区| 亚洲97av| 亚洲深夜福利在线| 国产肥白大熟妇bbbb视频| 天天躁日日躁狠狠躁欧美巨大小说| 精品国产一二三区| 日韩Av无码精品| 狠狠一区二区三区| 亚洲国产精品人人爽夜夜爽| 国产在线不卡av| 精品人人人人| 亚洲欧美视频在线| caopeng视频| 成人一区而且| 久久综合电影一区| 精品97人妻无码中文永久在线| 欧美激情五月| 久久久最新网址| 久久久精品国产sm调教| 亚洲精品色图| 国产成人精品综合| 一级黄色大毛片| 国产电影一区二区三区| 成人h视频在线观看| 色呦呦中文字幕| 91蝌蚪国产九色| 日日噜噜噜噜夜夜爽亚洲精品| 香蕉视频免费在线播放| 亚洲欧美色图小说| 日本免费不卡一区二区| 免费污视频在线一区| 欧美日韩高清一区二区不卡| 四虎国产精品永久免费观看视频| 高潮久久久久久久久久久久久久 | 色综合久久天天综线观看| 久久久久噜噜噜亚洲熟女综合| 亚洲九九精品| 国产精品免费看久久久香蕉| 国产xxxx在线观看| 久久亚洲一级片| 中文字幕中文字幕在线中一区高清 | 亚洲熟女少妇一区二区| 韩国久久久久| 日产精品99久久久久久| 国产精品福利电影| 91热门视频在线观看| 在线观看亚洲视频啊啊啊啊| 国产网红女主播精品视频| 欧美性生交xxxxxdddd| 美女在线视频一区二区| 国语一区二区三区| 久久精品一偷一偷国产| 亚洲另类欧美日韩| 国内精品伊人久久久久av影院| 黄色91av| 国产cdts系列另类在线观看| 色偷偷成人一区二区三区91| 日本一本在线视频| 国产精品一区2区3区| 九九热精品视频在线播放| 精品成人无码久久久久久| 国产福利一区二区| 一区二区在线不卡| 中文字幕在线中文字幕在线中三区 | 国产精品啪啪啪视频| 成人欧美一区二区三区的电影| 欧美一区永久视频免费观看| 精品少妇人妻一区二区黑料社区| 欧美日韩在线大尺度| 国产欧美精品在线播放| 欧美伦理影视网| 亚洲福利一区二区三区| 中文字幕一区久久| 精品国产123区| 欧美一级电影在线| 亚洲国产精品成人久久蜜臀| 中文字幕在线观看一区| 欧在线一二三四区| 青青草原在线亚洲| 亚洲97在线观看| 精品人妻一区二区三区三区四区 | 精品视频在线观看| 好看的中文字幕在线播放| 欧美日韩国产经典色站一区二区三区| 亚洲一级中文字幕| 国产视频一区在线观看一区免费| 成人黄色在线免费观看| 超碰在线caoporn| 欧美日韩精品欧美日韩精品一| 无码一区二区三区在线| 性一交一乱一区二区洋洋av| 精品视频免费观看| 人在线成免费视频| 日韩成人在线观看| 西西44rtwww国产精品| 波多野结衣在线一区| 久久精品无码中文字幕| 国产成人一二片| 欧美激情按摩在线| 国产香蕉在线观看| 亚洲不卡一区二区三区| 久久人人爽人人爽人人片| 一本色道久久| 久久综合色一本| 成人性生活视频| 亚洲天堂av在线免费| 特级西西444www高清大视频| 国产欧美一区二区三区鸳鸯浴| 亚洲福利精品视频| 无码一区二区三区视频| 91在线观看欧美日韩| a级影片在线观看| 亚洲精品一线二线三线| 国产成人无码精品亚洲| 久久久久久久国产精品影院| 成人性生生活性生交12| 99久精品视频在线观看视频| 成人在线视频网站| 国产99re66在线视频| 精品成人一区二区三区| 天堂中文在线网| 国产日产欧美一区二区三区| 污色网站在线观看| 欧美日韩国产一区精品一区| 国产一区二区三区免费不卡| 日本综合字幕| 精品国产一区久久久| 蜜臀久久久久久999| 欧美性生交大片免费| 国产中文字幕久久| 懂色中文一区二区在线播放| 欧美韩国日本在线| 99精品视频在线观看播放| 国内成+人亚洲| 99久久er| 欧美激情一区二区三区久久久 | 永久免费看片在线播放| 国产亚洲综合色| 香蕉视频色在线观看| 99精品久久久| 中文字幕久久综合| 久久97精品| 成人国产精品一区二区| sis001亚洲原创区| 色琪琪综合男人的天堂aⅴ视频| 国产高清视频免费观看| 91福利资源站| 一区二区三区免费高清视频| 欧美国产成人在线| 在线xxxxx| 久草在线在线精品观看| 人人干视频在线| 午夜欧美在线| 日本一区视频在线| av日韩精品| 国产一区视频在线播放| 色一区二区三区| 久久91精品国产| av电影在线网| 亚洲国产成人精品电影| 国产精品久久777777换脸| 色综合色综合色综合| 久久久久性色av无码一区二区| 久久久综合视频| 欧美做受高潮中文字幕| 久久精品国产精品亚洲精品| 能在线观看的av| 欧美日韩一区二区高清| 一区二区免费在线视频| 自拍偷拍欧美一区| 国产精品久久波多野结衣| 四虎影视精品永久在线观看| 国产成人精品久久久| 538在线精品| 欧美国产日韩一区二区三区| 免费黄色网址在线观看| 一区二区欧美日韩视频| 日本福利午夜视频在线| 欧美精品一区二| 亚洲AV无码精品自拍| 69成人精品免费视频| 中文字幕乱码一区二区 | 久久亚洲影视| 国产乱码精品一区二区三区卡| 日日夜夜精品| 国产精品夜间视频香蕉| 日韩欧美一区二区三区免费观看| 7777免费精品视频| 爱啪啪综合导航| 午夜精品在线视频| 久久青青色综合| 欧美黄色片视频| 日韩影视在线| 色综合久久天天综线观看| av中文字幕在线观看| 欧美成人精品h版在线观看| 黄色一级片在线观看| 久久精品91久久久久久再现| 天堂中文8资源在线8| 日韩中文视频免费在线观看| 91成人高清| 在线色欧美三级视频| 超碰在线国产| 色偷偷9999www| 麻豆免费在线视频| 欧美xxxx18国产| 日本资源在线| 69av在线播放| 欧美18av| 国产精品偷伦免费视频观看的| 色综合一区二区日本韩国亚洲| 国产日韩欧美夫妻视频在线观看 | 综合天天久久| 国产 欧美 日本| 激情久久一区| 日韩精品一区二区三区久久| 久久精品观看| 在线观看亚洲色图| 国产在线不卡一区| av av在线| 久久久久久9999| 国产精品18在线| 亚洲综合一区在线| 狠狠人妻久久久久久| 欧美日韩一区二区三区在线看| 国产麻豆一精品一男同| 亚洲成人av中文字幕| 超碰免费97在线观看| 欧美猛交免费看| 亚洲男人av| 91久久夜色精品国产网站| 91在线一区| 日韩三级电影| 欧美激情第8页| 麻豆av免费在线| 国产一区二区三区观看| www.免费av| 亚洲欧洲另类国产综合| 亚欧视频在线观看| 欧美日韩在线免费视频| 国产91久久久| 中文字幕亚洲一区| 丁香花视频在线观看| 国产成人亚洲综合91| 成人在线视频国产| 欧美日韩一区在线播放| 综合久久亚洲| 婷婷六月天在线| 成a人片国产精品| 免费精品在线视频| 欧美日韩亚洲91| 99精品在线视频观看| 亚洲欧美综合区自拍另类| 四虎亚洲精品| 国产精品一二三在线| 日韩大胆成人| 成人在线视频一区二区三区| 久久美女性网| 亚洲制服丝袜在线播放| 中文字幕人成不卡一区| 亚洲乱码国产乱码精品| 欧美不卡在线视频| 好操啊在线观看免费视频| 国产91亚洲精品| 欧美美女在线直播| 人人妻人人澡人人爽欧美一区双| 蜜臀av一区二区在线免费观看| 天堂久久久久久| 亚洲成人免费看| 性色av蜜臀av| 精品国产欧美一区二区五十路| 欧美一级大黄| 激情一区二区三区| 亚洲国产专区| 国产精品99精品无码视亚| 中文字幕佐山爱一区二区免费| 午夜一级黄色片| 亚洲欧洲日本专区| 日韩伦理在线| 国产一级特黄a大片99| 欧美体内she精视频在线观看| 伊人影院综合在线| 中文字幕不卡三区| 这里只有精品免费视频| 精品视频在线播放| 韩国成人漫画| 久久手机视频| 免费在线日韩av| 日本少妇xxxx| 欧美日韩国产区| 四虎精品在永久在线观看 | 精品国产免费一区二区三区四区| 黄网站视频在线观看| 成人午夜两性视频| 66视频精品| 又黄又爽又色的视频| 一区二区免费看| 丰满人妻一区二区三区免费| 欧美精品videossex88| 中文字幕久久精品一区二区| 亚洲小视频在线播放| 国产成人亚洲精品青草天美| 久久国产精品二区| 欧美精品一区二区三区久久久| 18aaaa精品欧美大片h| 精品欧美国产| 丝袜美腿亚洲综合| 在线观看亚洲大片短视频| 欧美视频精品在线| 久久久久久国产精品免费无遮挡| 成人亲热视频网站| 在线观看一区| 国产福利在线观看视频| 色婷婷综合久久久久中文一区二区 | 日本成人午夜影院| 91麻豆精品国产91久久久资源速度| 欧美r级在线| 国产免费一区二区| 久久国产精品99国产| 精品熟妇无码av免费久久| 制服丝袜日韩国产| 国产高清视频色在线www| 就去色蜜桃综合| 久久精品国产网站| 日韩男人的天堂| 亚洲图片在线综合| 国产精品亚洲四区在线观看| 草草视频在线免费观看| 久久精品一区四区| 国产激情久久久久久熟女老人av| 久久久日本电影| 欧州一区二区| 欧美一级片在线免费观看| 色综合久久中文字幕综合网| 欧美精品videos另类| 国产视频一区二区三区四区| 日本欧美大码aⅴ在线播放| 欧美三级小视频| 亚洲免费视频在线观看| japansex久久高清精品| 欧美国产激情视频|