日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

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

07-04-源碼-.NET Core GC清掃與壓縮 .NET Core GC 清掃與壓縮篇章07-源碼深度-.NET Core GC |閱讀時間約 45 分鐘一、引言標(biāo)記階段識別了存活對象后GC 進入回收階段——清掃死亡對象、壓縮存活對象。清掃和壓縮是 GC 中內(nèi)存效率的決定性因素清掃決定了多少死亡內(nèi)存被真正釋放壓縮決定了碎片是否累積到影響分配的程度。但清掃和壓縮的代價也不容忽視。一次全堆壓縮可能耗時數(shù)十到數(shù)百毫秒直接反映在應(yīng)用的暫停時間上。所以 .NET Core GC 的核心設(shè)計哲學(xué)是能不清壓就不清壓必須清壓時盡量并行化。這個哲學(xué)貫穿了從計劃決策到清掃實現(xiàn)、從壓縮策略到 LOH 特殊處理的每一個環(huán)節(jié)。在展開之前先把本章的定位說清楚。07-03 標(biāo)記篇已經(jīng)講完了哪些對象活著本章接著講活著的東西怎么擺回去、死的東西怎么收走。后臺 GC 的并發(fā)編排見 07-05分配路徑見 07-02堆結(jié)構(gòu)與分代布局的背景見 07-01。二、計劃階段Plan Phase2.1 清掃前的決策GC 在執(zhí)行任何清掃動作之前必須先制定計劃。這個計劃決定了哪些代需要清掃、哪些代需要壓縮、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 時 bool parallel_sweep; // 是否并行清掃多核時 float fragmentation_ratio_gen2; // Gen 2 碎片率 float fragmentation_ratio_loh; // LOH 碎片率 };計劃階段的核心輸入是碎片率。碎片率定義為碎片率 1.0 - (最大連續(xù)空閑塊大小 / 總空閑內(nèi)存)換句話說碎片率衡量的是空閑內(nèi)存被分散到了多小的塊里。碎片率為 0 表示所有空閑內(nèi)存連成一塊碎片率為 1 表示每個空閑塊都只有 1 字節(jié)極端情況。2.2 壓縮觸發(fā)條件壓縮不是每次 GC 都做的——它只在碎片率超過閾值時才觸發(fā)。.NET Core GC 的默認閾值因代而異代壓縮觸發(fā)閾值原因Gen 0不壓縮Gen 0 每次 GC 都重建天然無碎片Gen 1不壓縮Gen 1 是 Gen 0 的緩沖區(qū)本身不獨立管理Gen 2~50%大堆碎片累積快壓縮收益高LOH~70%手動LOH 不使用 bump pointer碎片率天然較低注意 Gen 0 和 Gen 1從不壓縮。這是因為 Gen 0 在每次 GC 時都會重建——所有存活對象晉升到 Gen 1Gen 0 的段被完全清空并重新使用。這種全量晉升 段復(fù)用的機制天然消除了 Gen 0 的碎片不需要壓縮。Gen 1 也不壓縮因為它不是一個獨立的內(nèi)存區(qū)域——它和 Gen 2 共享同一組段。對 Gen 2 的壓縮同時就是對 Gen 1 的壓縮。2.3 計劃決策的時序標(biāo)記階段完成 │ ▼ 統(tǒng)計各代碎片率 │ ├─ 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計劃階段本身非??焱ǔV恍鑾装傥⒚搿K妮敵鯣CPlan會被傳遞給清掃階段和壓縮階段指導(dǎo)后續(xù)的所有操作。三、清掃階段Sweep Phase3.1 清掃的基本原理清掃是 GC 回收階段的第一步。它的任務(wù)很簡單遍歷段中的所有對象把死亡對象的內(nèi)存標(biāo)記為可用。但實現(xiàn)起來并不簡單。清掃需要處理以下問題對象遍歷如何高效地遍歷段中的所有對象死亡檢測如何判斷一個對象是否死亡空閑管理如何管理回收后的空閑內(nèi)存3.1.1 對象遍歷清掃遍歷段的方式與標(biāo)記遍歷對象圖的方式不同。標(biāo)記是從根出發(fā)沿著引用字段下鉆而清掃是順序遍歷段中的每個對象按對象大小步進。// 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(); } // 按對象大小步進到下一個對象 current obj-GetSize(); } }這個遍歷是順序的對內(nèi)存的訪問模式非常友好——CPU 預(yù)取器可以很好地工作緩存命中率極高。這也是為什么清掃階段通常只占 GC 暫停時間的 10% 左右。3.1.2 死亡檢測死亡檢測通過檢查對象的標(biāo)記位mark bit實現(xiàn)。標(biāo)記階段會為每個存活對象設(shè)置標(biāo)記位清掃階段只需檢查這個位標(biāo)記位為 1存活對象清除標(biāo)記位繼續(xù)下一個標(biāo)記位為 0死亡對象回收內(nèi)存標(biāo)記位通常存儲在對象頭的某個比特位中訪問速度極快一條位操作指令。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] │ └─────────────────────────────────────────────────┘空閑列表按大小分類的好處是分配時可以根據(jù)請求大小直接定位到對應(yīng)的鏈表避免全表搜索。這與 slab 分配器的思想類似——將相近大小的空閑塊歸為一類每類維護一個獨立鏈表。3.2 清掃的零分配保證清掃階段有一個重要的設(shè)計原則不分配任何新對象。所有需要的臨時數(shù)據(jù)結(jié)構(gòu)空閑鏈表節(jié)點等都從已回收的對象本身借用內(nèi)存。這是經(jīng)典的intrusive list侵入式鏈表技術(shù)被回收的對象內(nèi)存直接作為鏈表節(jié)點使用不需要額外分配內(nèi)存來維護空閑列表。具體來說死亡對象的第一個字段原本存儲方法表指針之后的位置被覆寫為下一個空閑塊的指針。死亡對象回收前的內(nèi)存布局 ┌────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 同步塊 (8B) │ 字段數(shù)據(jù)... │ └────────────────────────────────────────────┘ │ ▼ 回收后方法表指針之后的內(nèi)存被覆寫 ┌────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 空閑鏈表指針 ?────────────┘ │ (保持不變GC 不再需要) │ └────────────────────────────────────────────┘這種設(shè)計的優(yōu)勢零額外內(nèi)存不需要為空閑鏈表分配任何額外內(nèi)存。零額外分配不需要在清掃過程中調(diào)用malloc或new。零額外開銷空閑鏈表的插入操作只是修改一個指針。不清零被回收的對象不需要清零因為它的內(nèi)存即將被重新分配使用。3.3 并發(fā)清掃在后臺 GCBackground GC模式下清掃可以與應(yīng)用線程并發(fā)執(zhí)行。這是 .NET Core 3.0 的重要優(yōu)化時間線示意 應(yīng)用線程: [Alloc][Alloc][Alloc][Alloc][Alloc][Alloc]... │ │ GC線程: ──[標(biāo)記 Gen2]──[清掃 Gen2]──────[壓縮 Gen2]── │ │ │ │ ├─ 并發(fā)清掃應(yīng)用線程繼續(xù)分配 │ └─ 壓縮時需要 STW并發(fā)清掃的關(guān)鍵技術(shù)是標(biāo)記-清掃并發(fā)標(biāo)記階段在后臺線程中并行執(zhí)行清掃階段在標(biāo)記完成后立即開始不需要等待應(yīng)用線程全部掛起。只有壓縮階段需要 STWStop-The-World。并發(fā)清掃的實現(xiàn)依賴于以下機制標(biāo)記位的原子操作標(biāo)記階段設(shè)置標(biāo)記位使用原子操作清掃階段讀取標(biāo)記位不需要加鎖。段級鎖清掃器獲取段的鎖后其他線程不能修改該段的內(nèi)容。段級鎖的粒度比全局鎖小得多減少了競爭??ㄆ硌a償并發(fā)期間應(yīng)用線程可能創(chuàng)建新的引用這些引用通過卡片表記錄清掃完成后由 GC 進行補償掃描。3.4 并行清掃在多核機器上清掃可以并行化。不同清掃器線程負責(zé)不同的段互不干擾段 0 ──? 清掃器線程 0 段 1 ──? 清掃器線程 1 段 2 ──? 清掃器線程 2 段 3 ──? 清掃器線程 3并行清掃的加速比接近線性——4 核機器上清掃 4 個段的耗時約等于清掃 1 個段的 4 倍。但并行清掃也有開銷任務(wù)分發(fā)需要將段分配給清掃器線程這本身有同步開銷??臻e列表合并各線程回收的空閑塊需要合并到全局空閑列表中。緩存競爭多個線程同時寫入空閑列表可能導(dǎo)致緩存行失效。因此并行清掃在段數(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ū)域) │ └──────┴──────┴──────┴──────┴──────────────────────────────┘ 所有存活對象移到段開頭空閑空間集中在段尾 → 無碎片壓縮的核心價值是將分散的空閑塊合并為連續(xù)的可用空間。沒有壓縮碎片會逐步累積最終導(dǎo)致即使總空閑內(nèi)存足夠也無法分配大塊對象因為找不到足夠大的連續(xù)空間。4.2 壓縮的三個步驟壓縮是 GC 中最復(fù)雜的操作涉及三個緊密耦合的步驟步驟 1計算新地址// 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)存的訪問模式非常友好。每個存活對象只被訪問一次按順序從段頭掃到段尾。關(guān)鍵細節(jié)新地址單調(diào)遞增存活對象按原順序排列新地址嚴格遞增。這意味著壓縮不會改變對象的相對順序有利于緩存局部性。死亡對象被跳過死亡對象不占用新地址空間相當(dāng)于在計算新地址的同時完成了收縮。對象大小不變壓縮不改變對象大小只改變對象的起始地址。步驟 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ù)雜、最耗時的部分。需要修復(fù)的引用來源包括棧引用各線程棧幀中指向壓縮段的對象引用。堆引用存活對象內(nèi)部的引用字段指向同一段或其他段中的對象。靜態(tài)字段類靜態(tài)變量中指向壓縮段的引用。句柄表GCHandle 中指向壓縮段的引用。GC 內(nèi)部結(jié)構(gòu)如卡片表、根表等。引用修復(fù)的關(guān)鍵約束必須在復(fù)制之前完成。因為復(fù)制會移動對象如果先復(fù)制再修復(fù)引用修復(fù)時找不到舊地址。步驟 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ù)倍。寫合并多個小對象的復(fù)制可以合并為一次MemMove調(diào)用減少函數(shù)調(diào)用開銷。4.3 壓縮的代價壓縮涉及大量內(nèi)存復(fù)制和引用更新是 GC 中最耗時的操作。以下是一個典型場景的耗時分解100MB Gen 2 堆碎片率 60%一次全量壓縮 步驟 耗時 占比 ───────────────────────────────────── 計算新地址 5-10ms ~15% 修復(fù)引用 20-80ms ~60% ← 最耗時 復(fù)制對象數(shù)據(jù) 5-10ms ~15% 清理段元數(shù)據(jù) 1-2ms ~5% ───────────────────────────────────── 合計 30-100ms 100%各步驟的耗時特征計算新地址O(n) 順序遍歷緩存友好耗時與存活對象數(shù)成正比。修復(fù)引用O(n r)n 為存活對象數(shù)r 為引用字段總數(shù)。引用字段越多耗時越長。棧引用和句柄表引用的修復(fù)需要逐個處理無法批量優(yōu)化。復(fù)制對象數(shù)據(jù)O(n)但MemMove的常數(shù)極小實際耗時通常低于引用修復(fù)。清理段元數(shù)據(jù)O(1) 或 O(段數(shù))耗時可忽略。4.4 壓縮的并發(fā)化.NET Core GC 在 .NET 6 中引入了并發(fā)壓縮的部分優(yōu)化。核心思想是將壓縮拆分為多個階段其中計算新地址和修復(fù)引用可以在后臺線程中并行執(zhí)行只有最后的復(fù)制 最終引用修復(fù)需要 STW。傳統(tǒng)壓縮全 STW [計算新地址][修復(fù)引用][復(fù)制對象][最終修復(fù)] ← 全部 STW 并發(fā)壓縮.NET 6 [計算新地址]──[修復(fù)引用] ← 后臺線程并行執(zhí)行 │ ▼ STW 切換點 [復(fù)制對象][最終修復(fù)] ← 短 STW這種設(shè)計的優(yōu)勢是將 STW 時間從幾十毫秒降低到幾毫秒。后臺階段雖然也消耗 CPU 和內(nèi)存帶寬但不影響應(yīng)用線程只有最后的 STW 階段會暫停應(yīng)用。五、LOH 清掃與壓縮5.1 LOH 為什么不同LOH大對象堆的清掃和壓縮與 SOH小對象堆有本質(zhì)區(qū)別原因在 07-02 中已經(jīng)提到過不使用 bump pointerLOH 使用空閑列表管理天然不存在清掃后合并空閑塊的需求。對象生命周期長LOH 對象通常存活整個應(yīng)用生命周期碎片率增長緩慢。壓縮代價極高LOH 對象可能從 85KB 到幾 GB復(fù)制一個大對象的代價相當(dāng)于復(fù)制成千上萬個小對象。5.2 LOH 清掃LOH 的清掃與 SOH 類似也是遍歷死亡對象并回收內(nèi)存。但由于 LOH 對象數(shù)量遠少于 SOH 對象LOH 清掃的耗時通??梢院雎圆挥?。// 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 壓縮是一個手動觸發(fā)的操作默認不自動執(zhí)行。這是因為 LOH 壓縮的代價極高——它需要移動所有存活的大對象并更新所有指向它們的引用。// 手動觸發(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 默認不自動壓縮 LOHLOH 壓縮的代價內(nèi)存復(fù)制所有存活 LOH 對象需要被移動復(fù)制量可能達到數(shù) GB。引用更新所有指向 LOH 對象的引用需要更新包括棧引用、堆引用、靜態(tài)字段、句柄表。STW 時間長LOH 壓縮通常需要 STW 數(shù)百毫秒到數(shù)秒取決于 LOH 大小和存活對象數(shù)。因此LOH 壓縮應(yīng)該謹慎使用只在確實存在嚴重碎片問題且影響分配時才觸發(fā)。5.4 LOH 碎片問題與緩解LOH 碎片是 .NET 中一個經(jīng)典問題。當(dāng)頻繁分配和釋放大小不一的 LOH 對象時空閑列表會逐漸碎片化最終導(dǎo)致即使總空閑內(nèi)存足夠也無法分配新的大對象。緩解 LOH 碎片的策略避免頻繁分配/釋放 LOH 對象使用對象池復(fù)用 LOH 對象。控制對象大小盡量使對象大小低于 85,000 字節(jié)閾值使其走 SOH 路徑。定期手動壓縮在低峰期手動觸發(fā) LOH 壓縮。使用ArrayPoolT對于數(shù)組類型的 LOH 對象使用數(shù)組池復(fù)用。六、壓縮的代價與觸發(fā)策略6.1 壓縮耗時分解一次完整的 Gen 2 壓縮100MB 堆的耗時構(gòu)成Full GC 耗時分解100MB 堆碎片率 60% 標(biāo)記: ████████████████████████ 60% (15-30ms) ← 后臺GC改造目標(biāo) 清掃: ████ 10% (2-5ms) 壓縮: ██████ 30% (10-50ms) ← 最慢但僅在碎片率超閾值時觸發(fā) ───────────────────────────────────────────────── 合計: 100% (27-85ms)關(guān)鍵觀察標(biāo)記占大頭標(biāo)記是耗時最長的階段也是后臺 GC 優(yōu)化的主要目標(biāo)。清掃最穩(wěn)定清掃耗時波動最小因為它只依賴存活對象數(shù)與碎片率無關(guān)。壓縮最可變壓縮耗時波動最大從幾毫秒低碎片到數(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 → 不壓縮即使碎片率很高這個策略的核心考量壓縮的代價高壓縮需要移動對象、更新引用耗時可能遠超清掃。碎片不是最緊急的問題只要還有足夠大的連續(xù)空閑塊碎片不會導(dǎo)致分配失敗。預(yù)算機制優(yōu)先通過 budget 機制控制 GC 頻率比通過壓縮控制碎片更經(jīng)濟。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 耗時分解與優(yōu)化方向7.1 一次 Full GC 的完整耗時一次 Full GC100MB Gen 2 堆碎片率 40%的耗時構(gòu)成 階段 耗時 是否 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 時間 20-60ms 總耗時含并發(fā) 30-100ms7.2 優(yōu)化方向基于耗時分解GC 優(yōu)化的優(yōu)先級如下減少標(biāo)記耗時后臺 GC 已經(jīng)將標(biāo)記移到后臺進一步優(yōu)化空間有限。減少壓縮觸發(fā)通過 budget 自適應(yīng)和晉升策略降低碎片率減少壓縮觸發(fā)頻率。減少 STW 時間并發(fā)壓縮.NET 6將大部分壓縮工作移到后臺進一步降低 STW 時間。減少清掃耗時清掃已經(jīng)很快10%優(yōu)化空間有限。八、清掃和壓縮的時機選擇8.1 何時壓縮.NET Core GC 根據(jù)以下因素決定是否壓縮碎片率空閑空間分散度超過閾值時觸發(fā)壓縮。Gen 2 默認閾值約 50%LOH 默認不自動壓縮。最近一次壓縮的時間間隔避免頻繁壓縮。如果剛做過壓縮即使碎片率略有上升也不會立即再次壓縮。堆大小大堆壓縮的收益更大——碎片浪費的絕對空間更多壓縮后釋放的連續(xù)空間也更可觀。內(nèi)存壓力當(dāng)操作系統(tǒng)通知內(nèi)存緊張時GC 可能降低壓縮閾值更積極地壓縮以釋放空間。8.2 實際項目中的觀察在實際項目中大多數(shù) GC 只需要清掃不需要壓縮。壓縮通常只在以下場景觸發(fā)長運行服務(wù)運行時間越長碎片累積越多壓縮觸發(fā)越頻繁。對象生命周期差異大如果同時存在短命對象和長命對象長命對象之間的空洞會逐步累積為碎片。LOH 頻繁分配雖然 LOH 不自動壓縮但 LOH 碎片會影響 Gen 2 的碎片率間接觸發(fā) Gen 2 壓縮。九、清掃的零分配保證9.1 Intrusive List 技術(shù)清掃階段有一個重要的設(shè)計原則不分配任何新對象。所有需要的臨時數(shù)據(jù)空閑鏈表節(jié)點等從已回收的對象本身借用內(nèi)存。這是經(jīng)典的intrusive list侵入式鏈表技術(shù)。具體來說被回收的死亡對象的內(nèi)存被直接用作空閑鏈表的節(jié)點。死亡對象的第一個字段原本存儲方法表指針之后的位置被覆寫為下一個空閑塊的指針。這樣空閑鏈表不需要任何額外的內(nèi)存分配——它寄生在已回收的對象內(nèi)存上。死亡對象回收前的內(nèi)存布局 ┌──────────────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 同步塊 (8B) │ 字段數(shù)據(jù) (N 字節(jié)) │ │ ← 對象頭 ← 對象數(shù)據(jù) │ └──────────────────────────────────────────────────────┘ │ ▼ 回收后方法表指針之后的內(nèi)存被覆寫為鏈表指針 ┌──────────────────────────────────────────────────────┐ │ 方法表指針 (8B) │ 空閑鏈表下一個節(jié)點指針 (8B) │ ... │ │ (GC 不再需要方法表指針) │ └──────────────────────────────────────────────────────┘ │ ▼ 插入空閑鏈表 FreeList[size_class] ──? [此塊] ──? [下一個空閑塊] ──? ...9.2 零分配的優(yōu)勢這種設(shè)計的優(yōu)勢是多方面的零額外內(nèi)存不需要為空閑鏈表分配任何額外內(nèi)存??臻e鏈表的節(jié)點就是死亡對象本身。零額外分配不需要在清掃過程中調(diào)用malloc或new避免了在 GC 過程中觸發(fā)遞歸 GC 的風(fēng)險。零額外開銷空閑鏈表的插入操作只是修改一個指針時間復(fù)雜度 O(1)。不清零被回收的對象不需要清零。因為它的內(nèi)存即將被重新分配使用清零是浪費。緩存友好空閑鏈表節(jié)點與對象數(shù)據(jù)在同一塊內(nèi)存中訪問局部性好。9.3 與 Java GC 的對比Java 的 OpenJDK GC如 G1使用獨立的空閑列表結(jié)構(gòu)每個空閑塊需要額外的元數(shù)據(jù)來記錄大小和下一個節(jié)點。這意味著清掃階段需要為每個死亡塊分配一個空閑節(jié)點。.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)記-清掃 獨立空閑列表壓縮策略Gen 2 按需壓縮分代壓縮Scavenge 階段LOH 壓縮手動觸發(fā)無專門 LOH并發(fā)清掃.NET 3.0 支持增量清掃可配置零分配保證清掃階段不分配部分支持壓縮暫停時間30-100ms100MB10-50ms100MBUnity 的增量清掃是應(yīng)對移動設(shè)備資源限制的特殊設(shè)計——將清掃拆分成多個小片段避免單次清掃暫停過長。而 .NET Core GC 更傾向于一次性完成通過后臺 GC 和并發(fā)壓縮來降低單次暫停的代價。10.2 為什么 Unity 的壓縮暫停更短Unity SGen 的壓縮暫停通常比 .NET Core GC 短原因有三堆更小移動設(shè)備的堆通常只有幾十 MB而 .NET 服務(wù)端應(yīng)用的堆可能達到數(shù) GB。壓縮耗時與堆大小成正比。壓縮策略更保守SGen 只在必要時壓縮小代不壓縮整個堆。對象更小移動應(yīng)用的對象通常較小復(fù)制代價更低。但這些差異也反映了平臺約束移動設(shè)備內(nèi)存有限不能像服務(wù)端那樣使用大堆和 LOH。十一、量化數(shù)據(jù)的口徑說明11.1 數(shù)據(jù)性質(zhì)本文給出的所有量化數(shù)據(jù)耗時、百分比、閾值等均為典型估算或示例量級非實測常數(shù)。實際數(shù)值取決于以下因素堆大小100MB 堆與 10GB 堆的耗時相差兩個數(shù)量級。碎片率碎片率從 10% 上升到 80%壓縮耗時可能增加 5-10 倍。CPU 核數(shù)并行清掃和壓縮的加速比接近線性但受內(nèi)存帶寬限制。對象大小分布大對象多的堆壓縮耗時更長。引用密度引用字段多的對象修復(fù)耗時更長。11.2 典型場景參考以下數(shù)據(jù)基于 16 核 64GB 服務(wù)端場景的典型估算非實測場景Gen 0 耗時Gen 2 耗時是否壓縮低碎片 (20%)0.5-2ms10-30ms否中碎片 (20-50%)0.5-2ms20-60ms否高碎片 (50%)0.5-2ms50-150ms是LOH 壓縮N/A100-500ms是手動十二、總結(jié)與實踐建議12.1 核心要點回顧清掃和壓縮是 GC 回收階段的核心它們的設(shè)計體現(xiàn)了按需觸發(fā)、零分配保證、并發(fā)優(yōu)化的思想清掃回收死亡對象通過 intrusive list 技術(shù)實現(xiàn)零分配耗時僅占 GC 的 10%。壓縮消除碎片將分散的空閑塊合并為連續(xù)空間但代價高30% 的 GC 耗時。按需觸發(fā)壓縮只在碎片率超過閾值時觸發(fā)大多數(shù) GC 只需清掃。并發(fā)優(yōu)化后臺 GC 將清掃移到后臺.NET 6 將壓縮的部分工作移到后臺。LOH 特殊處理LOH 不自動壓縮需要手動觸發(fā)代價極高。12.2 實踐建議基于對清掃和壓縮的理解以下是針對 C# 開發(fā)者的實踐建議理解壓縮觸發(fā)條件壓縮只在碎片率超過閾值時觸發(fā)。如果你的應(yīng)用碎片率始終很低壓縮幾乎不會成為性能瓶頸。謹慎使用 LOH 壓縮GCSettings.LargeObjectHeapCompactionMode CompactOnce是核武器級別的操只在確實存在嚴重 LOH 碎片且影響分配時才使用。關(guān)注 Gen 2 堆大小Gen 2 堆越大壓縮耗時越長。通過減少長命對象的數(shù)量和大小可以降低壓縮耗時。避免對象生命周期混疊短命對象和長命對象混在一起會導(dǎo)致碎片快速累積??梢酝ㄟ^分層設(shè)計將短命和長命對象放在不同的類中來減少碎片。監(jiān)控碎片率使用 PerfView 或 ETW 事件監(jiān)控 GC 碎片率發(fā)現(xiàn)異常上升趨勢。理解零分配保證清掃階段不分配新對象所以不會觸發(fā)遞歸 GC。這意味著清掃的耗時是確定性的不會因 GC 嵌套而膨脹。12.3 清掃與壓縮的決策樹GC 回收階段 │ ├─ 標(biāo)記階段完成 │ │ │ ├─ Gen 0? │ │ └─ 清掃重建段天然無碎片 │ │ │ ├─ Gen 1? │ │ └─ 清掃隨 Gen 2 一起處理 │ │ │ ├─ Gen 2? │ │ ├─ 碎片率 50%? │ │ │ ├─ Yes → 清掃 → 壓縮 │ │ │ └─ No → 清掃不壓縮 │ │ └─ 并發(fā)清掃? │ │ ├─ Yes → 后臺清掃 │ │ └─ No → STW 清掃 │ │ │ └─ LOH? │ ├─ 手動壓縮? │ │ ├─ Yes → 清掃 → 壓縮STW耗時高 │ │ └─ No → 清掃不壓縮 │ └─ 碎片率 70%? │ └─ 仍不自動壓縮LOH 壓縮代價過高十三、深入壓縮的引用修復(fù)細節(jié)13.1 引用修復(fù)的挑戰(zhàn)引用修復(fù)是壓縮階段最復(fù)雜的部分面臨以下挑戰(zhàn)引用來源多樣棧引用、堆引用、靜態(tài)字段、句柄表、GC 內(nèi)部結(jié)構(gòu)每種來源的修復(fù)方式不同。引用目標(biāo)可能移動被引用的對象可能在同一段需要修復(fù)、在不同段不需要修復(fù)因為 GC 內(nèi)部結(jié)構(gòu)已經(jīng)處理了跨段引用。修復(fù)順序必須先修復(fù)所有引用再移動對象數(shù)據(jù)。否則修復(fù)時找不到舊地址。13.2 棧引用的修復(fù)棧引用的修復(fù)是最直接的部分。在壓縮開始前所有應(yīng)用線程被掛起GC 可以安全地掃描每個線程的棧幀// 棧引用修復(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)鍵點線程必須掛起修復(fù)棧引用時應(yīng)用線程不能運行否則棧內(nèi)容可能被改寫。寄存器也需要修復(fù)除了棧引用掛起時保存的寄存器快照中的引用也需要修復(fù)。修復(fù)是原地進行的直接修改棧幀中的引用值不需要移動棧本身。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ù)量。一個包含 10 個引用字段的對象修復(fù)時需要檢查 10 次、最多更新 10 次。對于引用字段多的對象如字典、列表修復(fù)耗時可能顯著高于簡單對象。13.4 句柄表的修復(fù)句柄表的修復(fù)相對簡單因為句柄表是一個集中管理的數(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(); } } }句柄表的大小通常遠小于堆修復(fù)耗時可以忽略不計。但需要注意固定句柄pinned handle——固定句柄指向的對象在壓縮時不能被移動壓縮算法需要跳過這些對象。十四、深入壓縮算法的變體14.1 傳統(tǒng)壓縮移動對象前面描述的壓縮方式是移動對象將存活對象從舊地址復(fù)制到新地址。這是最常見的壓縮方式優(yōu)點是實現(xiàn)簡單、碎片消除徹底。但移動對象有一個問題指針不變性。如果外部代碼持有對象的原始指針如通過GCHandle的固定句柄移動對象會導(dǎo)致指針失效。這就是為什么固定句柄指向的對象不能被移動。14.2 間接壓縮更新指針另一種壓縮方式是不移動對象只更新引用。具體來說不移動任何對象數(shù)據(jù)。為每個對象維護一個轉(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)點是不需要移動對象數(shù)據(jù)缺點是引入了額外的間接尋址每次引用都需要多一次內(nèi)存訪問。這在性能敏感的場景中是不可接受的所以 .NET Core GC 不使用這種方式。14.3 部分壓縮只壓縮熱點段還有一種優(yōu)化思路是只壓縮熱點段即分配最頻繁的段而不是壓縮整個代。這種部分壓縮的策略是識別熱點段分配最頻繁的段。只壓縮熱點段非熱點段保持原樣。非熱點段中的引用指向熱點段時通過 GC 內(nèi)部結(jié)構(gòu)進行間接尋址。這種方式的優(yōu)點是壓縮范圍小、耗時短缺點是實現(xiàn)復(fù)雜、間接尋址有性能開銷。.NET Core GC 目前不使用這種方式但在 .NET 7 中引入了更細粒度的段級壓縮優(yōu)化。十五、結(jié)語清掃和壓縮是 GC 回收階段的兩個核心操作它們共同決定了 GC 的內(nèi)存效率和暫停時間。清掃通過 intrusive list 技術(shù)實現(xiàn)了零分配耗時穩(wěn)定且可預(yù)測壓縮通過移動對象和修復(fù)引用消除了碎片但代價較高。.NET Core GC 的設(shè)計哲學(xué)是能不清壓就不清壓必須清壓時盡量并行化。通過碎片率閾值、budget 自適應(yīng)、后臺 GC、并發(fā)壓縮等技術(shù).NET Core GC 在大多數(shù)場景下將壓縮的 STW 時間控制在幾毫秒到幾十毫秒之間。理解清掃和壓縮的機制有助于開發(fā)者寫出更友好的對象生命周期模式——減少碎片累積、降低壓縮觸發(fā)頻率、避免 LOH 碎片問題。在下一章中我們將深入后臺 GC 的實現(xiàn)07-05看看 .NET Core GC 如何將清掃和壓縮的耗時進一步攤薄到應(yīng)用線程的分配間隙中。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97视频网站在线观看| 欧美 亚洲精品首页| 青青草好吊色| 91粉嫩萝控精品福利网站_精品影音先锋国 | 少妇无码av专区线| 国精综合一二三区影视| 高清国产成人无码| 亚洲色图加勒比| 亚欧美色| 成人综合色网| 热99这里有精品综合久久 | 黄色一级视| 色婷婷六月| 亚洲综合色在线| 草草影院最新网址| 欧美大片一区二区三区| 欧美成人四级在线播放| 亚洲永久永久永久永久一级一级一级精品| 97资源久久| 国模精品娜娜一二三区| 超碰在线1234区| 无码操逼网| 嗯嗯啊啊好疼| 一本一道vs波多野结衣| 大干人妻| 国产女人成人精品视频| 高精欧美色| 久操不卡视频| 亚洲91综合| 日韩一区二区高清在线观看的| 久久国产精品,久久国产| 国产激情视频一区区三区| 人妻久久久| 男人的天堂com| 日韩乱伦影音先锋| 欧美精品,四区。五区| 色天使亚洲综合在线观看| 色网1| 欧美日韩国产黄色片| 91美女在线视频| 午夜精品久久久久久久久久蜜桃| 欧美一二级| 国产精品婬乱一级毛片彝族| 国产日韩中文字幕欧美| 久久激情综合| 日本阿v天堂在线观看| 国产精品一区二区三区在线密挑| 综合久久久久久久久91| A男人的天堂| 日韩美女操b| 99福利社| 五月婷婷色| 九九碰九九爱97超| 伊人久久大香蕉线AV五月天| 91足交| 欧美人妻另类在线| 色99在线| 涩涩这里只有精品视频| 蜜桃久久一区| 毛片视频白嫩| 亚洲一区二区中文字幕| 在线二区不卡| 人妻碰碰碰碰碰碰| 超碰在线香蕉| 亚洲综合有玛| 亚洲欧洲综合成人av一区| 黄骗免费网站| 狠狠躁天天躁日日躁| 十八禁网站在线| 国产人妖的免费的视频| 午夜激情床戏激情| 婷婷影院入口| 国产一国产一级毛片古装| 欧亚乱色熟一区二区三四区| 五月花婷婷| 人妻人人做人人澡人人爽欧美一区| 99re在线视频| 久久天天躁日日躁狠狠躁| 99精品欧美一区二区三区桃色| 欧美999999| 东北女人| 国产AV高清AV无码| 大香蕉十区| 老司机久久| 欧洲精品一级二级精品综合视频综合| 欧美日韩精品一区二区三区高清| 91欧美亚洲| 中文字幕精品专区搜索结果91| 中字乱伦AV| 丰满人妻无码一区二区三区| 少妇色| 夜夜免费视频| 亚洲影视第一页| 密臀AV在线| 亚洲AV免费在线观看| 富二代亚洲精品99| 717影院理论午夜伦八戒| a亚洲欧美色欲| 一区二区三区免费视频入口| 精品无码久久久久久久久果冻糖心 | 色臀AV| 亚洲在线A| 台湾佬中文娱乐网久久久久久久久久com | 国产精品乱码久久| 欧日韩一二三f区| 性高潮久久久| 欧美激情精品久久久久久| 9久热这里只有精品| 天天日骚逼熟女| 久久九九热| 欧美性第1页| 密臀成人视频久久久| 2017天天透天天通天天擦| 99精品高潮| 人人摸人人舔一区二区| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 美腿丝袜高跟网免费视频免费视频| 综合色啪| 日韩精品99999| 性吧在线视频| 久草热制服丝袜在线观看 | 国产黄片在线免费观看| 五月天丁香| 精品.99999| 免费国产视频| 亚洲国产一级黄色视频| 岛国色情视频在线观看| 91伊人久| 日产狠狠干| www.高清无码诱惑一区.com | 天美传媒Av在线| 日本九九久久99| 精品人妻一区春色| 欧美日韩1234| 超碰98综合网| 日本五区不卡| 男人的天堂2018东京热啪啪啪| 欧美性高潮在线| 日本高清一本二本免费不卡| 国产精品熟女九色九色蜜臀| 亚洲天堂性爱| 午夜传煤十二区精品| 成人免费不卡在线视频| 黄色污污污污污污网站| 五月天精品| 97国产综合欧美| 亚洲中文sv| 免费日韩黄片| 天天日日日射| 久久久精品中文字幕爱豆| 人人手机欧洲亚洲国产人妻| 国产熟女精品一区二区| 强奸乱伦中文字幕AV| 色妺妺在线视频| 午夜欧美精品久久久| 亚乱色| 久久亚洲骚逼综合| 欧美天天干| 激情第四色| 欧美日韩狠狠爱| 免费亚洲黄色视频在线观看| 亚洲视频一二区| 91春色| 欧美狠狠操| 中文字幕高清精品一区| 97精品国产精品免费观看| 加勒比中文av| 欧美专区第一页| 日韩无码视频黄色| 国产精品视频播放| 福利操逼| 91激情国产| 亚洲午夜福利在线影院| 欧美色图另类图片| 欧美亚州手机在线| 麻豆视频国产一区二区| 久久久久久AⅤ无码免费肉站| 成熟熟女国产精品一区二区| 青娱乐国产精品| 青青草一区二区高清无码视频| 亚洲日产专区| 美国aaaaa一级黄片| 精品久久99| 国产成人一级av88| 亚洲色图第一页| 国产精品色色| 思思热免费在线视频| JuliaAnn丝袜熟女系列| 亚洲自拍欧美国产首页网曝 | 日韩午夜啪啪视频| 欧美色视| 欧美日本久久精品一区| 强奸乱伦av电影| 97超碰美女| 亚洲诱惑| 欧美视频中文字幕区| 秋霞Av理论一级在线| 激情内射| 超碰97首页| 91麻豆天美国产欧美| 污污汅18禁网站在线永久免费观看 | 亚洲av淫乱| 蜜臀无码一区二区| 台湾大香蕉99热| 激情四射婷婷四五月天| 国产日韩欧美三级片| 日韩亚洲中文字幕在线| 思思热国产高清| 蜜臀AV成人精品蜜臀| 大香蕉碰| 久久天堂婷婷网| 久久肏大逼| 亚洲爽图| 亚洲久久东京热一二三四五区视频| 亚洲国产欧美日韩人妻日中文| 亚洲色图亚洲无码强奸乱伦| 操死我了嗯嗯嗯| 无码日韩网站| 国产小视频91| 深田咏美亚洲精品福利社| 眼镜人妻101.com| 中文字幕精品码亚洲| 草久在线| 天天做天天爱夜夜爽毛片试看| 一区二区三区一亚洲中文字幕、综合区灬 | 内射中出日韩在线观看视频| 北条麻妃99精品青青久久| 国产刺激视频| 色老汉玖玖爱| 五月丁香激情综合| 美女主播色欲91抠b在线播放| 五月婷婷五月天| 五月天婷婷激情| 偷拍超碰| 亚洲综合69| 亚洲棕合电彰| 天天综合官网| 99热66| 国产精品经典一卡久久久 | 99蜜桃臀亚洲成人在线观看| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 黄页18禁| 综合欧美色图| 午夜男女爽爽爽在线视频| 久久亚洲av成人无码国产| 婷婷激情四射| 亚洲18禁| 国产诱惑| 91天天看| 无码日韩人妻av一| 亚洲影视综合网| 好吊色一区| 少妇熟女视频一二三区| 天天射天天操天天干天天吃2018| 亚欧无码在线| 人人妻人人操人人乐| 欧美91丝袜| 亚州欧美总和| 午夜视频久久久久一区| 亚洲精品久久久久久久蜜桃臀| 亚洲色图大香| 亚洲中文字幕熟女| 蜜臀久久99精品久久久久久婷婷| 久久草草亚洲蜜桃臀| 97久久视频| 夜夜免费视频| 99色色网| 嗯~啊~轻一点 视频| 国产成人亚洲精品无码古代早漏男| 亚洲精品美女久久久久久久久| 江都AV在线| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 97超碰色屌| 私人尤物在线精品不卡| 婷婷色播婷婷| www男人天堂| 老熟女熟妇| 蜜臀99久久精品久久久久久| 日韩乱伦视频| 67914在线兔费成人视频| 韩国一级AAA| 国产美女口爆吞精| 国产精品熟女九色九色蜜臀| 一区二区 电影 亚洲| 黄色AAAAA欧美| 精品久久在线区一区| 一级毛片电影免费看| 欧洲色| 91亚洲影视| a网站免费观看| 9 9无尺码天堂网| 日韩人妻一区二区精品| 日日骚av| 欧美午夜精品久久久久久超碰| 大香蕉一人| 国产精品一区人妻精品阁在线| 精品国模无码| 久久久久久人| 一区二区三区蜜桃成人撸久久东京热| 亞洲久久直播| 午夜男女爽爽大片免费观看| 在线黄色污污网站| 婷婷五月天在线观看| 超碰人人色| 欧美久久婷婷| 7月婷婷综合| www.97在线| 亚洲另类在线观看| 蜜臀AV午夜精品久| 日本九九久久99| 五月婷婷激情网| 欧美18老人禁| 国产精品一区在线播放| 国产精品网站免费| 99在线精品视频| 97操碰| 美女淫穴| 日本网色| 激情看片网站| 久操com| 天美传媒AV在线| 人妻内射一区二区在线视频| 欧美老妇女内射网址| 欧美午夜精品久久久久久超碰| 日本熟女免费視颖| 国产乱色国产精品免费视| 九九无码| 国产91影院| 国产伊人精品在线| 中文字幕视频免费| 亚洲se91| 久久久久久无码人妻中文字幕| 91精品国产91久久青草| 日韩一级二级三级| 久久噜噜噜精品国产亚洲综合| www.狠狠干.coom| 五月丁香婷婷色| 亚洲黄色a级片| 天天操夜夜操狠很操| 日韩熟女精一区二区三区不卡| 成人夜夜| 夜夜欢天天干| 18精品一二区| 久久久久白虎| 日韩啪啪视频| 精品人妻一区二区三区在| 精品人妻一区二区蜜桃视频| xxx亚洲午夜天堂| 性爱综合网| 在线观看av区| 婷婷五月天激情四射| 思思性爱| 色色色999| www.色综合| 99婷婷| 五月丁香激情综合网| 色性欧美| 日日干日日操五月天伦理视频| 亚卅熟女乱色| 香一区二区三区| 久久国产对白激情浪潮| 精品大全99999| 亚洲暴力强奸AV| 超碰偷拍| 大香蕉免费中文| 中出91| 一区二区 电影 亚洲| 四虎在线免费视频| 欧美啪啪天堂| 一级AV性爱| 午夜福利视频在线一区| 精品国产片亚洲一区| 久悠悠av| 东京男人天堂| 四虎午夜影院| 久草大| 人妻人人澡人人爽人人| 欧美亚洲特P| 欧美性爱无码一区二区三区| 男人夜色天堂ss| 欧美偷| 国产探花日韩援交| 2001天天操| 久久黄人人爽视频| 色黄色美女大长腿午夜视频| 91久热这里只有精品| 大香蕉欧美日韩| 人人操人人操人妻人| 亚洲精品国产专区在线观看| 久久一二区四| 亚洲高清欧美总合| 久久精品福利影院| 狠狠操夜夜操蜜桃视频三区| 夜夜嗨一区| 亚洲第一免费视频| 91爱做| 亚洲人成在线放东京热| 性一交一乱一交A片久久四色| 欧美在线伊人色| 日本欧美色| 97在线免费观看| 精品国产嫩穴视频| 国产精品白丝| 91n免费处女| 亚洲AV免费在线观看| 成人久久精品| 国产熟女无套内射| 亚洲码专区| 亚洲欧美精品久| 欧美亚洲图片| 神马久久久久眼| 人人妻人人澡人人爽人人精品浪潮| 国产精品美女久久久久久网站| 青青草伊人久久| 97精| 欧美制服网站美腿丝袜| 国产精品久久久| 亚洲男人的天堂亚洲| 欧美人体性爱互联网第一页婷婷日本| 色丁香五月婷婷| 亚州性色| 亚洲熟女综合| 亚洲一本色道中文无码aV天美| 超碰性爱97| 芊芊操逼视频无码| 在线 欧美 亚洲| 天天日天天看| 视频二区熟女人妻| 亚码激情| 日韩免费在线观看不卡| 99热精品国产| 五月丁香综合| 国产日韩精品suv| 啊啊啊啊啊啊啊啊要喷了| 女色视频社区| 伊人久久在线视频观看| 91美女视频| 天堂射| 九九亚洲视频| 黄色激情电影在线观看| 97在线欧| 91丨精品丨国产丨丝袜| 色色综合网站| 美女黄色91| 这里只有精品视频在线| 黄色免费网页无码| 色综合V| 精品78| 欧美第五页| 欧美91丝袜| 亚洲综合性感在线| 五月丁香狠狠爱| 久久精品国产99精品亚洲蜜...| 97亚洲自在精品在线观看| 无码人妻精品一区二区三区九九| 麻豆天美国美国产AV| 都市久久精品激情亚洲| 日本国产欧美一区三区二区| 亚洲毛片基地专区| 一区二区不卡| 狠狠搞 亚洲91| 野狼激情网| 免费a在线播放v| 天天色,天天干,天天干| 九热视频| 日本熟妇自慰性高潮一区二区三区| 亚洲色综网| 操逼操2| 野狼激情网| 久久久96精品| 天天激色| 人妻在线大香蕉| 女人的久久久| 激情久久久| 精品一区二区成人| 手机午夜电影神马久久| 超碰国产精品无码| 在线岛国新天堂8| 一本久道在线综合视频| 大伊香蕉在线视频免费| 91狠狠综合久久| 久久久9品一区二区三区| 国产乱码精品久久久久久| julia在线观看久久| 欧美激情片一区二区| 97精品视频网站| 成人色女网| 很狠操| 亚洲深夜福利| 亚洲少妇在线观看| 亚洲全色网| 91蜜桃传媒精品久久久一区二区| 狠狠操狠狠操操| 隔壁邻居波多野结衣中文字幕 | 欧美老妇女内射网址| 老鸭窝成人| 蜜乳AV.COM| 熟女乱3伦999| 国产尹人在线视频免费| 久久久影院| 新精精品久久精品| 国产强奸乱伦第1页| 秋霞无码av鲁丝片一区| 99精品久久| 色天欧美| 精品国产三级av韩国在线| 色黄污美女啪啪啪免费网站| 丁香五月激情综合| 天天影视网色欲色香| 亚洲综合色图欧美| 日韩乱伦影音先锋| 日本三级日本三级三级人妇四虎| 日韩欧美女求操每天更新| 日韩黄片影院| 99re这里只有精品中心播放| 亚洲男人天堂网站| 一区二区三区精品视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲永久永久永久永久一级一级一级精品 | 午夜福利1区2区3区| 九色97| 欧美成人贴图| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 啊啊啊啊啊舒服| 欧美日本成人一区二区| 久草五月| 亚洲 欧美 色图| 久久婷婷综合国际产色怕| 资源在线观一 二| 不卡在线观看视频| 99久久这里只有精品| 欧美色图20P| 亚洲超碰在线| 亚洲日韩电影| 国内操逼视频二区| 欧美顶级黄色大片免费| 国产白丝网站| 国产精品三级视频网站| 久久超碰av在线| 91丝袜熟女| 亚洲啪啪视频免费| 操逼操2| 超碰97欧美| 殴美性天天| 狠狠久久手机视频精品| 久久亚洲骚逼综合| 国产高清自拍| 国产精品蜜乳AV| 国产精品一区在线播放| 97在线播放| 人妻熟女字幕一区二区| 伊人天天久久动态图| 97福利视频| 美女裸体无遮挡永久免费观看网站| 骚逼一区二区| 国产精品免费视频不卡| 亚洲欧美电影| 东北女人的毛片| 成年女人18级毛片毛片免费观看| 久久久免费高清中文视频| 婷婷视频网| 97亚洲综合| 91在线/欧洲| 又黑又大又粗| 欧美一级黄片免费播放| 日本精品中文字幕视频| aV中文麻| 操淫穴亚洲五月丁香| 伊人久久婷婷| 国产精品香蕉热久久新品| 亚洲激情久久久伊人综合| 丝袜六区| 日韩欧美亚洲一区二区三区影院| 超碰人人乐97| 婷婷国产精品一区二区| 综合久久99亚洲人妻中文在线| 五月丁香社区婷婷日韩欧美精品影院| 91天堂视频| 久久精品人妻一区| 久草新在线| 校园春色中文字幕AV| 天天综合网国产| 天堂九九九九九九九九九| 国产极品粉嫩馒头一线天av| 嗯,啊。舔我逼| 在线亚洲丝袜视频网站| 亚洲自拍欧美色综合| 欧美久久婷婷| 欧美久久久| 天堂资源欧美| 欧洲与亚洲欧美精品中文字幕| 亚洲成人一二三区| 欧美激情视频一区二区三区不卡| 91超碰人人| 色婷婷综合久久久久中文一区二区 | 91亚洲综合在线| 天天肏天天干| 欧美激情性久久久久久| 三级色综合| 久久久久国产一区二| 五月丁香综合激情| 午夜性| 青青草中日韩在线| 91中出视频| 超碰日韩人妻| 思思性爱| 国产精品一区人妻精品阁在线| 亚洲操逼网| 蜜桃精久三区| 久久蜜色情在线视频xxx免费观看| 大香蕉欧美国产日韩高潮| 久久9999| 强奸乱伦AV一天堂网| 操逼操网| 亚洲激情在线一区二区| 久久性爱视频99| 国产 无码 一区二区| 亚洲91少妇| 欧美日韩亚洲电影| 亚洲黑人在线| 午夜福利成人免费视频| 久久久久少妇| 日熟女| 中文字幕五区| 97操97干| 欧美se综合| 激情五月婷婷| 欧美性区| 丰满熟女一区二区三区在线播放| 一本一道波多野毛片中文在线| 开心五月天激情网| WWW美腿丝袜香蕉中文| 五月丁香六月综合缴清无码 | 密乳AV免费观看| 97免费在线视频在线观看| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 亚洲自拍欧美国产首页网曝| 大香蕉伊人75| 精品九九国产无码| 熟女自慰久久久| 国产日韩久久| 日本精品一区三区| 欧美综合中文| 久久婷综合| 97摸视频| 日日干夜夜骑| 国产一级做a爰大片免费久久| 91天堂视频| 操屄日韩| 欧美色偷拍| 国产一国产一级毛片古装| 五月婷婷激情| 亚洲文学偷乱拍啪啪啪啪 | 日韩av不卡在线观看| 欧洲亚洲人人爽爽视频| 操逼不卡中文字幕| 九九亚洲色在线观看| 91精品国产高清久久久久久,亚洲成人| 极品久久久久久久久久久久久久| 岛国激情视频在线观看| 色偷偷超碰亚洲| 乱伦a片视频| 美女丝袜激情小说| 97福利视频| 亚洲色图91欧美日韩| 欧美天天综合网版| 亚洲丝袜天堂| 乱伦AVxx| 欧美97爱| 精品一区二区三区蜜桃臀www| 天堂中文资源在线bt| 我爱搞逼综合网| 国产成人综合网| 明星性猛交ⅹxxx乱大交| 国内操逼视频二区| 9久久精品| 成人午夜高潮av猛片| 国产精品久久久久999| 在线 制服丝袜中出 人妻| 日本乱人伦片中文三区| 欧美性区| 91超级碰| 国产女人操逼视频| 亚洲美女精品九九视频| 自拍欧美| 日本亚洲vr欧美不卡高清专区| 欧美欲色| AⅤ片水多多| 亚洲AV无码成人精品久久| 美女啊啊啊啊啊啊| 九九九成人| 91成人无码| 亚洲一区二区三区麻豆传媒| 韩国女主播青草福利视频| xxx亚洲午夜天堂| 亚洲日本男人天堂网| 麻豆九九九| 亚洲日韩乱码中文无码蜜桃臀网站| 男人精品天堂一区| 99福利社| 日本影视久久免费| 亚瑟国产精品久久无码| 人看人人摸人人操| 盗摄 精品 另类 一区| 色九九综合| av一区二区三区 中文| 毛片电影一区二区三区| 超碰久久性爱| 强奸熟女一区二区三区 | 十八禁视频网站| 高清不卡视频| av最新免费中文字幕| 91精品亚洲内射孕妇| 亚洲情色 自拍| 日产国产精品中文久久婷婷| 亚洲国产另类在线中文| 久久日韩肥臀| 9久久精品| 丝袜高跟澳门91视频| 久草免费福利在线播放| 中文字幕黄色一起草| 国产日韩欧美| 欧美第一页| 97色欧洲| 亚洲**2021在线观看| 日韩在线人妻网站| 欧美色三级片91| 午夜高清成人在线视频| 精品欧美不卡在线播放| 另类图片综合| 伦理弟一页| 熟女熟妇伦久久影院毛片一区二区| 亚洲情色综合网| 妇女一区二区三区| 五月丁香六月综合缴清无码| 三级三级三级a级全黄三| 日欧操屄视频| 亚洲欧洲另类| 久久国99999| 国产精品另类一区大香蕉| 大香蕉欧美| 日本精品不卡一二三区| 日韩性爱啪啪视频| 午夜男女爽爽爽在线视频 | www.99视频| 熟女少妇一区二区三区| 九月丁香婷婷| 狠操91,com| 日韩av情韩国爱禁区av一区二区| 操淫穴亚洲五月丁香 | 东京热男人的天堂精品| 日本在线不卡一二区| 欧美熟妇视频| 中文字幕免费看| 国产91福利小视频在线观看| 熟妇操花| 一区 欧美 日韩 麻豆| 91无码人妻精品一区二区三区蜜桃| 美国日韩黄片| 大香樵伊人网| 超碰97久久国| 亚洲黄色视频在线观看视频| 日本欧美国内在线| 亚洲高清男人天堂| 国产农村妇女精品| 超碰免费人人| 欧美亚洲韩国视频十五区 | laoshunv91| 国产肏逼网站| 人人喜人人妻| 亚洲欧洲综合| 色色热| 欲色综合| 日本岛国黄色网址| 人妻夜爽夜夜爽| 国产成人www免费人成看片| 91精品成人www| 淫荡网址| 2025亚洲男人天堂| 亚洲无码精品AV久久久| 亚洲色欲一区二区三区| 国产999精品久久久| 丁香五月天堂网| 精品白丝一区| www.天天干| 漂亮人妻被强中文字幕hd| 狠狠穞A片一區二區三區| 91亚洲情色| 日本天堂网| 久久伊人亚洲AV无码网站| 亚洲欧美精品久| 国产呦精品一区二区三区下载| 久久久九九九九| 久久精品色欧美aⅴ一区二区| 国产精品日日摸天天碰| 国产乱婷婷精品二区三区| 欧美的精品的视频| 国产青一二三| 无码高清专| 国产深喉视频一区二区| 97天天做| 精品少妇一区二区三区在线视频| 人妻大香蕉| 久草久热| 欧美很很操视频| 久久久新亚洲AV| 97精品在线| 强奸乱伦大香蕉网| 自拍啪啪视频| 欧美黄色图片| 偷窥自拍亚洲天堂网爆| 夜夜草天天| 性欧美91| 91大神电影天堂| 日本污ww视频网站| 97超碰中文在线| 玖日综合网| 久操操| 日韩在线观看中文字幕视频| 欧美 亚洲 在线| 啊啊啊啊好大好硬啊啊啊啊啊| 激情婷婷| 日韩精品中文字幕二区| 亚洲春色欧美激情自拍| 91精品人妻一区二区三区蜜桃| 欧美在线色| 热久久九九热| 青青操97| 成人AV素股で擦久久| 天天干天天插| 丁香九月激情| 国产精品免费视频人成| 一区二区三区四区免费视频| 美女黄页网站| 97精品久久久久中文字幕| 国内精品不卡无毒99999| 玖色AV| 999狠狠综合| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 啪啪视频亚洲第一| 日本欧美一区二区三区视频麻豆| 精品欧美乱码久| 9丨久久九九九| 欧美性暴力| 囯产精品久久久久久久久久二区三区| 亚洲欧美天| 4虎在线观看| 女人精品内射国产99| 91在线精品一区二区三区| 国产极品粉嫩馒头一线天av| 久久午夜鲁丝片| 国产拍偷精品网站| 日韩色欲久久一二三四区| 亚洲AV麻豆Aⅴ无码电影一| 伦激情人妻另类人妻| 一区二区三区美女超清| 国产毛片在线| 淫荡少妇免费| 黄片aaaaa一区| 这里只有精品久久| 伊人久久国产免费观看视频| 2017大香蕉国产精品久久| 国产精品久久久亚洲第一牛牛_在线观看| 亚州色图第三区| 天天澡天天爽日日av| 狼人综合婷婷激情四射| 国产精品一区二区后入| 国产精品夜夜| 亚洲精品精品一区二区| 精品国产一区二区三区在线播出| ..日韩av毛片精品久久久| 精品性爱一区二区| 国产精品99久久久www| http://qxhbdz.com| 欧美在线中M| 亚洲另类欧美精品| 丁香九月激情啪| 欧美三级免费伊人| 少妇精品| 亚洲色图欧美视频| 99精品在线播放| 欧洲精品久久| 日韩成年人性爱视频| 天堂岛av| 国产自产91区13区| 夜夜嗨一区二区三区三州加勒比| 18禁止看精品中文字幕| 成人午夜无码视频| 亚洲情色综合网| 熟女精品va中文字幕| 日韩黄色一区二区三区| 中文字暮97| 精品日日人妻| 午夜福利一区二区影院| 大香蕉久| 欧美人妻一区二区| 三级三级三级a级全黄三| 精品国产一区二区三区久久久蜜臀| 亚洲欧美日韩精品久久久一区二区 | 中日无幕一二三四区| 国产黄色动态精品| 欧美亚洲自拍另类人妻| 啊啊啊97视频| 2024人人操人人摸| 另类图片综合| 亚州精品人妻一二三区| 婷婷丁香六月| 欧美在线55555| 日韩激情电影中文字幕| 天天做天天爱天天高潮| 在线免费观看高清无码视频| 日韩中文字幕2020| 天天天天操| AV一区观看| 91美| 亚洲欧美日韩国产丝袜自拍中文| 五月丁香社区婷婷日韩欧美精品影院 | 91丨豆花丨熟女| 大稥蕉免费视频这里只有精品| 97爱爱| 嗯嗯啊啊好大好爽| 99色色网| 午夜国产综合视频在线观看| 欧美日本中字另类在线| 欧美色图20P| www.av不卡中文字幕| AND人妻系列| 成人a大片在线观看| 无码外流操逼视频| 九九黄色视频在线观看| 清纯唯美亚洲综合| 91操熟女视频| 欧亚 另类 久| 国产女主播视频在线观看| 日日黄色三级网站| 第45页一区二区| 97视频7| 日韩在线欧美精品一区二区| 97精品一区| 久久亚洲天堂| 美日韩一二三区| 好看的91视频| caopeng97人妻| 91国产丝袜足交精品视频| 久久精品欧美一区蜜桃| 丰满人妻-区二区三区免费| www.91逼逼.com| 国产一区二区三区视频在线看| 欧美Ⅴ性爱| 日本在线观看网址| 亚洲 中文字幕 精品| 久久久久亚洲三级电影| 免费看黄片现成| 樱花蜜乳av| 激情五月天丁香社区| 亚洲成人综合在线| 亚洲天堂区| 爱干爱射网啊啊啊| 久操在97| 久久成人东京热人妻| 青青草在线视频美女| 欧成人精品一区二区三区| 日日爱99| heyZO天然素人无码AⅤ专区| 手机在线中文字幕国产| 午夜理论片在线观看免费| 中文字幕在线高清男人的天堂| 大香蕉丝袜一级片| 亚洲情色1区| 欧美在线视频观看一二三四区高清| 玖玖爱伊人玖玖爱| 综合欧美亚洲| 国产亚洲中文不卡二区| 天天看,天天做| 国产天天骚| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 亚洲男人在线观看天堂| 亚洲网站一区二区在线| 人人操人人干网页| www.夜夜| 综合影院永久入口国产| 国产女人高潮嗷嗷嗷叫小说| 97视频免费在线| 日本一区二区三区免费观看| 日本理论在线| 国产四虎在线| 亚洲图片视频小说| 啪啪啪东京| 黑人在线91| 麻豆国产视频精品观看| 99激情视频| 色色青青久久| 日韩性爱1级片视频| 久久久影院| 蜜桃在线观看一区二区三区| 91n美女视频| 五月激情影院| 97玖玖超碰| 亚洲美女30b| 一本一道久久综合久久| 国产精品久久久亚洲第一牛牛_在线观看| 97干在线视频| 26uuu性| 丁香五月天婷婷姐| 精品一二三区女同| 天天综合色图| 国产操逼逼网| 97硬碰| 国产精品操| 欧美成人性爱视频大全| 欧色综合| 亚洲Av诱惑| 香蕉热人人精品| 天天综合~91入口| 九九热九九热| 大干人妻| 久久riav中文精品| 国产黄a三级三级三级av在线看| 韩国一区二区精品亚洲| 久久网亚洲| 日韩操逼性鲍| 亚洲天堂中文字幕无码男同| 啊啊啊啊啊啊在线看| 午夜亚洲| 日韩黄色成人性爱| 日本中文字幕一区| se01国产在线视频| 夜夜狼人妻| 国产97在线视频| 午夜大香蕉| 亚洲欧美高清| 99精品热| 中文字幕黄色一起草| 爱av免费| 91美女视频电影| 日本一区二区不卡精品| 欧洲射精91| 欧美真人抽搐一进一出gif| 亚洲国男人的天堂| 97国产超碰| 狠狠 91| V A在线| 国产天天看| 亚洲日本激情| 久久久禁| 一区三区啪啪| 99re这里| av一区二区三区 中文| 加勒比久久av| 人妻99p| 蜜臀久久99精品久久久久久婷婷| 黄片免费视频2019| 天堂综合| 人妻激情另类| 国产99久久99热这里只有精品15 | 亚洲激情AV| 人人做天天爱| 丰满人妻一区二区三区免费| 啊啊啊在线观看免费视频| 五月激情影院| 激情网色| 精产品久久| 97超碰色中文字幕| 在线天堂999| 久久久婷| 素人一区二区三区日韩| 欧美色九九| 久久久少妇诱惑精品视频| 好吊色一区| 十八禁网站在线| 国产1769在线| 精品人妻中文字幕4399| 国产免费一区2区3区| 91亚洲最新在线| 亚洲综合校园春色| 欧美色图成人网一区二区 | 操逼1区| 国产精品久久久吖| 91东北熟女| 色九久| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 婷婷丁香五月天综合东京热| 欧美精品成人一区二区在线观看 | 超碰97COm中文| 亚洲综合另类色图| 熟女熟妇一区二区三区视频| 久草精品视频| 欧美大片天天看| 长久操视频| 精品美女人人干| 美性中文综合网| 99日免费视频中文字幕| 九九av| 天美一区在线| 久久机热| 亚洲精品国产拍免费91在线| 黑白配性爱AV成| 精品人妻一区二区三区不卡断| AV中文字幕三四五| 久久久9品一区二区三区| 丰满人妻无码一区二区三区| 日本视频在线中文字幕| 电家庭影院午夜69久久夜色精品国产69乱 | 日本不卡免费二区| 国产高清免费不卡av| 国内毛片欧美香蕉精品| 啊啊啊好多水| 国产精品乱码久久久| 后入式免费视频| 玖玖综合网| 操逼不卡中文字幕| 逼逼逼逼操操操操操操操操操午夜剧场| 免费的很黄很污的全部视频| 超碰国产精品久| 日本女人操逼| 中文字幕丝袜美腿| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 97精品久久久久久久| 亚洲脚交| 丝袜 中出 制服 人妻 美腿 中文字幕| 91爱看| 国产精品乱码久久久久| 性爱视频啪啪啪啪| 婷婷五月天久久久| 鸥美插入视频| 国产第11页| 亚洲高清综合网| 国产亚洲精品农村妇女| 99无码视频| 欧美大战久久久伊人| 久久国产精品视频| 久久无码一区二区二三区性色| 国产人妖视频一区在线观看| 国产精品天美传媒| 混色激情av| 欧美高清91| 亚洲四虎熟女精品| 超碰中文字幕人妻草一区| 骚货 中文字幕 av| 日韩乱插| 丝袜视频网国产90| 女人高潮大叫一级毛片| 日本精品一区二区三| 免費黃色視頻觀看一| 玖玖综合视频| 久久久蜜桃臀无码视频| 啊啊啊轻点在线观看| 无码伊人久久大杳蕉中文无码| 国产热av| 久热香蕉精品在线视频| 午夜福利区| 在线午夜成人无码视频| 亚洲操人| 999九九精品| 久久天天艹| 95人妻爽爽人人做人人澡| 青草影院内射高潮| 最新岛国大片| 操香逼| 国产一区免费午夜视频|