日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

帶你了解垃圾收集算法實現細節

來源: 責編: 時間:2024-07-15 17:18:17 719觀看
導讀作者 | 蔡柱梁審校 | 重樓前言很多人都知道垃圾收集會掃描GC Roots,但是卻不清楚這么多的根對象,如何提升性能?提升性能的設計又會帶來什么新的問題?了解這些,對于JVM調優是很有幫助的。只有了解機制,才能更好地優化性能。

作者 | 蔡柱梁us628資訊網——每日最新資訊28at.com

審校 | 重樓us628資訊網——每日最新資訊28at.com

前言

us628資訊網——每日最新資訊28at.com

很多人都知道垃圾收集會掃描GC Roots,但是卻不清楚這么多的根對象,如何提升性能?提升性能的設計又會帶來什么新的問題?了解這些,對于JVM調優是很有幫助的。只有了解機制,才能更好地優化性能。us628資訊網——每日最新資訊28at.com

根節點枚舉

垃圾收集的第一件事就是根節點枚舉,這樣才能標記垃圾對象,完成垃圾收集。us628資訊網——每日最新資訊28at.com

OopMap

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

實際上,虛擬機不需要遍歷所有根節點,根據自己想要回收的內存區域去掃描這個區域相關的 GC Roots 即可。在 HotSpot 中,它是通過維護 OopMap 來記錄哪些地方存放著對象引用的,這樣收集器在掃描時就不需要檢查所有的 GC Roots。us628資訊網——每日最新資訊28at.com

安全點

在 OopMap 的協助下,HotSpot 可以快速準確地完成 GC Roots 枚舉,但是也帶來了新的問題:us628資訊網——每日最新資訊28at.com

可能導致引用關系變化或者說導致 OopMap 內容變化的指令非常多。如果為每一條指令都生成對應的 OopMap,那將會需要大量的額外存儲空間。這樣垃圾收集伴隨而來的空間成本就會變得無法忍受的高昂。us628資訊網——每日最新資訊28at.com

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

因此,安全點的選定既不能太少以至于讓垃圾收集器等待時間過長,也不能太多以至于過分增大運行時的內存負荷。安全點位置的選取基本上是以 “是否具有讓程序長時間執行的特征” 為標準進行選定的。“長時間執行”的最明顯特征就是指令序列的復用(例如:方法調用、循環跳轉、異常跳轉等等),所以只有具有這些功能的指令才會產生安全點。us628資訊網——每日最新資訊28at.com

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

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

安全區域

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

安全區域是指能夠確保在某一段代碼片段之中,引用關系不會發生變化。因此,在這個區域任意地方開始垃圾收集都是安全的。我們也可以把安全區域看作為被拉伸了的安全點。us628資訊網——每日最新資訊28at.com

當用戶線程執行到安全區域時,首先會標識自己已進入安全區域,虛擬機發起垃圾收集時就不需要管那些聲明在安全區域的線程。當線程要離開安全區域時,它要檢查虛擬機是否已經完成垃圾收集過程中需要暫停用戶線程的階段(如:根節點枚舉)。如果完成了,那線程可以離開安全區域繼續執行;否則它需要收到垃圾收集器發出可以離開安全區域的信號才可以離開安全區域。us628資訊網——每日最新資訊28at.com

記憶集與卡表

使用分代收集理論實現的垃圾收集器存在對象跨代引用的問題(哪怕是現在ZGC,雖然沒有分代的概念了,但是仍然有區域的概念跨代引用的問題本質上就是分區域進行垃圾收集,可是對象關系圖并非獨立所帶來的問題。這里以跨代用為例子)。因此,我們有必要了解虛擬機是如何解決這個問題的。us628資訊網——每日最新資訊28at.com

記憶集是一種用于記錄從非收集區域指向收集區域的指針集合的抽象數據結構。us628資訊網——每日最新資訊28at.com

最簡單的實現方式如下us628資訊網——每日最新資訊28at.com

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

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

  • 字長精度

每個記錄精確到機器字長(處理器的尋址位數),該字包含跨代指針。us628資訊網——每日最新資訊28at.com

  • 對象精度

每個記錄精確到一個對象,該對象里有字段含有跨代指針。us628資訊網——每日最新資訊28at.com

  • 卡精度

每個記錄精確到一塊內存區域,該區域內有對象含有跨代指針。us628資訊網——每日最新資訊28at.com

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

HotSpot 是用一個字節數組實現卡表的,變量聲明如下us628資訊網——每日最新資訊28at.com

CARD_TABLE[this address >>9]=1;

CARD_TABLE 的每個元素都對應著一塊特定大小的內存塊,這個內存塊被稱作 “卡頁”。看上面代碼可知 HotSpot 中使用的卡頁是 2 的 9 次冪,即 512 字節,如下圖us628資訊網——每日最新資訊28at.com

us628資訊網——每日最新資訊28at.com

一個卡頁內往往有許多對象,只要卡頁內有對象的字段存在著跨代指針,那就將該卡頁對應的卡表元素標識為1,稱為這個元素變臟,沒有則標識為0。垃圾收集時,只要篩選卡表中變臟的元素對應卡頁中的對象加入 GC Root 中一起掃描即可。us628資訊網——每日最新資訊28at.com

寫屏障

我們已經用記憶集來縮減 GC Roots 掃描范圍的問題,但還沒有解決卡表元素如何維護的問題,例如:何時變臟、誰來讓它們變臟等等。us628資訊網——每日最新資訊28at.com

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

HotSpot 是通過寫屏障(Write Barrier)技術維護卡表的。us628資訊網——每日最新資訊28at.com

這個寫屏障可不是我們學習并發時說的“內存屏障”,千萬不要混淆。us628資訊網——每日最新資訊28at.com

寫屏障解決問題的思想類似Spring 的 AOP,在引用對象賦值這個動作做了一個切面,在對象賦值動作的前后做技術處理。在賦值前執行的部分叫“寫前屏障”(Pre-Write Barrier),在賦值后的部分邏輯則稱為“寫后屏障”(Post-Write Barrier)。us628資訊網——每日最新資訊28at.com

冷門小知識:在 G1 出現之前,其他收集器都只用了寫后屏障。us628資訊網——每日最新資訊28at.com

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

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

為了提升性能,在更新卡表元素狀態前,要先判斷下狀態是否已經“臟”了,只有還是“干凈”的元素需要更改狀態,這個叫有條件更新卡表,我們可以通過 -XX:+UseCondCardMark 來選擇是“有條件更新卡表”,還是“無條件更新卡表”。us628資訊網——每日最新資訊28at.com

PS:具體是開啟“有條件更新卡表”更好,還是使用“無條件更新卡表”更好,需要根據自己應用進行實測來判斷。us628資訊網——每日最新資訊28at.com

并發的可達性分析,三色標記算法

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

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

為了降低用戶線程的停頓問題,出現了三色標記算法。三色標記算法通過將垃圾回收過程拆分為多個小步驟,使得垃圾回收器和應用程序可以交替執行(也就是支持并發執行),從而減少垃圾回收對應用程序運行的影響,增強了實時性和響應性。us628資訊網——每日最新資訊28at.com

三色標記算法顧名思義,它定義了三種顏色,如下:us628資訊網——每日最新資訊28at.com

  • 白色

表示對象尚未被垃圾收集器訪問過。us628資訊網——每日最新資訊28at.com

  • 黑色

表示對象已經被垃圾收集器訪問過,而且其子對象也掃描完成(因此黑色對象不可能沒有關聯灰色對象直接指向白色對象),屬于存活對象。us628資訊網——每日最新資訊28at.com

  • 灰色

表示對象已經被垃圾收集器訪問過,但這個對象上至少存在一個引用還沒有被掃描過。三色標記算法的執行過程如下:us628資訊網——每日最新資訊28at.com

1.初始化階段us628資訊網——每日最新資訊28at.com

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

2.標記階段us628資訊網——每日最新資訊28at.com

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

3.清除階段us628資訊網——每日最新資訊28at.com

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

要支持并發執行,要注意不能誤刪存活對象,否則就是一個嚴重 Bug。Wilson 于 1940 年在理論上證明了,當且僅當以下兩個條件同時滿足時,會產生誤刪問題:us628資訊網——每日最新資訊28at.com

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

因此,要解決誤刪問題,只需要破壞上述任一條件即可。由此分別產生了兩種解決方案:增量更新(Incremental Update)和原始快照(Snapshot At The Beginning,SATB)。us628資訊網——每日最新資訊28at.com

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

以上兩種方案都是通過寫屏障實現的。在 HotSpot 中,這兩種方案都有實際的應用,比如 CMS 就是基于增量更新來做并發標記的,G1 和 Shenandoah 則是使用原始快照來實現的。us628資訊網——每日最新資訊28at.com

總結

這里對上面的知識點進行簡單的總結。us628資訊網——每日最新資訊28at.com

  • 安全區域

解決何時可以開始垃圾收集(必須 Stop the world 的行為)。us628資訊網——每日最新資訊28at.com

  • 記憶集

解決 GC Roots 掃描范圍問題。us628資訊網——每日最新資訊28at.com

  • 寫屏障

解決卡表維護問題。us628資訊網——每日最新資訊28at.com

至此,各位對垃圾收集實現的細節應該比較清楚了,想更深入了解就需要結合實際的垃圾收集器的實現來學習了。us628資訊網——每日最新資訊28at.com

作者介紹

蔡柱梁,51CTO社區編輯,從事Java后端開發8年,做過傳統項目廣電BOSS系統,后投身互聯網電商,負責過訂單,TMS,中間件等。us628資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-100993-0.html帶你了解垃圾收集算法實現細節

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 超級加倍:互聯網大廠的容災架構設計與落地方案(跨機房部署、同城雙活、異地多活)

下一篇: POST請求為何會發送兩次?技術深度解析

標簽:
  • 熱門焦點
  • 5月iOS設備好評榜:iPhone 14僅排第43?

    來到新的一月,安兔兔的各個榜單又重新匯總了數據,像安卓陣營的榜單都有著比較大的變動,不過iOS由于設備的更新換代并沒有那么快,所以相對來說變化并不大,特別是iOS好評榜,老款設
  • 摸魚心法第一章——和配置文件說拜拜

    為了能摸魚我們團隊做了容器化,但是帶來的問題是服務配置文件很麻煩,然后大家在群里進行了“親切友好”的溝通圖片圖片圖片圖片對比就對比,簡單對比下獨立配置中心和k8s作為配
  • 服務存儲設計模式:Cache-Aside模式

    Cache-Aside模式一種常用的緩存方式,通常是把數據從主存儲加載到KV緩存中,加速后續的訪問。在存在重復度的場景,Cache-Aside可以提升服務性能,降低底層存儲的壓力,缺點是緩存和底
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 重估百度丨“晚熟”的百度云,能等到春天嗎?

    ©自象限原創作者|程心排版|王喻可2016年7月13日,百度云計算戰略發布會在北京舉行,宣告著百度智能云的正式啟程。彼時的會場座無虛席,甚至排隊排到了門外,在場的所有人幾乎都
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業務到 2022 年底還是 0,希望 2023 年出來一個 1。”這是2022年底,李彥宏
  • 華為HarmonyOS 4.0將于8月4日發布 或搭載AI大模型技術

    華為宣布HarmonyOS4.0將于8月4日正式發布。此前,華為已經針對開發者公布了HarmonyOS4.0,以便于開發者提前進行適配,也因此被曝光出了一些新系統的特性
  • 自研Exynos回歸!三星Galaxy S24系列將提供Exynos和驍龍雙版本

    年初,全新的三星Galaxy S23系列發布,包含Galaxy S23、Galaxy S23+和Galaxy S23 Ultra三個版本,全系搭載超頻版驍龍8 Gen 2,雖同樣采用臺積電4nm工藝制
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
午夜精品免费在线| 国产欧美一区二区三区在线看蜜臀| 久久精品一区二区三区不卡| 亚洲欧美日本国产有色| 欧美一区二区三区电影在线观看| 久久精品国产999大香线蕉| 久久久人成影片一区二区三区观看| 牛人盗摄一区二区三区视频| 欧美日韩精品免费观看视频完整| 国产精品久久久久久av福利软件 | 国内一区二区三区| 狠狠色噜噜狠狠色综合久 | 一区二区在线观看视频| 亚洲成人资源| 中日韩视频在线观看| 欧美一级淫片aaaaaaa视频| 久久九九热免费视频| 欧美精品在线观看91| 国产精品午夜春色av| 激情丁香综合| 一本色道久久综合亚洲精品婷婷| 欧美一区二区三区四区夜夜大片| 欧美大色视频| 国产拍揄自揄精品视频麻豆| 亚洲精品国产品国语在线app| 亚洲在线视频网站| 免费视频亚洲| 国产伦精品一区二区三区高清版 | 在线播放豆国产99亚洲| 一区二区三区欧美在线| 久久久久高清| 国产精品成人免费| 在线国产亚洲欧美| 亚洲神马久久| 女女同性精品视频| 国产精品一卡二卡| 亚洲日韩成人| 久久久精品国产免费观看同学| 欧美日韩日日夜夜| 在线欧美日韩| 午夜精品一区二区三区在线视 | 亚洲午夜免费视频| 久久久久久久性| 国产精品久久久久久模特| 亚洲第一区在线观看| 亚洲欧美影音先锋| 欧美日韩岛国| 在线观看一区二区视频| 欧美有码在线视频| 欧美午夜视频在线观看| 亚洲国产成人在线播放| 欧美一区二区啪啪| 国产精品户外野外| 日韩视频国产视频| 国产亚洲一区二区三区| 免费在线亚洲| 国产欧美日韩精品专区| 国产欧美一区二区视频| 亚洲人成人77777线观看| 欧美制服丝袜第一页| 国产精品高潮在线| 日韩一级视频免费观看在线| 老牛嫩草一区二区三区日本| 国产私拍一区| 亚洲欧美www| 欧美日韩国产欧| 在线看视频不卡| 久久精品免费观看| 国产精品伊人日日| 亚洲婷婷综合色高清在线| 老司机免费视频一区二区三区| 国产一区二区三区电影在线观看| 亚洲一区三区电影在线观看| 欧美精品成人| 亚洲国产综合在线看不卡| 久久综合福利| 尤物99国产成人精品视频| 久久九九国产| 国产亚洲一区二区三区在线观看| 午夜免费日韩视频| 国产精品欧美日韩| 亚洲视频观看| 国产精品成人一区二区三区夜夜夜| 日韩一级精品| 欧美日韩国产一区| 夜夜爽www精品| 欧美日韩一级片在线观看| 99精品视频一区二区三区| 欧美噜噜久久久xxx| 亚洲日本中文| 欧美日韩日本国产亚洲在线| 99亚洲视频| 欧美日韩综合在线免费观看| 中国亚洲黄色| 国产精品视频yy9299一区| 亚洲欧美日韩视频一区| 国产乱码精品| 久久久久国产精品一区| 国内精品久久久久久影视8| 久久精品亚洲| 在线免费观看成人网| 欧美二区在线| 在线视频你懂得一区二区三区| 欧美三级在线播放| 亚洲综合精品四区| 国产精品自拍小视频| 久久精品国内一区二区三区| 一区免费观看| 欧美3dxxxxhd| avtt综合网| 国产精品视频在线观看| 欧美在线观看一区| 在线播放亚洲一区| 欧美激情综合色| 亚洲午夜高清视频| 国产日韩欧美高清| 美日韩精品视频| 日韩亚洲在线观看| 国产精品捆绑调教| 久久久一二三| 亚洲精品午夜精品| 国产精品乱码久久久久久| 久久都是精品| 亚洲国产成人av| 欧美日韩精品欧美日韩精品| 亚洲欧美一区二区激情| 狠狠色综合网站久久久久久久| 欧美不卡视频一区| 亚洲午夜羞羞片| 黄色成人精品网站| 欧美精品在线观看播放| 亚洲欧美另类久久久精品2019| 国内精品**久久毛片app| 免费黄网站欧美| 亚洲视频专区在线| 狠狠色狠色综合曰曰| 欧美日韩午夜视频在线观看| 欧美伊人久久久久久久久影院| 亚洲高清在线精品| 国产精品乱码妇女bbbb| 浪潮色综合久久天堂| 亚洲视频精品| 在线免费观看成人网| 欧美午夜在线观看| 久久久久久久成人| 一本色道久久| 激情久久综艺| 国产精品久久激情| 美女网站久久| 亚洲欧美一级二级三级| 亚洲高清在线观看一区| 国产精品手机在线| 久久综合五月| 亚洲一区二区三区久久| 精品福利电影| 国产精品日产欧美久久久久| 裸体丰满少妇做受久久99精品| 亚洲欧美日韩国产综合精品二区| 亚洲国产小视频在线观看| 国产精品色网| 欧美激情成人在线| 久久久国产精品一区二区中文| 一区二区日韩免费看| 一区精品在线播放| 国产精品视频九色porn| 欧美激情女人20p| 久久久久国产精品一区二区| 国产嫩草影院久久久久| 欧美日本在线一区| 久久久亚洲影院你懂的| 亚洲一二三区在线观看| 亚洲欧洲日本专区| 韩日在线一区| 国产精品专区h在线观看| 欧美日韩综合在线| 免费观看久久久4p| 久久精品国产亚洲5555| 亚洲午夜激情在线| 91久久在线观看| 影音先锋在线一区| 国产欧美日韩综合精品二区| 欧美图区在线视频| 欧美巨乳波霸| 欧美77777| 久久综合久久综合这里只有精品 | 久久婷婷一区| 欧美在线观看一二区| 亚洲一区中文字幕在线观看| 亚洲精品视频免费观看| 亚洲国产精品久久91精品| 精品动漫3d一区二区三区| 国产人成精品一区二区三| 国产精品国产自产拍高清av王其 | 在线看片日韩| 亚洲东热激情| 在线精品亚洲| 精品福利av| 狠久久av成人天堂| 狠狠v欧美v日韩v亚洲ⅴ| 国产一区二区三区最好精华液 | 99在线|亚洲一区二区| 亚洲精品中文在线| 亚洲欧洲在线免费| 亚洲欧洲日产国产综合网|