久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

07-04-源碼-.NET Core GC清掃與壓縮

07-04-源碼-.NET Core GC清掃與壓縮 .NET Core GC 清掃與壓縮篇章07-源碼深度-.NET Core GC |閱讀時(shí)間約 45 分鐘一、引言標(biāo)記階段識別了存活對象后GC 進(jìn)入回收階段——清掃死亡對象、壓縮存活對象。清掃和壓縮是 GC 中內(nèi)存效率的決定性因素清掃決定了多少死亡內(nèi)存被真正釋放壓縮決定了碎片是否累積到影響分配的程度。但清掃和壓縮的代價(jià)也不容忽視。一次全堆壓縮可能耗時(shí)數(shù)十到數(shù)百毫秒直接反映在應(yīng)用的暫停時(shí)間上。所以 .NET Core GC 的核心設(shè)計(jì)哲學(xué)是能不清壓就不清壓必須清壓時(shí)盡量并行化。這個(gè)哲學(xué)貫穿了從計(jì)劃決策到清掃實(shí)現(xiàn)、從壓縮策略到 LOH 特殊處理的每一個(gè)環(huán)節(jié)。在展開之前先把本章的定位說清楚。07-03 標(biāo)記篇已經(jīng)講完了哪些對象活著本章接著講活著的東西怎么擺回去、死的東西怎么收走。后臺 GC 的并發(fā)編排見 07-05分配路徑見 07-02堆結(jié)構(gòu)與分代布局的背景見 07-01。二、計(jì)劃階段Plan Phase2.1 清掃前的決策GC 在執(zhí)行任何清掃動作之前必須先制定計(jì)劃。這個(gè)計(jì)劃決定了哪些代需要清掃、哪些代需要壓縮、LOH 是否需要特殊處理、是否啟用并行清掃。// gc.h - GCPlan 結(jié)構(gòu)體簡化示意不含全部字段 struct GCPlan { bool compact_gen2; // Gen 2 是否需要壓縮 bool compact_loh; // LOH 是否需要壓縮 int sweep_gen0_segments; // Gen 0 需要清掃的段數(shù) int sweep_gen1_segments; // Gen 1 需要清掃的段數(shù) int sweep_gen2_segments; // Gen 2 需要清掃的段數(shù) bool concurrent_sweep; // 是否并發(fā)清掃后臺 GC 時(shí) bool parallel_sweep; // 是否并行清掃多核時(shí) float fragmentation_ratio_gen2; // Gen 2 碎片率 float fragmentation_ratio_loh; // LOH 碎片率 };計(jì)劃階段的核心輸入是碎片率。碎片率定義為碎片率 1.0 - (最大連續(xù)空閑塊大小 / 總空閑內(nèi)存)換句話說碎片率衡量的是空閑內(nèi)存被分散到了多小的塊里。碎片率為 0 表示所有空閑內(nèi)存連成一塊碎片率為 1 表示每個(gè)空閑塊都只有 1 字節(jié)極端情況。2.2 壓縮觸發(fā)條件壓縮不是每次 GC 都做的——它只在碎片率超過閾值時(shí)才觸發(fā)。.NET Core GC 的默認(rèn)閾值因代而異代壓縮觸發(fā)閾值原因Gen 0不壓縮Gen 0 每次 GC 都重建天然無碎片Gen 1不壓縮Gen 1 是 Gen 0 的緩沖區(qū)本身不獨(dú)立管理Gen 2~50%大堆碎片累積快壓縮收益高LOH~70%手動LOH 不使用 bump pointer碎片率天然較低注意 Gen 0 和 Gen 1從不壓縮。這是因?yàn)?Gen 0 在每次 GC 時(shí)都會重建——所有存活對象晉升到 Gen 1Gen 0 的段被完全清空并重新使用。這種全量晉升 段復(fù)用的機(jī)制天然消除了 Gen 0 的碎片不需要壓縮。Gen 1 也不壓縮因?yàn)樗皇且粋€(gè)獨(dú)立的內(nèi)存區(qū)域——它和 Gen 2 共享同一組段。對 Gen 2 的壓縮同時(shí)就是對 Gen 1 的壓縮。2.3 計(jì)劃決策的時(shí)序標(biāo)記階段完成 │ ▼ 統(tǒng)計(jì)各代碎片率 │ ├─ Gen 2 碎片率 50%? │ └─ Yes → compact_gen2 true │ ├─ LOH 手動觸發(fā)壓縮? │ └─ Yes → compact_loh true │ ├─ 并發(fā) GC 且 Gen 2 需要清掃? │ └─ Yes → concurrent_sweep true │ └─ CPU 核數(shù) 1 且需要清掃? └─ Yes → parallel_sweep true計(jì)劃階段本身非??焱ǔV恍鑾装傥⒚?。它的輸出GCPlan會被傳遞給清掃階段和壓縮階段指導(dǎo)后續(xù)的所有操作。三、清掃階段Sweep Phase3.1 清掃的基本原理清掃是 GC 回收階段的第一步。它的任務(wù)很簡單遍歷段中的所有對象把死亡對象的內(nèi)存標(biāo)記為可用。但實(shí)現(xiàn)起來并不簡單。清掃需要處理以下問題對象遍歷如何高效地遍歷段中的所有對象死亡檢測如何判斷一個(gè)對象是否死亡空閑管理如何管理回收后的空閑內(nèi)存3.1.1 對象遍歷清掃遍歷段的方式與標(biāo)記遍歷對象圖的方式不同。標(biāo)記是從根出發(fā)沿著引用字段下鉆而清掃是順序遍歷段中的每個(gè)對象按對象大小步進(jìn)。// SweepSegment 核心邏輯簡化示意 void SweepSegment(heap_segment* seg) { uint8_t* current seg-start; uint8_t* end seg-allocated; while (current end) { Object* obj (Object*)current; // 檢查對象是否被標(biāo)記 if (!obj-IsMarked()) { // 死亡對象回收其內(nèi)存 size_t size obj-GetSize(); AddToFreeList(current, size); } else { // 存活對象清除標(biāo)記位準(zhǔn)備下一輪 obj-ClearMark(); } // 按對象大小步進(jìn)到下一個(gè)對象 current obj-GetSize(); } }這個(gè)遍歷是順序的對內(nèi)存的訪問模式非常友好——CPU 預(yù)取器可以很好地工作緩存命中率極高。這也是為什么清掃階段通常只占 GC 暫停時(shí)間的 10% 左右。3.1.2 死亡檢測死亡檢測通過檢查對象的標(biāo)記位mark bit實(shí)現(xiàn)。標(biāo)記階段會為每個(gè)存活對象設(shè)置標(biāo)記位清掃階段只需檢查這個(gè)位標(biāo)記位為 1存活對象清除標(biāo)記位繼續(xù)下一個(gè)標(biāo)記位為 0死亡對象回收內(nèi)存標(biāo)記位通常存儲在對象頭的某個(gè)比特位中訪問速度極快一條位操作指令。3.1.3 空閑管理回收后的空閑內(nèi)存需要被管理以便后續(xù)分配能夠快速找到可用空間。.NET Core GC 使用按大小分類的空閑列表size-class free list空閑列表結(jié)構(gòu) ┌─────────────────────────────────────────────────┐ │ FreeList[0] (8-15 字節(jié)) ──? [塊A] ──? [塊B] │ │ FreeList[1] (16-31 字節(jié)) ──? [塊C] ──? NULL │ │ FreeList[2] (32-63 字節(jié)) ──? [塊D] │ │ ... │ │ FreeList[N] (8KB) ──? [塊E] ──? [塊F] │ └─────────────────────────────────────────────────┘空閑列表按大小分類的好處是分配時(shí)可以根據(jù)請求大小直接定位到對應(yīng)的鏈表避免全表搜索。這與 slab 分配器的思想類似——將相近大小的空閑塊歸為一類每類維護(hù)一個(gè)獨(dú)立鏈表。3.2 清掃的零分配保證清掃階段有一個(gè)重要的設(shè)計(jì)原則不分配任何新對象。所有需要的臨時(shí)數(shù)據(jù)結(jié)構(gòu)空閑鏈表節(jié)點(diǎn)等都從已回收的對象本身借用內(nèi)存。這是經(jīng)典的intrusive list侵入式鏈表技術(shù)被回收的對象內(nèi)存直接作為鏈表節(jié)點(diǎn)使用不需要額外分配內(nèi)存來維護(hù)空閑列表。具體來說死亡對象的第一個(gè)字段原本存儲方法表指針之后的位置被覆寫為下一個(gè)空閑塊的指針。死亡對象回收前的內(nèi)存布局 ┌────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 同步塊 (8B) │ 字段數(shù)據(jù)... │ └────────────────────────────────────────────┘ │ ▼ 回收后方法表指針之后的內(nèi)存被覆寫 ┌────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 空閑鏈表指針 ?────────────┘ │ (保持不變GC 不再需要) │ └────────────────────────────────────────────┘這種設(shè)計(jì)的優(yōu)勢零額外內(nèi)存不需要為空閑鏈表分配任何額外內(nèi)存。零額外分配不需要在清掃過程中調(diào)用malloc或new。零額外開銷空閑鏈表的插入操作只是修改一個(gè)指針。不清零被回收的對象不需要清零因?yàn)樗膬?nèi)存即將被重新分配使用。3.3 并發(fā)清掃在后臺 GCBackground GC模式下清掃可以與應(yīng)用線程并發(fā)執(zhí)行。這是 .NET Core 3.0 的重要優(yōu)化時(shí)間線示意 應(yīng)用線程: [Alloc][Alloc][Alloc][Alloc][Alloc][Alloc]... │ │ GC線程: ──[標(biāo)記 Gen2]──[清掃 Gen2]──────[壓縮 Gen2]── │ │ │ │ ├─ 并發(fā)清掃應(yīng)用線程繼續(xù)分配 │ └─ 壓縮時(shí)需要 STW并發(fā)清掃的關(guān)鍵技術(shù)是標(biāo)記-清掃并發(fā)標(biāo)記階段在后臺線程中并行執(zhí)行清掃階段在標(biāo)記完成后立即開始不需要等待應(yīng)用線程全部掛起。只有壓縮階段需要 STWStop-The-World。并發(fā)清掃的實(shí)現(xiàn)依賴于以下機(jī)制標(biāo)記位的原子操作標(biāo)記階段設(shè)置標(biāo)記位使用原子操作清掃階段讀取標(biāo)記位不需要加鎖。段級鎖清掃器獲取段的鎖后其他線程不能修改該段的內(nèi)容。段級鎖的粒度比全局鎖小得多減少了競爭??ㄆ硌a(bǔ)償并發(fā)期間應(yīng)用線程可能創(chuàng)建新的引用這些引用通過卡片表記錄清掃完成后由 GC 進(jìn)行補(bǔ)償掃描。3.4 并行清掃在多核機(jī)器上清掃可以并行化。不同清掃器線程負(fù)責(zé)不同的段互不干擾段 0 ──? 清掃器線程 0 段 1 ──? 清掃器線程 1 段 2 ──? 清掃器線程 2 段 3 ──? 清掃器線程 3并行清掃的加速比接近線性——4 核機(jī)器上清掃 4 個(gè)段的耗時(shí)約等于清掃 1 個(gè)段的 4 倍。但并行清掃也有開銷任務(wù)分發(fā)需要將段分配給清掃器線程這本身有同步開銷??臻e列表合并各線程回收的空閑塊需要合并到全局空閑列表中。緩存競爭多個(gè)線程同時(shí)寫入空閑列表可能導(dǎo)致緩存行失效。因此并行清掃在段數(shù)較多時(shí)收益明顯段數(shù)較少時(shí)可能得不償失。.NET Core GC 會根據(jù)段數(shù)和 CPU 核數(shù)自動決定是否啟用并行清掃。四、壓縮階段Compact Phase4.1 為什么需要壓縮清掃雖然回收了死亡對象的內(nèi)存但它留下的空閑塊是分散的。如果死亡對象和存活對象交替出現(xiàn)空閑塊也會交替出現(xiàn)清掃前的段布局 ┌──────┬────────┬──────┬────────┬──────┬────────┬──────┐ │ 存活 │ 死亡 │ 存活 │ 死亡 │ 存活 │ 死亡 │ 存活 │ │ ObjA │ ObjX │ ObjB │ ObjY │ ObjC │ ObjZ │ ObjD │ └──────┴────────┴──────┴────────┴──────┴────────┴──────┘ 空閑塊: [ObjX] [ObjY] [ObjZ] 分散在存活對象之間 清掃后未壓縮 ┌──────┬────────┬──────┬────────┬──────┬────────┬──────┬──────┐ │ 存活 │ 死亡 │ 存活 │ 死亡 │ 存活 │ 死亡 │ 存活 │ 空閑 │ │ ObjA │ ObjX │ ObjB │ ObjY │ ObjC │ ObjZ │ ObjD │ │ └──────┴────────┴──────┴────────┴──────┴────────┴──────┴──────┘ 空閑塊分散在 ObjA/ObjB/ObjC/ObjD 之間 → 碎片化 壓縮后 ┌──────┬──────┬──────┬──────┬──────────────────────────────┐ │ 存活 │ 存活 │ 存活 │ 存活 │ 連續(xù)空閑空間 │ │ ObjA │ ObjB │ ObjC │ ObjD │ (可分配區(qū)域) │ └──────┴──────┴──────┴──────┴──────────────────────────────┘ 所有存活對象移到段開頭空閑空間集中在段尾 → 無碎片壓縮的核心價(jià)值是將分散的空閑塊合并為連續(xù)的可用空間。沒有壓縮碎片會逐步累積最終導(dǎo)致即使總空閑內(nèi)存足夠也無法分配大塊對象因?yàn)檎也坏阶銐虼蟮倪B續(xù)空間。4.2 壓縮的三個(gè)步驟壓縮是 GC 中最復(fù)雜的操作涉及三個(gè)緊密耦合的步驟步驟 1計(jì)算新地址// ComputeNewAddresses簡化示意 void ComputeNewAddresses(int generation) { uint8_t* write_ptr segment-start; // 寫入指針從段頭開始 for (uint8_t* current segment-start; current segment-allocated; current obj-GetSize()) { Object* obj (Object*)current; if (obj-IsMarked()) { // 存活對象記錄新地址 obj-SetNewAddress(write_ptr); write_ptr obj-GetSize(); } // 死亡對象跳過不分配新地址 } segment-allocated write_ptr; // 更新段的分配上限 }這一步是純讀取 順序?qū)懭雽?nèi)存的訪問模式非常友好。每個(gè)存活對象只被訪問一次按順序從段頭掃到段尾。關(guān)鍵細(xì)節(jié)新地址單調(diào)遞增存活對象按原順序排列新地址嚴(yán)格遞增。這意味著壓縮不會改變對象的相對順序有利于緩存局部性。死亡對象被跳過死亡對象不占用新地址空間相當(dāng)于在計(jì)算新地址的同時(shí)完成了收縮。對象大小不變壓縮不改變對象大小只改變對象的起始地址。步驟 2修復(fù)引用Fix References// FixReferences簡化示意 void FixReferences(int generation) { // 修復(fù)棧上的引用 for (Thread* thread : suspended_threads) { for (RefLocation ref : thread-stack_references) { if (ref.target segment_start ref.target segment_end) { *ref.location ref.target-GetNewAddress(); } } } // 修復(fù)堆上的引用存活對象中的引用字段 for (uint8_t* obj segment-start; obj segment-allocated; ) { if (obj-IsMarked()) { obj-FixReferences(); // 對象內(nèi)部的引用字段全部更新 obj obj-GetSize(); } } // 修復(fù)靜態(tài)字段 for (StaticRef ref : static_references) { if (ref.target segment_start ref.target segment_end) { *ref.location ref.target-GetNewAddress(); } } // 修復(fù)句柄表 for (HandleEntry entry : handle_table) { if (entry.target segment_start entry.target segment_end) { entry.target entry.target-GetNewAddress(); } } }引用修復(fù)是壓縮中最復(fù)雜、最耗時(shí)的部分。需要修復(fù)的引用來源包括棧引用各線程棧幀中指向壓縮段的對象引用。堆引用存活對象內(nèi)部的引用字段指向同一段或其他段中的對象。靜態(tài)字段類靜態(tài)變量中指向壓縮段的引用。句柄表GCHandle 中指向壓縮段的引用。GC 內(nèi)部結(jié)構(gòu)如卡片表、根表等。引用修復(fù)的關(guān)鍵約束必須在復(fù)制之前完成。因?yàn)閺?fù)制會移動對象如果先復(fù)制再修復(fù)引用修復(fù)時(shí)找不到舊地址。步驟 3復(fù)制對象數(shù)據(jù)// CopyObjects簡化示意 void CopyObjects(int generation) { for (uint8_t* current segment-start; current segment-old_allocated; current obj-GetSize()) { Object* obj (Object*)current; if (obj-IsMarked()) { uint8_t* new_addr obj-GetNewAddress(); if (current ! new_addr) { // 對象需要移動復(fù)制數(shù)據(jù) size_t size obj-GetSize(); MemMove(new_addr, current, size); } } } }復(fù)制階段使用MemMove批量移動對象數(shù)據(jù)。由于對象是按順序處理的且新地址也是順序遞增的MemMove的調(diào)用可以很好地利用 CPU 的 DMA 緩存行預(yù)取和 SIMD 指令。關(guān)鍵優(yōu)化原地跳過如果對象的新地址等于舊地址通常發(fā)生在段尾部的存活對象直接跳過不復(fù)制。批量復(fù)制MemMove內(nèi)部使用 SIMD 指令如 AVX2一次復(fù)制 32 或 64 字節(jié)比逐字節(jié)復(fù)制快數(shù)倍。寫合并多個(gè)小對象的復(fù)制可以合并為一次MemMove調(diào)用減少函數(shù)調(diào)用開銷。4.3 壓縮的代價(jià)壓縮涉及大量內(nèi)存復(fù)制和引用更新是 GC 中最耗時(shí)的操作。以下是一個(gè)典型場景的耗時(shí)分解100MB Gen 2 堆碎片率 60%一次全量壓縮 步驟 耗時(shí) 占比 ───────────────────────────────────── 計(jì)算新地址 5-10ms ~15% 修復(fù)引用 20-80ms ~60% ← 最耗時(shí) 復(fù)制對象數(shù)據(jù) 5-10ms ~15% 清理段元數(shù)據(jù) 1-2ms ~5% ───────────────────────────────────── 合計(jì) 30-100ms 100%各步驟的耗時(shí)特征計(jì)算新地址O(n) 順序遍歷緩存友好耗時(shí)與存活對象數(shù)成正比。修復(fù)引用O(n r)n 為存活對象數(shù)r 為引用字段總數(shù)。引用字段越多耗時(shí)越長。棧引用和句柄表引用的修復(fù)需要逐個(gè)處理無法批量優(yōu)化。復(fù)制對象數(shù)據(jù)O(n)但MemMove的常數(shù)極小實(shí)際耗時(shí)通常低于引用修復(fù)。清理段元數(shù)據(jù)O(1) 或 O(段數(shù))耗時(shí)可忽略。4.4 壓縮的并發(fā)化.NET Core GC 在 .NET 6 中引入了并發(fā)壓縮的部分優(yōu)化。核心思想是將壓縮拆分為多個(gè)階段其中計(jì)算新地址和修復(fù)引用可以在后臺線程中并行執(zhí)行只有最后的復(fù)制 最終引用修復(fù)需要 STW。傳統(tǒng)壓縮全 STW [計(jì)算新地址][修復(fù)引用][復(fù)制對象][最終修復(fù)] ← 全部 STW 并發(fā)壓縮.NET 6 [計(jì)算新地址]──[修復(fù)引用] ← 后臺線程并行執(zhí)行 │ ▼ STW 切換點(diǎn) [復(fù)制對象][最終修復(fù)] ← 短 STW這種設(shè)計(jì)的優(yōu)勢是將 STW 時(shí)間從幾十毫秒降低到幾毫秒。后臺階段雖然也消耗 CPU 和內(nèi)存帶寬但不影響應(yīng)用線程只有最后的 STW 階段會暫停應(yīng)用。五、LOH 清掃與壓縮5.1 LOH 為什么不同LOH大對象堆的清掃和壓縮與 SOH小對象堆有本質(zhì)區(qū)別原因在 07-02 中已經(jīng)提到過不使用 bump pointerLOH 使用空閑列表管理天然不存在清掃后合并空閑塊的需求。對象生命周期長LOH 對象通常存活整個(gè)應(yīng)用生命周期碎片率增長緩慢。壓縮代價(jià)極高LOH 對象可能從 85KB 到幾 GB復(fù)制一個(gè)大對象的代價(jià)相當(dāng)于復(fù)制成千上萬個(gè)小對象。5.2 LOH 清掃LOH 的清掃與 SOH 類似也是遍歷死亡對象并回收內(nèi)存。但由于 LOH 對象數(shù)量遠(yuǎn)少于 SOH 對象LOH 清掃的耗時(shí)通??梢院雎圆挥?jì)。// LOH Sweep簡化示意 void SweepLOH() { for (auto entry : loh_free_list) { if (!entry.obj-IsMarked()) { // 死亡 LOH 對象回收 AddToLOHFreeList(entry.obj, entry.size); } else { // 存活 LOH 對象清除標(biāo)記 entry.obj-ClearMark(); } } }5.3 LOH 壓縮LOH 壓縮是一個(gè)手動觸發(fā)的操作默認(rèn)不自動執(zhí)行。這是因?yàn)?LOH 壓縮的代價(jià)極高——它需要移動所有存活的大對象并更新所有指向它們的引用。// 手動觸發(fā) LOH 壓縮 GCSettings.LargeObjectHeapCompactionMode GCLargeObjectHeapCompactionMode.CompactOnce; // 下一次 GC.Collect() 會壓縮 LOH GC.Collect();LOH 壓縮的觸發(fā)條件觸發(fā)方式條件說明手動觸發(fā)GCSettings.LargeObjectHeapCompactionMode CompactOnce下一次 GC.Collect() 觸發(fā)永久模式GCSettings.LargeObjectHeapCompactionMode CompactEveryTime每次 GC.Collect() 都觸發(fā)不推薦自動觸發(fā)無.NET Core 默認(rèn)不自動壓縮 LOHLOH 壓縮的代價(jià)內(nèi)存復(fù)制所有存活 LOH 對象需要被移動復(fù)制量可能達(dá)到數(shù) GB。引用更新所有指向 LOH 對象的引用需要更新包括棧引用、堆引用、靜態(tài)字段、句柄表。STW 時(shí)間長LOH 壓縮通常需要 STW 數(shù)百毫秒到數(shù)秒取決于 LOH 大小和存活對象數(shù)。因此LOH 壓縮應(yīng)該謹(jǐn)慎使用只在確實(shí)存在嚴(yán)重碎片問題且影響分配時(shí)才觸發(fā)。5.4 LOH 碎片問題與緩解LOH 碎片是 .NET 中一個(gè)經(jīng)典問題。當(dāng)頻繁分配和釋放大小不一的 LOH 對象時(shí)空閑列表會逐漸碎片化最終導(dǎo)致即使總空閑內(nèi)存足夠也無法分配新的大對象。緩解 LOH 碎片的策略避免頻繁分配/釋放 LOH 對象使用對象池復(fù)用 LOH 對象??刂茖ο蟠笮”M量使對象大小低于 85,000 字節(jié)閾值使其走 SOH 路徑。定期手動壓縮在低峰期手動觸發(fā) LOH 壓縮。使用ArrayPoolT對于數(shù)組類型的 LOH 對象使用數(shù)組池復(fù)用。六、壓縮的代價(jià)與觸發(fā)策略6.1 壓縮耗時(shí)分解一次完整的 Gen 2 壓縮100MB 堆的耗時(shí)構(gòu)成Full GC 耗時(shí)分解100MB 堆碎片率 60% 標(biāo)記: ████████████████████████ 60% (15-30ms) ← 后臺GC改造目標(biāo) 清掃: ████ 10% (2-5ms) 壓縮: ██████ 30% (10-50ms) ← 最慢但僅在碎片率超閾值時(shí)觸發(fā) ───────────────────────────────────────────────── 合計(jì): 100% (27-85ms)關(guān)鍵觀察標(biāo)記占大頭標(biāo)記是耗時(shí)最長的階段也是后臺 GC 優(yōu)化的主要目標(biāo)。清掃最穩(wěn)定清掃耗時(shí)波動最小因?yàn)樗灰蕾嚧婊顚ο髷?shù)與碎片率無關(guān)。壓縮最可變壓縮耗時(shí)波動最大從幾毫秒低碎片到數(shù)百毫秒高碎片 大堆。6.2 壓縮觸發(fā)策略.NET Core GC 的壓縮觸發(fā)策略可以概括為保守觸發(fā)按需壓縮。是否壓縮的決策邏輯 1. Gen 0? → 不壓縮每次 GC 都重建 2. Gen 1? → 不壓縮與 Gen 2 共享段隨 Gen 2 一起壓縮 3. Gen 2? ├─ 碎片率 50%? → Yes → 壓縮 └─ No → 不壓縮 4. LOH? ├─ 手動觸發(fā)? → Yes → 壓縮 └─ No → 不壓縮即使碎片率很高這個(gè)策略的核心考量壓縮的代價(jià)高壓縮需要移動對象、更新引用耗時(shí)可能遠(yuǎn)超清掃。碎片不是最緊急的問題只要還有足夠大的連續(xù)空閑塊碎片不會導(dǎo)致分配失敗。預(yù)算機(jī)制優(yōu)先通過 budget 機(jī)制控制 GC 頻率比通過壓縮控制碎片更經(jīng)濟(jì)。6.3 壓縮的替代方案在某些場景下壓縮不是最優(yōu)選擇。.NET Core GC 提供了以下替代方案段復(fù)用回收的段不還給操作系統(tǒng)留給下輪復(fù)用。這避免了還了再要的系統(tǒng)調(diào)用開銷??臻e列表優(yōu)化通過按大小分類的空閑列表提高小塊的分配命中率減少對新段的需求。晉升策略調(diào)優(yōu)調(diào)整對象晉升策略讓短命對象更快離開 Gen 0減少 Gen 0 的碎片累積。七、GC 耗時(shí)分解與優(yōu)化方向7.1 一次 Full GC 的完整耗時(shí)一次 Full GC100MB Gen 2 堆碎片率 40%的耗時(shí)構(gòu)成 階段 耗時(shí) 是否 STW 可并發(fā) ───────────────────────────────────────────────── 掛起線程 1-5ms Yes 否 根掃描 1-3ms Yes 否 標(biāo)記 Gen 0/1 5-10ms 部分 是后臺 標(biāo)記 Gen 2 10-20ms 部分 是后臺 清掃 Gen 0 1-2ms 部分 是并發(fā) 清掃 Gen 1/2 2-5ms 部分 是并發(fā) 壓縮 Gen 2 10-30ms Yes 否 修復(fù)引用 5-20ms Yes 部分 恢復(fù)線程 1-3ms Yes 否 ───────────────────────────────────────────────── 總 STW 時(shí)間 20-60ms 總耗時(shí)含并發(fā) 30-100ms7.2 優(yōu)化方向基于耗時(shí)分解GC 優(yōu)化的優(yōu)先級如下減少標(biāo)記耗時(shí)后臺 GC 已經(jīng)將標(biāo)記移到后臺進(jìn)一步優(yōu)化空間有限。減少壓縮觸發(fā)通過 budget 自適應(yīng)和晉升策略降低碎片率減少壓縮觸發(fā)頻率。減少 STW 時(shí)間并發(fā)壓縮.NET 6將大部分壓縮工作移到后臺進(jìn)一步降低 STW 時(shí)間。減少清掃耗時(shí)清掃已經(jīng)很快10%優(yōu)化空間有限。八、清掃和壓縮的時(shí)機(jī)選擇8.1 何時(shí)壓縮.NET Core GC 根據(jù)以下因素決定是否壓縮碎片率空閑空間分散度超過閾值時(shí)觸發(fā)壓縮。Gen 2 默認(rèn)閾值約 50%LOH 默認(rèn)不自動壓縮。最近一次壓縮的時(shí)間間隔避免頻繁壓縮。如果剛做過壓縮即使碎片率略有上升也不會立即再次壓縮。堆大小大堆壓縮的收益更大——碎片浪費(fèi)的絕對空間更多壓縮后釋放的連續(xù)空間也更可觀。內(nèi)存壓力當(dāng)操作系統(tǒng)通知內(nèi)存緊張時(shí)GC 可能降低壓縮閾值更積極地壓縮以釋放空間。8.2 實(shí)際項(xiàng)目中的觀察在實(shí)際項(xiàng)目中大多數(shù) GC 只需要清掃不需要壓縮。壓縮通常只在以下場景觸發(fā)長運(yùn)行服務(wù)運(yùn)行時(shí)間越長碎片累積越多壓縮觸發(fā)越頻繁。對象生命周期差異大如果同時(shí)存在短命對象和長命對象長命對象之間的空洞會逐步累積為碎片。LOH 頻繁分配雖然 LOH 不自動壓縮但 LOH 碎片會影響 Gen 2 的碎片率間接觸發(fā) Gen 2 壓縮。九、清掃的零分配保證9.1 Intrusive List 技術(shù)清掃階段有一個(gè)重要的設(shè)計(jì)原則不分配任何新對象。所有需要的臨時(shí)數(shù)據(jù)空閑鏈表節(jié)點(diǎn)等從已回收的對象本身借用內(nèi)存。這是經(jīng)典的intrusive list侵入式鏈表技術(shù)。具體來說被回收的死亡對象的內(nèi)存被直接用作空閑鏈表的節(jié)點(diǎn)。死亡對象的第一個(gè)字段原本存儲方法表指針之后的位置被覆寫為下一個(gè)空閑塊的指針。這樣空閑鏈表不需要任何額外的內(nèi)存分配——它寄生在已回收的對象內(nèi)存上。死亡對象回收前的內(nèi)存布局 ┌──────────────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 同步塊 (8B) │ 字段數(shù)據(jù) (N 字節(jié)) │ │ ← 對象頭 ← 對象數(shù)據(jù) │ └──────────────────────────────────────────────────────┘ │ ▼ 回收后方法表指針之后的內(nèi)存被覆寫為鏈表指針 ┌──────────────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 空閑鏈表下一個(gè)節(jié)點(diǎn)指針 (8B) │ ... │ │ (GC 不再需要方法表指針) │ └──────────────────────────────────────────────────────┘ │ ▼ 插入空閑鏈表 FreeList[size_class] ──? [此塊] ──? [下一個(gè)空閑塊] ──? ...9.2 零分配的優(yōu)勢這種設(shè)計(jì)的優(yōu)勢是多方面的零額外內(nèi)存不需要為空閑鏈表分配任何額外內(nèi)存??臻e鏈表的節(jié)點(diǎn)就是死亡對象本身。零額外分配不需要在清掃過程中調(diào)用malloc或new避免了在 GC 過程中觸發(fā)遞歸 GC 的風(fēng)險(xiǎn)。零額外開銷空閑鏈表的插入操作只是修改一個(gè)指針時(shí)間復(fù)雜度 O(1)。不清零被回收的對象不需要清零。因?yàn)樗膬?nèi)存即將被重新分配使用清零是浪費(fèi)。緩存友好空閑鏈表節(jié)點(diǎn)與對象數(shù)據(jù)在同一塊內(nèi)存中訪問局部性好。9.3 與 Java GC 的對比Java 的 OpenJDK GC如 G1使用獨(dú)立的空閑列表結(jié)構(gòu)每個(gè)空閑塊需要額外的元數(shù)據(jù)來記錄大小和下一個(gè)節(jié)點(diǎn)。這意味著清掃階段需要為每個(gè)死亡塊分配一個(gè)空閑節(jié)點(diǎn)。.NET 的 intrusive list 技術(shù)避免了這一開銷是零分配保證的關(guān)鍵。十、與 Unity GC 的對比10.1 Unity (SGen) 的清掃與壓縮Unity 的 GC 基于 Mono 的 SGenScavenge-Sweep Garbage Collector與 .NET Core GC 有顯著差異特性.NET Core GCUnity (SGen)清掃方式順序遍歷 intrusive list標(biāo)記-清掃 獨(dú)立空閑列表壓縮策略Gen 2 按需壓縮分代壓縮Scavenge 階段LOH 壓縮手動觸發(fā)無專門 LOH并發(fā)清掃.NET 3.0 支持增量清掃可配置零分配保證清掃階段不分配部分支持壓縮暫停時(shí)間30-100ms100MB10-50ms100MBUnity 的增量清掃是應(yīng)對移動設(shè)備資源限制的特殊設(shè)計(jì)——將清掃拆分成多個(gè)小片段避免單次清掃暫停過長。而 .NET Core GC 更傾向于一次性完成通過后臺 GC 和并發(fā)壓縮來降低單次暫停的代價(jià)。10.2 為什么 Unity 的壓縮暫停更短Unity SGen 的壓縮暫停通常比 .NET Core GC 短原因有三堆更小移動設(shè)備的堆通常只有幾十 MB而 .NET 服務(wù)端應(yīng)用的堆可能達(dá)到數(shù) GB。壓縮耗時(shí)與堆大小成正比。壓縮策略更保守SGen 只在必要時(shí)壓縮小代不壓縮整個(gè)堆。對象更小移動應(yīng)用的對象通常較小復(fù)制代價(jià)更低。但這些差異也反映了平臺約束移動設(shè)備內(nèi)存有限不能像服務(wù)端那樣使用大堆和 LOH。十一、量化數(shù)據(jù)的口徑說明11.1 數(shù)據(jù)性質(zhì)本文給出的所有量化數(shù)據(jù)耗時(shí)、百分比、閾值等均為典型估算或示例量級非實(shí)測常數(shù)。實(shí)際數(shù)值取決于以下因素堆大小100MB 堆與 10GB 堆的耗時(shí)相差兩個(gè)數(shù)量級。碎片率碎片率從 10% 上升到 80%壓縮耗時(shí)可能增加 5-10 倍。CPU 核數(shù)并行清掃和壓縮的加速比接近線性但受內(nèi)存帶寬限制。對象大小分布大對象多的堆壓縮耗時(shí)更長。引用密度引用字段多的對象修復(fù)耗時(shí)更長。11.2 典型場景參考以下數(shù)據(jù)基于 16 核 64GB 服務(wù)端場景的典型估算非實(shí)測場景Gen 0 耗時(shí)Gen 2 耗時(shí)是否壓縮低碎片 (20%)0.5-2ms10-30ms否中碎片 (20-50%)0.5-2ms20-60ms否高碎片 (50%)0.5-2ms50-150ms是LOH 壓縮N/A100-500ms是手動十二、總結(jié)與實(shí)踐建議12.1 核心要點(diǎn)回顧清掃和壓縮是 GC 回收階段的核心它們的設(shè)計(jì)體現(xiàn)了按需觸發(fā)、零分配保證、并發(fā)優(yōu)化的思想清掃回收死亡對象通過 intrusive list 技術(shù)實(shí)現(xiàn)零分配耗時(shí)僅占 GC 的 10%。壓縮消除碎片將分散的空閑塊合并為連續(xù)空間但代價(jià)高30% 的 GC 耗時(shí)。按需觸發(fā)壓縮只在碎片率超過閾值時(shí)觸發(fā)大多數(shù) GC 只需清掃。并發(fā)優(yōu)化后臺 GC 將清掃移到后臺.NET 6 將壓縮的部分工作移到后臺。LOH 特殊處理LOH 不自動壓縮需要手動觸發(fā)代價(jià)極高。12.2 實(shí)踐建議基于對清掃和壓縮的理解以下是針對 C# 開發(fā)者的實(shí)踐建議理解壓縮觸發(fā)條件壓縮只在碎片率超過閾值時(shí)觸發(fā)。如果你的應(yīng)用碎片率始終很低壓縮幾乎不會成為性能瓶頸。謹(jǐn)慎使用 LOH 壓縮GCSettings.LargeObjectHeapCompactionMode CompactOnce是核武器級別的操只在確實(shí)存在嚴(yán)重 LOH 碎片且影響分配時(shí)才使用。關(guān)注 Gen 2 堆大小Gen 2 堆越大壓縮耗時(shí)越長。通過減少長命對象的數(shù)量和大小可以降低壓縮耗時(shí)。避免對象生命周期混疊短命對象和長命對象混在一起會導(dǎo)致碎片快速累積。可以通過分層設(shè)計(jì)將短命和長命對象放在不同的類中來減少碎片。監(jiān)控碎片率使用 PerfView 或 ETW 事件監(jiān)控 GC 碎片率發(fā)現(xiàn)異常上升趨勢。理解零分配保證清掃階段不分配新對象所以不會觸發(fā)遞歸 GC。這意味著清掃的耗時(shí)是確定性的不會因 GC 嵌套而膨脹。12.3 清掃與壓縮的決策樹GC 回收階段 │ ├─ 標(biāo)記階段完成 │ │ │ ├─ Gen 0? │ │ └─ 清掃重建段天然無碎片 │ │ │ ├─ Gen 1? │ │ └─ 清掃隨 Gen 2 一起處理 │ │ │ ├─ Gen 2? │ │ ├─ 碎片率 50%? │ │ │ ├─ Yes → 清掃 → 壓縮 │ │ │ └─ No → 清掃不壓縮 │ │ └─ 并發(fā)清掃? │ │ ├─ Yes → 后臺清掃 │ │ └─ No → STW 清掃 │ │ │ └─ LOH? │ ├─ 手動壓縮? │ │ ├─ Yes → 清掃 → 壓縮STW耗時(shí)高 │ │ └─ No → 清掃不壓縮 │ └─ 碎片率 70%? │ └─ 仍不自動壓縮LOH 壓縮代價(jià)過高十三、深入壓縮的引用修復(fù)細(xì)節(jié)13.1 引用修復(fù)的挑戰(zhàn)引用修復(fù)是壓縮階段最復(fù)雜的部分面臨以下挑戰(zhàn)引用來源多樣棧引用、堆引用、靜態(tài)字段、句柄表、GC 內(nèi)部結(jié)構(gòu)每種來源的修復(fù)方式不同。引用目標(biāo)可能移動被引用的對象可能在同一段需要修復(fù)、在不同段不需要修復(fù)因?yàn)?GC 內(nèi)部結(jié)構(gòu)已經(jīng)處理了跨段引用。修復(fù)順序必須先修復(fù)所有引用再移動對象數(shù)據(jù)。否則修復(fù)時(shí)找不到舊地址。13.2 棧引用的修復(fù)棧引用的修復(fù)是最直接的部分。在壓縮開始前所有應(yīng)用線程被掛起GC 可以安全地掃描每個(gè)線程的棧幀// 棧引用修復(fù)簡化示意 void FixStackReferences(Thread* thread) { for (StackFrame* frame : thread-frames) { for (RefLocation ref : frame-local_variables) { if (ref.is_gc_ref ref.target_in_compressed_segment) { // 更新引用為新地址 *ref.location ref.target-GetNewAddress(); } } for (RefLocation ref : frame-parameters) { if (ref.is_gc_ref ref.target_in_compressed_segment) { *ref.location ref.target-GetNewAddress(); } } } }棧引用修復(fù)的關(guān)鍵點(diǎn)線程必須掛起修復(fù)棧引用時(shí)應(yīng)用線程不能運(yùn)行否則棧內(nèi)容可能被改寫。寄存器也需要修復(fù)除了棧引用掛起時(shí)保存的寄存器快照中的引用也需要修復(fù)。修復(fù)是原地進(jìn)行的直接修改棧幀中的引用值不需要移動棧本身。13.3 堆引用的修復(fù)堆引用的修復(fù)比棧引用復(fù)雜得多。存活對象內(nèi)部的引用字段可能指向同一段中的任何對象也可能指向其他段。只有指向同一段的引用需要修復(fù)// 堆引用修復(fù)簡化示意 void FixHeapReferences(heap_segment* segment) { for (uint8_t* obj segment-start; obj segment-old_allocated; ) { if (obj-IsMarked()) { // 遍歷對象的引用字段 MethodTable* mt obj-GetMethodTable(); for (RefField* field : mt-reference_fields) { uint8_t* ref_addr obj field-offset; Object* target *(Object**)ref_addr; // 只修復(fù)指向同一段的引用 if (target segment-start target segment-end) { *(Object**)ref_addr target-GetNewAddress(); } } obj obj-GetSize(); } else { obj obj-GetSize(); // 死亡對象跳過 } } }堆引用修復(fù)的耗時(shí)取決于引用字段的數(shù)量。一個(gè)包含 10 個(gè)引用字段的對象修復(fù)時(shí)需要檢查 10 次、最多更新 10 次。對于引用字段多的對象如字典、列表修復(fù)耗時(shí)可能顯著高于簡單對象。13.4 句柄表的修復(fù)句柄表的修復(fù)相對簡單因?yàn)榫浔硎且粋€(gè)集中管理的數(shù)據(jù)結(jié)構(gòu)// 句柄表修復(fù)簡化示意 void FixHandleTable(heap_segment* segment) { for (HandleEntry entry : handle_table) { if (entry.target segment-start entry.target segment-end) { entry.target entry.target-GetNewAddress(); } } }句柄表的大小通常遠(yuǎn)小于堆修復(fù)耗時(shí)可以忽略不計(jì)。但需要注意固定句柄pinned handle——固定句柄指向的對象在壓縮時(shí)不能被移動壓縮算法需要跳過這些對象。十四、深入壓縮算法的變體14.1 傳統(tǒng)壓縮移動對象前面描述的壓縮方式是移動對象將存活對象從舊地址復(fù)制到新地址。這是最常見的壓縮方式優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、碎片消除徹底。但移動對象有一個(gè)問題指針不變性。如果外部代碼持有對象的原始指針如通過GCHandle的固定句柄移動對象會導(dǎo)致指針失效。這就是為什么固定句柄指向的對象不能被移動。14.2 間接壓縮更新指針另一種壓縮方式是不移動對象只更新引用。具體來說不移動任何對象數(shù)據(jù)。為每個(gè)對象維護(hù)一個(gè)轉(zhuǎn)發(fā)指針forwarding pointer指向壓縮后的邏輯位置。所有引用指向轉(zhuǎn)發(fā)指針而不是直接指向?qū)ο蟆鹘y(tǒng)壓縮移動對象 舊地址: [ObjA][ObjB][ObjC] → 新地址: [ObjA][ObjB][ObjC][空閑] 引用 → ObjA 引用 → ObjA (新地址) 間接壓縮更新指針 舊地址: [ObjA][ObjB][ObjC] → 邏輯地址: [ObjA][ObjB][ObjC][空閑] 引用 → ObjA 引用 → 轉(zhuǎn)發(fā)指針 → ObjA (邏輯地址)間接壓縮的優(yōu)點(diǎn)是不需要移動對象數(shù)據(jù)缺點(diǎn)是引入了額外的間接尋址每次引用都需要多一次內(nèi)存訪問。這在性能敏感的場景中是不可接受的所以 .NET Core GC 不使用這種方式。14.3 部分壓縮只壓縮熱點(diǎn)段還有一種優(yōu)化思路是只壓縮熱點(diǎn)段即分配最頻繁的段而不是壓縮整個(gè)代。這種部分壓縮的策略是識別熱點(diǎn)段分配最頻繁的段。只壓縮熱點(diǎn)段非熱點(diǎn)段保持原樣。非熱點(diǎn)段中的引用指向熱點(diǎn)段時(shí)通過 GC 內(nèi)部結(jié)構(gòu)進(jìn)行間接尋址。這種方式的優(yōu)點(diǎn)是壓縮范圍小、耗時(shí)短缺點(diǎn)是實(shí)現(xiàn)復(fù)雜、間接尋址有性能開銷。.NET Core GC 目前不使用這種方式但在 .NET 7 中引入了更細(xì)粒度的段級壓縮優(yōu)化。十五、結(jié)語清掃和壓縮是 GC 回收階段的兩個(gè)核心操作它們共同決定了 GC 的內(nèi)存效率和暫停時(shí)間。清掃通過 intrusive list 技術(shù)實(shí)現(xiàn)了零分配耗時(shí)穩(wěn)定且可預(yù)測壓縮通過移動對象和修復(fù)引用消除了碎片但代價(jià)較高。.NET Core GC 的設(shè)計(jì)哲學(xué)是能不清壓就不清壓必須清壓時(shí)盡量并行化。通過碎片率閾值、budget 自適應(yīng)、后臺 GC、并發(fā)壓縮等技術(shù).NET Core GC 在大多數(shù)場景下將壓縮的 STW 時(shí)間控制在幾毫秒到幾十毫秒之間。理解清掃和壓縮的機(jī)制有助于開發(fā)者寫出更友好的對象生命周期模式——減少碎片累積、降低壓縮觸發(fā)頻率、避免 LOH 碎片問題。在下一章中我們將深入后臺 GC 的實(shí)現(xiàn)07-05看看 .NET Core GC 如何將清掃和壓縮的耗時(shí)進(jìn)一步攤薄到應(yīng)用線程的分配間隙中。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
草伊人高潮喷水超碰| 亚洲一级特黄大片在线播放91| 麻豆福利视频导航| 嗯嗯啊啊视频在线看| 可以在线观看的黄色网址| 欧美狠狠狠| 人妻少妇三级| 国产极品999| 开心激情婷婷| 大香蕉97久久| 中文字幕乱碼在线| 少妇一线天久久久久久| 久久久久成人蜜桃精品| 96AV久久久| 中文字幕在线观看丝袜| 久久九九网| 亚洲性爱免费电影| 国产精品视频麻豆入口| 国产最火爆久久国产网站网站| 青女偷拍网| 亚洲无限观看| 欧美传媒一区| 我爱搞逼综合网| 欧美成人精品A片免费一区99| 韩国午夜理伦三级好看| 唐山老熟妇露脸啪啪叫| 黄色av片三级三级三级免费看| A片A5445444| 五月天亚洲色图| 色综合1991| 亚洲男人的天堂网| 欧美亚州色的图| 久久中出在线| 色哟哟精品1精品2| 欧美激情内射| 国产精品熟女一区二区三区| 手机午夜电影神马久久| 大香蕉视频一二三区| 日韩性爱小视频| 欧美18老人禁| 国产一级内射无挡观看| 欧美精品99久久久**| 亚洲人妻中文在线视频| 国产 v乱码一区二| 性爱乱伦一区| 综合久久99| 亚洲无码99| 婷婷亚洲色| 免费看日本操逼视频| 国产激情综合五月久久| 五十路熟女工口| 日韩 欧美 国产 麻豆| 天天综合网AV91| 亚洲天天精品| 欧美大片91| 乱抡国产91| 丝袜剧情| 欧美三级不卡| 色老牛| 欧美一区二区三熟女剧情| 国产视频97| 日日操夜夜操天天操免费观看麻豆| 亚洲色图综合| 另类一区| 丰满精品人妻少妇久久字幕| 蜜臀网址在线| 久久国产在线一区二区| 操逼操网| 中文字幕在线观看第二页| 精品乱码久久久久| 老熟女网站| 亚洲欧洲中文日韩女优乱码| 丁香色五月 97干| 东北黄色电影| 激情久久日韩精品中文字幕麻豆| 天天干天天操天天操夜夜操天天操| 97人人夜夜精品视频| 91粉嫩萝控精品福利网站_精品影音先锋国 | 亚洲aw毛茸茸在线| 久久久精品一区二区| 丝袜加勒比| 囯产精品久久久久久久久久梁医生| 视频国产精品未满十八禁止在线观看| 激情综合97| 人妻少妇精品久久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧美黄页在线| 超碰97亚洲区| 国产亚洲精品激情| 人人天天欧洲| 3级毛片一二| 天天射天天操天天干天天吃2018| 91丝袜人妻| 国产精品网站www| 亚洲精品久久久久久| 久久人妻| 日韩婷婷| 亚洲人精品午夜不卡| 日韩性爱一级片| 天天综合色| 嗯嗯啊啊的视频| 粉嫩av平台| 日本天天操| 加勒比少妇AV婷婷六月天超碰超碰| 中文字幕久久婷婷丁香五月天| 久操精品网| 亚洲日韩久久精品一区| 人妻干天天| 91色艳| 日韩91网| AA丁香综合激情| 国产精品97超碰| 日韩人妻一二三区视频| 亚洲大色堂| 91丨九色丨国产丨人妻在线 | 日本黄 R色 成 人网站| 欧美伊人电影| 成 人 影视 一区 二区 三区 四区| 老司机香蕉| 午夜欧美女人操逼| 骚妻少妇精品性色无码四色A V| 国内毛片国产专区二| 日韩一级二级三级免费看完整版国语版 | 欧美综合在线91| 亚洲国产一区二区日韩专区| 一区二区 日韩 欧美 国产 传媒| 无码久久亚洲高清,| 自拍丝袜美腿人妻| 大香蕉黄色一级片免费看| 精品无人区麻豆乱码久久久| 温婉少妇玩3p| 国产精品午夜精品| 六月婷婷激情| 国产高清吃奶免费视频网站| 天天激色| 欧美性生活综合| 欧美性夜| 亚洲限制级在线| 国产av强奸美女| 欧美色图91p| 亚洲精品视频在线| 91无码西班牙视频在线| 丰满精品人妻少妇久久字幕| 日韩免费性爱视频在线观看| 成人五月天丁香激情综合| 精品国产一区二区三区久久久蜜臀 | 91免费看一区二区三区| 中文字幕综合人妻| 激情五月综合网| 青娱乐国产剧情av一区| 老鸭窝在线视频播放| 九九成人| 国产女人高潮嗷嗷嗷叫小说| 亚洲a色| 日本不卡码黄色| 五月婷婷丁香六月丁香| 性天堂| 丁香婷婷激情五月天无毒不卡 | 久久一区二区加油站| 婷婷在线精品| 岛国视频一二三区| 日韩欧美传媒一区国产| 97在线观看免费视频l| 欧日a| 亚洲激情视频| 亚洲欧美校园| 美女黄码视频午夜| 久久久久亚洲一区女同性恋中文字幕| 色婷婷影院| 午夜一区二区三区国产| 嗯嗯啊啊好爽| 玖玖爱影院| 91黑丝操| 日日A∨| 亚洲国产一区二区三区在线| 中国探花熟女| 国产欧美日韩精品中文| 成人三一级一片aaa| 神马麻豆福利院| 国产一区二区三区,在线观看观看| 三级三久久线久久99久目本WW| 成人26uuu| 色欧美在线| 熟女AV一区| 日韩紧密久久| 男人兔费天堂| 九九热九九| 亚洲精品一二区| 亚洲综合999| 欧美亚洲手机在线| 99久草| www久久精品| 91女优在线观看 | 日韩精品一区二区高清| 国产一区二区在线播放| 欧美热图99| 哑洲在线| 久久亚洲日韩国产欧| 91成人在线| 久久久久久久久久久97| 成人影 天天操 亚洲| 欧州色图区| 2020中文字幕| 91夜夜蜜桃臀1区2区3区| 97精品一二区| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 99久久综合| 激情看片网站| 国产在线76页| 中文一区二区婷婷视频| 青青草视频在线观看一区二区| 麻豆天美久久91| 99久热| 99精品久久| 日日干夜夜干| 欧美 青青草| 五月天久久婷婷亚洲| 妇人噜噜| 女上位精品在线| 啊啊啊轻点在线观看| 天天操熟妇| 久久粉色| 亚洲欧洲自拍图片专区满春格| 国产又粗又大硬免费色网视频| 测评在线观看AV| 先锋激情∨在线视频播放| 欧美韩国你懂得在线| 国产高清不卡视频| 久久九九精品一区二区| 97视频网站| 思思视频免费看网站| 亚洲国产欧美另类自拍| 亚洲欧美经典一区二区| 内射白嫩美女| 天堂资源站| 亚洲九九视频| 国产欧美在线观看免费观看| 色色香蕉| 天天干美少妇一区| 成人热久久精品| nuu12国产麻豆精品| 综合久久9| 2017人人操,人人摸| 久久美女福利是上海美女| 骚逼高潮久久精品| 试看福利| 91人人| 少妇人妻好深太紧了vr91| 可以看的av| 97bbn| 好涩综合| 国产大学生口爆吞精合集| 激情丁香婷婷| 久久久99999久网站| 麻豆尤物视频网| 日本丝袜人妻内射| 观看视频图片一区二区三区| 这里只有精品97| 中文字幕国产| 欧插网站| 久久东京热成人| 啪啪视频亚洲第一| 亚洲男人天堂av| 久久精品店| 婷婷情色综合网| 亚洲 欧美 综合 91| 亚洲欧洲激情卡通另类文学四射小说网站| 欧美精品自慰系列寂寞少妇 | 精品欧美老熟女一二区| 五月天婷婷激情| 熟女一区二区三区四区| 人人潮人人摸| 大香蕉99热| 九九九九精| 国模精品娜娜一二三区 | 三级三级三级a级全黄三| 亚洲精品久久久久久久久豆丁网| 久九九九九九九九热| 国产亚洲精品美女久久久| 国内91熟女人妻丝袜天天精品视频在线 | 欧美亚洲厕所精品偷拍91| 啊啊啊啊啊在线| 在线99热| 欧美激情 亚洲色图| 中文久久爆乳| 997色在线| 国产黄色 A 片免费看| 国产精品网站www| 久久久久九九九九| 国产AV天美| 亚洲欧美国产va在线播放频| 打av高清| 国产AV激情无码久久无码| 青青草大香蕉在线视频| 福利操逼| 激情内射| 女优免费一区二区永久| 极品另类| 中文字幕免费观看| 91天堂色男人的天堂| 欧美天天综合站| 九9热伊人| 一本久道在线综合视频| 精品中文一区二区| 男人的天堂一区三区| 久久久成人免费av电影| 色情五月丁香| 成人久久久| 国产人妻精品久久久一区二区三区| 国产精品视频在线观看| 国产乱婷婷精品二区三区| 国产精品亚洲色婷婷久久久| 国产精品亚洲日韩骚欢乐谷最新地址发布页huanieguty性屋娱乐妖精视频 | 日韩中文字幕熟妇人妻 | 国产怡红院| 大二网站亚洲| 午夜AV污污污| 67194国产| 亚洲欧美首页| 中文字幕精品乱码| 天天日天天色| 91香蕉视频在线观看免费| 伊人991| 91黑人无码激情在线| 天天射日日干| 天天内射| 超碰激情808| 午夜视频好爽啊| 丝袜加勒比| 亚洲熟女乱色| 欧美人妻一区| 欧美人与动性人交a| 情侣操 逼视频99| 91九九| 久插综合| 欧美性猛交美女自慰91| 国产69精品久久久久99尤物| 蜜乳AV免费观看| 一级免费精品| 亚洲视频,小说| 91呆哥人妻| 国产精品午夜福利亚洲综合网| 91精品婷婷国产综合久久| 欧美综合骚| 秋霞曰韩R级| 欧美精品成人一区二区在线观看| 亚洲综合另类色图| 国产天天看| 中亚精品极乱| a在线观看| 天天弄天天操| 夜草网站| 永久免费观看的毛片的网站| 亚洲欧美内射| 91麻豆天美国产欧美高潮| 亚洲欧洲无码97久久精品| 综合久| 免费观看国产小粉嫩喷水精品午| 国产一区二区二区按摩精品啪视频| 呻吟 欧美 日本 中出| 人妻一区久久二区三区色播| 欧美天堂日韩三级国产传媒| 婷婷色香| 天堂日本亚洲欧美| 欧洲综合视频| 久久97资源 网| 精品久久青青草| www.91色| 五月天伊人| 91干熟女| 天天日天天干天天整| 九九九精品一区二区无码| 天美av在线观看| 丁香五月天啪啪| 色色色色网站| 久久小视频| 色色色综合网| 91亚州日韩高清| 丁香六月啪| 国产热RE99久久6国产精品首| 2021久久国产综合精品青草| 婷婷午夜成人色中色| 人人操人人插人人摸人人干| 成人七区| 日韩性爱再线视频| 六月丁香啪啪啪| 九九热免费视频| 一区二区三区四区色图| 91蜜臀熟女| 毛片视频白嫩| 四虎视频在线观看| 偷拍色图| 91情色在线| 欧美亚洲特P| 色欧美亚洲| 日日夜夜摸| 精品蜜乳AV免费观看| 日韩欧无码一区二区三区免费不卡| 亚洲精品99999| 亚洲精品国语在线播放| 国产对白刺激视频| 欧美啪啪女女| 男人的天堂2018.| 欧美亚洲美少妇一区二区| 色麻豆AV| 91欧美在线| 翔田千里无码中出中文字幕| 日韩免费性爱视频在线观看| 精品妇女一区二区三区| 天天看高清麻豆| 九99久久| 日韩免费在线观看不卡| 脫衣舞一区二区三区| 熟女乱伦二区| 亚洲色图20p| 97天天插| 亚洲日韩视频二区| 久/久精品99看9| 第二页中文字幕| 欧美日本一区二区a人| 99ri精品| 欧美 熟女 日韩| 日产精品久久久一区二区| 97色碰| 五月婷网站| 国产精品一二三区福利| 欧美亚州综合图片| 青青草中文字幕| 日本色色色视频| 色爽爽文学| 精品人妻伦一区二区三区久久| 易易A毛视频| 国产 日韩 欧美高清| 久久精品国产精品亚洲艾通辽熟妇| 99re69| 天天射日日干| 久久9视频| ai欧美亚洲小说| 超碰在线一区| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 曰韩av中文字幕专区| 歐美一級亂黃99在綫精品| 色原狠狠天天天| 小视频国产| 久久精品免费| 亚洲欧美另类图片| 高清无码国产亚洲| 91色综合色| 亚洲男人久久综合天堂| 国色天香av| 一区二区三区麻豆| 久久精品性| 国产丝袜高跟美女av免费观看| a男人的天堂久久一级A毛片| 久久国产精品一级二级三级| 欧美亚洲特P| 激情啪啪拍91| 人妻熟妇一区二区三区| www.av在线观看| 日韩亚洲中文字幕在线| 10000部十八禁看电影| 人妻精品视频一区二区三区| 欧美性爱一内片一区二区三区| 国产精品一区二区三| 婷婷五月激情综合| 日韩AV噜噜噜一区二区三区四区| 操屄不卡视频| 日本五区不卡| 妺妺跟我一起洗澡没忍住| 久久精品高清无码一区| aaaa少妇高潮大片| 夜夜操夜夜高潮夜夜爽国产精品区| 国产精品久久99日日| 日本新免费二区三区| 欧美性爱免费短视频| 欧美日本天堂| 99性爱在线观看| 欧洲一区二区三区四区在线观看| 国产男女无套视频免费观看| 91在线观看,天天综合| 婷婷色色五月天| 亚洲天堂综合AV| 欧美色道啊| 国产丝袜欧美在线视频| 欧美少妇性乱| 欧美性爱91| 久久神马影院| 精品无码久久久| 久久少妇人妻| 欧美 亚洲 偷拍自拍| 亚州色图欧美色图| 99青草| 中国AV美女| 亚洲免费97免费| 亚洲黄色网址视频| 超碰久超碰久| 另类亚洲图色| 熟女视频久久| 17c嫩草51久久91嫩草| 97视频在| 国产丝袜视频| 欧美日韩国产黄色片| 美女午夜福利免费视频| 超碰97极品9| 91人人看| 乱老女人一区二区视频| 成人免费性爱视视| 另类老少妇| 日韩97视频!在线| 天天干人人干天天日97| 91爱| 日本免费一区二区不卡| 精品视频日日夜夜| 中文字幕精品资源在线| 狠狠婷婷亚洲中文综合久久| 67914在线兔费成人视频| 国产人伦精品一区二区三区 | 天天日天天色| 久久精品中文字幕观看| 美女诱惑一区| 久欲AV| 78p欧美| 成功精品影院| 99久久e免费热视| 欧美91精品国产自产| 青青草国产一区二区三区| 亚洲AV资源| 九九热在线精品视频| 色呦呦呦在线观看视频| 老熟女乱伦片| 成年无码动漫av片无尽在线| 日韩人妻无码不卡网站| 欧美高清在线| 久久九操在线观看| 九九国产热| 色女99一级片在线观看| 中文字幕二区日韩天堂| 亚洲综合婷婷| 中文字幕 国产 精品| 亚洲 日本 国产 综合| 亚洲av青草久久一区二区| www.人人摸在线视频| 亚洲。天堂。日本在线观看| 亚洲精品97中文字幕| 色色99| 亚洲中文字幕乱码无码一区二区| 天天日少妇逼AV| 欧日韩一二三f区| 欧洲小说色图视频另类| 亚州春色| 77国产精品| 婷婷五月天无码 | 夜夜高潮夜夜爽高清视频一 | 亚洲熟久久| 九九自拍伦理| 国产一区二区三区,在线观看观看| 超碰97玖玖爱| 一区二区蜜臀| 国产乱码久久久久久| 99精品久久久久久| 国产丝袜高跟美女av免费观看| 啊啊啊不要嗯嗯在线观看| 九九热精彩视频| 午夜精品久久999热蜜桃介男人用| 人妻少妇色综合| 亚洲精品1区| 精品久久9| 人妻无码一区二区三区久久99| 丝袜狂射91| 欧美96交| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 国偷自 一区二区| 日韩欧美天堂| 夜色综合| 蜜乳av一区二区| 在免费jIzzjIzz在线视频| 婷婷五月天丁香花| 久久久久9久久久久| 观看视频图片一区二区三区| 97热视频在线观看| 麻豆AV一区二区天美传媒| 女生91网站| 少妇高潮流水av免费| 51一区二区三区| 久射吧| 天久久久噜噜噜久久国产精品爽爽| 国产色图乱伦| 日人妻视频91| 伊人综合色网| 五月天加勒比啪| 一本色道久久综合精品婷婷| 黑人美精品 A片| 97综合在线| 殴美日韩m| 色偷偷综合91久久噜噜| 极品色| 八人操人人摸人人看| 天天色粽合合合合合合合| 极品内射| 青青草一区二区高清无码视频 | 少妇人妻无码| 人妻熟女一区二区三区视频| 午夜国产乱伦视频| 激情丁香五月| 亭亭在线资源| a片在线播放| 中文字幕精品资源在线| 久草资源在线视频官方总站日韩丝袜美腿| 91美女高潮| 大屁股人妻女教师撅着屁股| 丁香九月激情| 老司机午夜福利视频一区二区| 九九AV| 偷窥自拍A片| 亚洲蜜臀懂色| 亚洲欧美日韩中文播放| 欧美精品999| 校园春色综合香蕉| 91AV入口| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 国产Aα| 久久精品免费| AV中亚| 色噜噜狠狠色综合日日| 中国熟女91| 国产又色又粗又黄又爽| 殴美牲| 色九久| 久久激情五月| 大香蕉日韩欧美| 操逼啊啊啊91| 新视频sss国产| 亚洲一区日韩精品| 中文字幕视频2区| 九九九九精品| 91精品国产综合久久久蜜臀| 欧美人妻制服| 久热超碰| 神马麻豆福利院| 大香蕉啪啪啪| 97在线免费视频观看| 大香蕉伊人久久| 亚洲精品 欧美97色色| 婷婷视频在线免费观看| 欧美性视频二区三区| 激情综合二| 麻豆a'v电影| 人人妻人人狠人人| 97 国产精品| 十八禁啪啦拍视频无遮挡| 亚洲欧美视| 国产尹人在线视频免费| 国产九九九九九九| 日韩不卡a级视频专区| 激情久久日韩精品中文字幕麻豆| 每日更新AV| 蜜区区视频79| 久久久蜜桃一区二区三区| 亚洲一区二区三区婷婷| 精品四五区| 人人操人人干xxx| 国产肏屁眼视频| 成人乱人伦一区二区| 亚洲无限观看| 大香蕉乱伦视频网| 丝袜 中出 制服 人妻 美腿 中文字幕| 黄色AV影视| 91精品国产91久久福利| 亚洲精品一区二区免费在线观看| 欧美成人黄网色网站| 97在线观| 97色论| 麻豆啪啪啪视频| 啊啊啊免费视频| 美女啪欧美一区| 亚洲黄网在哪免费看| 超碰美女97| 爽爽爽免费视频| 最新日产中文在线麻豆| 校园春色五月天| 亚洲自拍一区夜夜操| 男女真人网18| 国产女大学生AV| 91美女視頻| 校园春色 男人天堂 | 9999伦理视频| 欧美成人一区二区三区在线播放| 1240青青草一区二区三区视频天爱| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲国产精品乱码在线观看| 自拍偷拍亚洲熟女妇人精品| 久操免费电影| juliaann丝袜大战黑鬼| 婷婷五月天色色| 无码137片内射在线影院| 另类欧美| 超碰99热中文字幕| 激情开心五月天| 四虎国产精品永久地址入口| 97日韩| 日夜尻逼网| 亚洲熟妇熟在线电影视频| 超碰人人色| 亚洲无吗在线视频| 午夜小电影在线插入淫高潮| 久久婷婷一区| 久久一区二区加油站| 97蜜桃综合| 激情综合亚洲| 日韩丝袜二区| 青娱乐亚洲自拍| 日韩成人高清一区二区| 久久粉色| 青青青草原| 欧美91精彩| 日本天堂网| 欧美午夜精品久久久久久3D| 静品嫩模一区二区| aaaa少妇高潮大片| 尤物视频一区| 狠狠色噜噜狠狠狠狠2018| 爱逼综合| 青青草中文字幕| 日韩精品啪啪啪| 国产蜜臀精品一区二区尤物| 成人精品水蜜桃久久久久久久| 婷婷另类小说| 日韩午夜国产| 亚洲视频,小说| 久久伊人网视频一区二区三区| 日本熟妇熟色97一本在线观看| 亚洲人妻av| 婷婷久久网| 天天日天天爽| 亚洲天堂,男人| 久久性爱视频| 亚洲熟妇图片| 蜜臀在线免费观看在线免费观看| 久久大香蕉手机高清| 成年女人一区| 18一区二区三区| 宅男91视频在线播放| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 天天综合欧美| 日韩性爱小视频| 欧美不卡在线一区二区| 国产无码精品高清| 园内精品自拍视频在线播放| 日韩在线一区高清在线| 国产一级不卡在线观看| 91精品无码人妻系列| 九九黄色视频在线观看| 极品极品色影院| 长长久久88视频| 极品丝袜无码| 亚洲中文电影| 另类专区加勒比| 日日干日日摸| 欧美天天性| 国产操逼视频在线观看| 逼逼逼逼操操操操操操操操操午夜剧场| 日韩欧美aⅴ综合网站发布| 青草青草久热| 嗯嗯啊啊视频在线看| 超碰 另类 欧美| 午夜综合在线| 亚洲高清欧美总合| 强被迫伦姧在线观看无码网站| 免费一级精品啪啪视频| 精品久久人妻成人网| 情色AV电影| 98精品国产乱码久久久久久| 天天性射网| 国产操逼网站亚洲一级黄色| 国产精品久久久久久无码红治院| 大香蕉黄色一区| www.一本大99| 欧美精品不卡一二三四在线91| 欧美资源| 太久视频| 精彩视频日韩| 久操视频在线| 国产精品久久天天干| 69精品久久久久中文字幕| av优播| 精品视频久久区| 91亚洲欧美| 亚洲成人久久一区二区| 95精品在线| 97超碰色中文字幕| 色综合国产在线观看| 色色色色网站| 蜜桃精品视频一区| 美女91在线| 白嫩国模丰满一二三区| 夜夜嗨AV蜜臀av| 综合亚洲网| 激情小说成人日本无码一| 厕所偷拍在线| 欧美情色亚洲| 国产男人又猛又粗又爽| 欧美久久久15P| 欧美加勒比| 在线观看综合精品亚洲| 和协影院中文字幕三区| 伊人天天久久动态图| 成人片在线播放| 欧美色图97| 欧美精品日韩久久久九| 丰满人妻一区二区三区在线| 91制服丝袜| 国产精品久久久久无码AV会牛| 熟女欧美日韩综合婷婷| 精品在线蜜臀| 五月开心网| 秘书高跟黑色丝袜国产91在线| 久久直播国产| 加勒比综合九九99视频在线播放| 夜夜爽夜夜| 小少妇| 天堂亚洲欧美| av资源在线播放天堂| 麻豆a'v电影| 韩国午夜理伦三级好看| 亚洲欧洲色情高清| www亚洲免费| 人人澡人人弄| 亚洲阿v天堂无码z2018| 磁力99AV| 国产啊v在线免费播放| 一牛一区二区三区久久| 日韩av电影成人在线| 好爽,再快点啊哈嗯嗯嗯嗯| 亚洲九九九| 亚洲天堂另类美腿| 百度百度日本操逼| 欧美激情视频一区二区三区不卡| 狠狠婷婷亚洲中文综合久久| 久久久久久久久久久人妻| 欧美国产精品久久九九| 色九九九| 亚洲国产欧美一区二区潘金莲 | 婷婷丁香九月| 2019午夜福利视频| 国产激情在线| 九九九九亚洲| 天堂九九九九九九九九九| 97色色色| 超碰97网址| 91精品女厕偷拍视频| 丝袜亚洲91| 色丁香久久| 熟妇熟女一区二区三区| 欧美日韩免费专区在线| 亚洲精品人妻在线| 青青草华人在线欧美在线| 五月天社区| 91视频精品| 九九国产| 色五月综合网| 国产精品一二三区18| 麻豆一区二区三区精品| 无码抄逼网| 色汉综合| 丝袜美腿射精91| 欧美性爱精品一区二区| 亚洲久久久久| 91超碰碰在线| 防屏蔽在线视频| 欧美一二三级精品在线| 91碰碰| 欧美制服另类丝袜| 国产 日韩 欧美高清| 欧美九九九| 国产精品色哟哟| 人人摸人人叼| 国产精品久久aV| 熟妇高潮二区三区| 亚洲另类久操网| 日韩AV无码中文一区二区| 91亚洲欧洲| 国产AV人人夜夜澡人人爽麻豆| 校园春色制服丝袜中文字亚洲| 国产极品精品美女视频| 青青青在线高清视频在线一二三四区| 久久精品一区| 丁香五月天视频| 欧美aa一级片| 大学生美女口爆| 精久久久| 99操| 91亚洲黑人| 久久久免费一级黄片| a片久久久久久久久久久久 | 国产综合网站在线播放| 亚洲成a人v欧美综合天堂下载| 99999这里都精品| 亚洲丝袜色图| AV中文在线可看| 欧美东京热精品A∨| 日本韩国国产精品一区| 91丝袜在线播放| 久久久久久久久久久精| 狠狠躁天天躁日日躁| 极品白嫩福利在线| 久久99综合| 欧亚乱色熟女一区二区| 国产在线强奸视频| 1769成人国产精品视频| 蜜臀久久99精品久久久久久酒店| 亚洲交换| 青操影院| 中文字幕第23区| 人妻人人澡人人爽人人| 少妇同性| 人人手机欧洲亚洲国产人妻| 爽爽淫人网| 色情婷婷| 婷婷精品视频| 97人人超| 激情五月丁香五月| 欧美日韩中文亚洲v在线综合| 久草视频在线视频在线视频在线观看| 狠狠色噜噜狠狠狠狠2018| 欧美Ⅴ性爱| 女性喷水高潮在线观看| 亚洲欧洲激情卡通另类文学四射小说网站| 校园春色美腿丝袜 | 精品免费视频国产一区| 国产激情视频一区区三区| 超碰97亚洲| 久久超碰日韩精品| 天天看片青娱乐| 色逼综合| 黄色大片视频在线免费看| 91网站18| av网站免费线看| 日韩视频精品在线观看| 先锋影音av先锋一区| 亚洲精品白浆高清久久久久久| 翔田千里爆乳巨臀无码| 一级毛片久久久久久久女人18| 九九视频黄色片| 国产对白刺激视频| 午夜电影在线观看无码专区| 日韩丝袜二区| 久热超碰| 97综合在线观看| 精品97精品97| 欧美色图91p| 人妻喷水| 外站AV在线| 在线观看不卡一区二区三区| 日韩欧美成人性爱在线| 女同性恋久久| 亚洲黑丝在线| 久久九七| 欧美洲精品一级| 亚洲欧美伦综合| 国产精品点击进入在线影院高清| 免费福利视频中文字幕| 久久久麻豆精品| 人人色97| 97一本大道亚洲一区| 在线啊啊啊| 久久久久少妇| 97人人操人人摸| 色色热| 人妻社区男人天堂| 久久激情视频| 久久精品一区二区一8| 国产成年免费大片黄在线观看| 亚洲高清在线| 成人综合视频久久| 熟女露脸激情自拍视频| 97天堂| 亚洲欧美在线观看免费| www.夜夜操| 激情综合av| 日韩精品一区二区人人人| 一级AV性爱| 717影院理论午夜伦八戒| 亚洲熟妇丝袜在线观看| 超碰这里有精品| 男人的天堂 在线一区| 亚洲一卡2卡3卡4卡乱码网站| 污啪啪啪视频| 91路www| 日韩肏逼视频| 亚洲日本韩国在线| 99www.bibizy香蕉资源国产一区二区三区高清| 久久久久久免费电影| 国产家庭乱伦表演| 91丨九色丨熟女高潮| surenchaopeng| 97av在线观看| 日韩黄色一区二区三区| 久久伊人网视频一区二区三区 | 六月丁香婷| 性爱AV天堂| 97日韩欧美| 狠狠色婷婷777| 伊人色综合欧美| 免费A片三p视频| 久久久久久国产精品| 超碰在线1234区| 亚洲色图尤物视频| 欧美综合97www| 超碰超碰超碰超碰的大鸡吧操黑丝袜| 欧美亚洲第一页| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 蜜臀99久久精品久久久久久| 久久国产免费激情视频| 国产无遮挡| 国产h小视频在线观看免费| 日韩午夜啪啪视频| 色九九综合AV| 久操com| 无码人妻精品一区二区三区99不卡| 久久老子无码午夜伦不卡| 超碰欧美在线欧美| 国产人妖的免费的视频| 欧美午夜色妇色鬼| 一级毛片电影免费看| 久久小视频| 大香蕉伊人75| 一起草av| 免费在线视频97| 久99热| 少妇淫妇久久久久久久| 婷婷伊人网| 一区二区无码视频| 91精品黄在线观看| 高潮9999外国| 丁香九月激情啪| 久久精品无码熟妇一区二区三区视频导航| 91社操逼| Aa东京男人的天堂| 中文字幕aⅴ在线视频| 吊色| 色色色色电影网| 九九精品网| 激情深爱五月天| 九九九九久久久久| 精品久一区免费| 国产强奸91| 亚洲色图 图片| 国产真实野战在线视频| 99久在线精品99re8| 婷婷久久综合久| 色香AV| 婷婷激情一区二区三区俺也去| 一区二区免费电影久久| 人妻少妇精品久久久| 亚洲情色中文字幕一区| 国产又长又大又粗的视频| 久久五月视频| 啊啊啊想要| 91高跟美女在线播放| 国产久久av| 欧美亚洲首页| 久久久久久性爱视频| 密乳AV免费观看| 亚洲欧美天| 98一区二区精品| 国产综合在线视频网站| 少妇色综合| www超碰| 天天视频黄| 97超色| 婷婷四五区| 国产日韩欧美亚洲精品95 | 67194国产| 呦呦影院| 中文字幕av一区二区三区人妻少妇| 五月丁香影视| 性爱综合一区二区| 96精品久久久| 免費人妻夜夜爽天天爽爽一区| 中文字幕精品一区二区精| 综合色欧美| 黄资源| 长长久久免费视频| 草草影院最新网址| 国产人妻久久精品一区二区三区| 91啪9色| 97国产成人精品免费视频| 国产精品九九九| 欧美亚洲清纯| 亚洲色图20p| 综合五月婷婷| 久久久久久日韩| 欧美97在线欧| 婷婷久草| 国产老熟女| 五月丁香影视| 秋霞久久亚洲精品成人| 九九九九热| 黄站在线免费观看| 神马午夜久久久| 人人色97| 综合色啪| 久久精品高清AV| 91av熟女人妻| 久久丝袜| 97超碰欧美手机在线| 色诱avtt| 插入综合网| 国产精品一区二区黄片| 欧 美 自 拍 偷 拍| 久久精品国产亚洲AV先锋| 中文字幕第7页| 99国内熟女露脸视频| 天操天操夜操夜月操月年年操| 五月丁香婷婷综合| 亚洲色图日韩精品| 成人性爱av| 欧美色www亚洲国产阿娇要播| 加勒比海人人操超碰在线| 热久久无毒不卡| 校园春色综合香蕉| 超碰 av 女人天堂| 天天干2区3区| 国产精品白虎| 日天天九九天堂666| 欧美色道啊| 国产精品一区二区后入| 欧美乱妇狂野欧美在线视频| 狠狠搞 亚洲91| 久久e6只有精品| 亚洲国产剧情少妇激情| 超碰久久性爱| 国产精品女同| 91亚洲人电影| 天天综合日韩网| 女色视频社区| 99热综合在线| 欧亚乱色熟一区二区三四区| 操人妻少妇中文| 东北黄色电影| 免费的av网| 午夜天堂网| 加勒比综合九九99视频在线播放| 另类亚洲图色| 青青草啪啪网| 97爱b| 国产外初女出血视频| 国产99999久久精品| 国产久久av| 欧美天天综合站| 91九九九吃| 欧美亚洲清纯| 国产精品人妻熟女aⅴ| 91天天综合网,天天综合网| 综合网久久| 亚洲 se图 欧美电影| 不卡码视频| 亚洲色图加勒比| 韩日巨乳美女免费视频在线观看| 午夜综合在线|