色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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 分鐘一、引言標記階段識別了存活對象后GC 進入回收階段——清掃死亡對象、壓縮存活對象。清掃和壓縮是 GC 中內(nèi)存效率的決定性因素清掃決定了多少死亡內(nèi)存被真正釋放壓縮決定了碎片是否累積到影響分配的程度。但清掃和壓縮的代價也不容忽視。一次全堆壓縮可能耗時數(shù)十到數(shù)百毫秒直接反映在應(yīng)用的暫停時間上。所以 .NET Core GC 的核心設(shè)計哲學是能不清壓就不清壓必須清壓時盡量并行化。這個哲學貫穿了從計劃決策到清掃實現(xiàn)、從壓縮策略到 LOH 特殊處理的每一個環(huán)節(jié)。在展開之前先把本章的定位說清楚。07-03 標記篇已經(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 的段被完全清空并重新使用。這種全量晉升 段復用的機制天然消除了 Gen 0 的碎片不需要壓縮。Gen 1 也不壓縮因為它不是一個獨立的內(nèi)存區(qū)域——它和 Gen 2 共享同一組段。對 Gen 2 的壓縮同時就是對 Gen 1 的壓縮。2.3 計劃決策的時序標記階段完成 │ ▼ 統(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恍鑾装傥⒚?。它的輸出GCPlan會被傳遞給清掃階段和壓縮階段指導后續(xù)的所有操作。三、清掃階段Sweep Phase3.1 清掃的基本原理清掃是 GC 回收階段的第一步。它的任務(wù)很簡單遍歷段中的所有對象把死亡對象的內(nèi)存標記為可用。但實現(xiàn)起來并不簡單。清掃需要處理以下問題對象遍歷如何高效地遍歷段中的所有對象死亡檢測如何判斷一個對象是否死亡空閑管理如何管理回收后的空閑內(nèi)存3.1.1 對象遍歷清掃遍歷段的方式與標記遍歷對象圖的方式不同。標記是從根出發(fā)沿著引用字段下鉆而清掃是順序遍歷段中的每個對象按對象大小步進。// SweepSegment 核心邏輯簡化示意 void SweepSegment(heap_segment* seg) { uint8_t* current seg-start; uint8_t* end seg-allocated; while (current end) { Object* obj (Object*)current; // 檢查對象是否被標記 if (!obj-IsMarked()) { // 死亡對象回收其內(nèi)存 size_t size obj-GetSize(); AddToFreeList(current, size); } else { // 存活對象清除標記位準備下一輪 obj-ClearMark(); } // 按對象大小步進到下一個對象 current obj-GetSize(); } }這個遍歷是順序的對內(nèi)存的訪問模式非常友好——CPU 預(yù)取器可以很好地工作緩存命中率極高。這也是為什么清掃階段通常只占 GC 暫停時間的 10% 左右。3.1.2 死亡檢測死亡檢測通過檢查對象的標記位mark bit實現(xiàn)。標記階段會為每個存活對象設(shè)置標記位清掃階段只需檢查這個位標記位為 1存活對象清除標記位繼續(xù)下一個標記位為 0死亡對象回收內(nèi)存標記位通常存儲在對象頭的某個比特位中訪問速度極快一條位操作指令。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線程: ──[標記 Gen2]──[清掃 Gen2]──────[壓縮 Gen2]── │ │ │ │ ├─ 并發(fā)清掃應(yīng)用線程繼續(xù)分配 │ └─ 壓縮時需要 STW并發(fā)清掃的關(guān)鍵技術(shù)是標記-清掃并發(fā)標記階段在后臺線程中并行執(zhí)行清掃階段在標記完成后立即開始不需要等待應(yīng)用線程全部掛起。只有壓縮階段需要 STWStop-The-World。并發(fā)清掃的實現(xiàn)依賴于以下機制標記位的原子操作標記階段設(shè)置標記位使用原子操作清掃階段讀取標記位不需要加鎖。段級鎖清掃器獲取段的鎖后其他線程不能修改該段的內(nèi)容。段級鎖的粒度比全局鎖小得多減少了競爭。卡片表補償并發(fā)期間應(yīng)用線程可能創(chuàng)建新的引用這些引用通過卡片表記錄清掃完成后由 GC 進行補償掃描。3.4 并行清掃在多核機器上清掃可以并行化。不同清掃器線程負責不同的段互不干擾段 0 ──? 清掃器線程 0 段 1 ──? 清掃器線程 1 段 2 ──? 清掃器線程 2 段 3 ──? 清掃器線程 3并行清掃的加速比接近線性——4 核機器上清掃 4 個段的耗時約等于清掃 1 個段的 4 倍。但并行清掃也有開銷任務(wù)分發(fā)需要將段分配給清掃器線程這本身有同步開銷。空閑列表合并各線程回收的空閑塊需要合并到全局空閑列表中。緩存競爭多個線程同時寫入空閑列表可能導致緩存行失效。因此并行清掃在段數(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ù)的可用空間。沒有壓縮碎片會逐步累積最終導致即使總空閑內(nèi)存足夠也無法分配大塊對象因為找不到足夠大的連續(xù)空間。4.2 壓縮的三個步驟壓縮是 GC 中最復雜的操作涉及三個緊密耦合的步驟步驟 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)遞增存活對象按原順序排列新地址嚴格遞增。這意味著壓縮不會改變對象的相對順序有利于緩存局部性。死亡對象被跳過死亡對象不占用新地址空間相當于在計算新地址的同時完成了收縮。對象大小不變壓縮不改變對象大小只改變對象的起始地址。步驟 2修復引用Fix References// FixReferences簡化示意 void FixReferences(int generation) { // 修復棧上的引用 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(); } } } // 修復堆上的引用存活對象中的引用字段 for (uint8_t* obj segment-start; obj segment-allocated; ) { if (obj-IsMarked()) { obj-FixReferences(); // 對象內(nèi)部的引用字段全部更新 obj obj-GetSize(); } } // 修復靜態(tài)字段 for (StaticRef ref : static_references) { if (ref.target segment_start ref.target segment_end) { *ref.location ref.target-GetNewAddress(); } } // 修復句柄表 for (HandleEntry entry : handle_table) { if (entry.target segment_start entry.target segment_end) { entry.target entry.target-GetNewAddress(); } } }引用修復是壓縮中最復雜、最耗時的部分。需要修復的引用來源包括棧引用各線程棧幀中指向壓縮段的對象引用。堆引用存活對象內(nèi)部的引用字段指向同一段或其他段中的對象。靜態(tài)字段類靜態(tài)變量中指向壓縮段的引用。句柄表GCHandle 中指向壓縮段的引用。GC 內(nèi)部結(jié)構(gòu)如卡片表、根表等。引用修復的關(guān)鍵約束必須在復制之前完成。因為復制會移動對象如果先復制再修復引用修復時找不到舊地址。步驟 3復制對象數(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) { // 對象需要移動復制數(shù)據(jù) size_t size obj-GetSize(); MemMove(new_addr, current, size); } } } }復制階段使用MemMove批量移動對象數(shù)據(jù)。由于對象是按順序處理的且新地址也是順序遞增的MemMove的調(diào)用可以很好地利用 CPU 的 DMA 緩存行預(yù)取和 SIMD 指令。關(guān)鍵優(yōu)化原地跳過如果對象的新地址等于舊地址通常發(fā)生在段尾部的存活對象直接跳過不復制。批量復制MemMove內(nèi)部使用 SIMD 指令如 AVX2一次復制 32 或 64 字節(jié)比逐字節(jié)復制快數(shù)倍。寫合并多個小對象的復制可以合并為一次MemMove調(diào)用減少函數(shù)調(diào)用開銷。4.3 壓縮的代價壓縮涉及大量內(nèi)存復制和引用更新是 GC 中最耗時的操作。以下是一個典型場景的耗時分解100MB Gen 2 堆碎片率 60%一次全量壓縮 步驟 耗時 占比 ───────────────────────────────────── 計算新地址 5-10ms ~15% 修復引用 20-80ms ~60% ← 最耗時 復制對象數(shù)據(jù) 5-10ms ~15% 清理段元數(shù)據(jù) 1-2ms ~5% ───────────────────────────────────── 合計 30-100ms 100%各步驟的耗時特征計算新地址O(n) 順序遍歷緩存友好耗時與存活對象數(shù)成正比。修復引用O(n r)n 為存活對象數(shù)r 為引用字段總數(shù)。引用字段越多耗時越長。棧引用和句柄表引用的修復需要逐個處理無法批量優(yōu)化。復制對象數(shù)據(jù)O(n)但MemMove的常數(shù)極小實際耗時通常低于引用修復。清理段元數(shù)據(jù)O(1) 或 O(段數(shù))耗時可忽略。4.4 壓縮的并發(fā)化.NET Core GC 在 .NET 6 中引入了并發(fā)壓縮的部分優(yōu)化。核心思想是將壓縮拆分為多個階段其中計算新地址和修復引用可以在后臺線程中并行執(zhí)行只有最后的復制 最終引用修復需要 STW。傳統(tǒng)壓縮全 STW [計算新地址][修復引用][復制對象][最終修復] ← 全部 STW 并發(fā)壓縮.NET 6 [計算新地址]──[修復引用] ← 后臺線程并行執(zhí)行 │ ▼ STW 切換點 [復制對象][最終修復] ← 短 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復制一個大對象的代價相當于復制成千上萬個小對象。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 對象清除標記 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)存復制所有存活 LOH 對象需要被移動復制量可能達到數(shù) GB。引用更新所有指向 LOH 對象的引用需要更新包括棧引用、堆引用、靜態(tài)字段、句柄表。STW 時間長LOH 壓縮通常需要 STW 數(shù)百毫秒到數(shù)秒取決于 LOH 大小和存活對象數(shù)。因此LOH 壓縮應(yīng)該謹慎使用只在確實存在嚴重碎片問題且影響分配時才觸發(fā)。5.4 LOH 碎片問題與緩解LOH 碎片是 .NET 中一個經(jīng)典問題。當頻繁分配和釋放大小不一的 LOH 對象時空閑列表會逐漸碎片化最終導致即使總空閑內(nèi)存足夠也無法分配新的大對象。緩解 LOH 碎片的策略避免頻繁分配/釋放 LOH 對象使用對象池復用 LOH 對象??刂茖ο蟠笮”M量使對象大小低于 85,000 字節(jié)閾值使其走 SOH 路徑。定期手動壓縮在低峰期手動觸發(fā) LOH 壓縮。使用ArrayPoolT對于數(shù)組類型的 LOH 對象使用數(shù)組池復用。六、壓縮的代價與觸發(fā)策略6.1 壓縮耗時分解一次完整的 Gen 2 壓縮100MB 堆的耗時構(gòu)成Full GC 耗時分解100MB 堆碎片率 60% 標記: ████████████████████████ 60% (15-30ms) ← 后臺GC改造目標 清掃: ████ 10% (2-5ms) 壓縮: ██████ 30% (10-50ms) ← 最慢但僅在碎片率超閾值時觸發(fā) ───────────────────────────────────────────────── 合計: 100% (27-85ms)關(guān)鍵觀察標記占大頭標記是耗時最長的階段也是后臺 GC 優(yōu)化的主要目標。清掃最穩(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ù)空閑塊碎片不會導致分配失敗。預(yù)算機制優(yōu)先通過 budget 機制控制 GC 頻率比通過壓縮控制碎片更經(jīng)濟。6.3 壓縮的替代方案在某些場景下壓縮不是最優(yōu)選擇。.NET Core GC 提供了以下替代方案段復用回收的段不還給操作系統(tǒng)留給下輪復用。這避免了還了再要的系統(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 否 標記 Gen 0/1 5-10ms 部分 是后臺 標記 Gen 2 10-20ms 部分 是后臺 清掃 Gen 0 1-2ms 部分 是并發(fā) 清掃 Gen 1/2 2-5ms 部分 是并發(fā) 壓縮 Gen 2 10-30ms Yes 否 修復引用 5-20ms Yes 部分 恢復線程 1-3ms Yes 否 ───────────────────────────────────────────────── 總 STW 時間 20-60ms 總耗時含并發(fā) 30-100ms7.2 優(yōu)化方向基于耗時分解GC 優(yōu)化的優(yōu)先級如下減少標記耗時后臺 GC 已經(jīng)將標記移到后臺進一步優(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)存壓力當操作系統(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 的風險。零額外開銷空閑鏈表的插入操作只是修改一個指針時間復雜度 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標記-清掃 獨立空閑列表壓縮策略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)用的對象通常較小復制代價更低。但這些差異也反映了平臺約束移動設(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)存帶寬限制。對象大小分布大對象多的堆壓縮耗時更長。引用密度引用字段多的對象修復耗時更長。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ù)量和大小可以降低壓縮耗時。避免對象生命周期混疊短命對象和長命對象混在一起會導致碎片快速累積??梢酝ㄟ^分層設(shè)計將短命和長命對象放在不同的類中來減少碎片。監(jiān)控碎片率使用 PerfView 或 ETW 事件監(jiān)控 GC 碎片率發(fā)現(xiàn)異常上升趨勢。理解零分配保證清掃階段不分配新對象所以不會觸發(fā)遞歸 GC。這意味著清掃的耗時是確定性的不會因 GC 嵌套而膨脹。12.3 清掃與壓縮的決策樹GC 回收階段 │ ├─ 標記階段完成 │ │ │ ├─ Gen 0? │ │ └─ 清掃重建段天然無碎片 │ │ │ ├─ Gen 1? │ │ └─ 清掃隨 Gen 2 一起處理 │ │ │ ├─ Gen 2? │ │ ├─ 碎片率 50%? │ │ │ ├─ Yes → 清掃 → 壓縮 │ │ │ └─ No → 清掃不壓縮 │ │ └─ 并發(fā)清掃? │ │ ├─ Yes → 后臺清掃 │ │ └─ No → STW 清掃 │ │ │ └─ LOH? │ ├─ 手動壓縮? │ │ ├─ Yes → 清掃 → 壓縮STW耗時高 │ │ └─ No → 清掃不壓縮 │ └─ 碎片率 70%? │ └─ 仍不自動壓縮LOH 壓縮代價過高十三、深入壓縮的引用修復細節(jié)13.1 引用修復的挑戰(zhàn)引用修復是壓縮階段最復雜的部分面臨以下挑戰(zhàn)引用來源多樣棧引用、堆引用、靜態(tài)字段、句柄表、GC 內(nèi)部結(jié)構(gòu)每種來源的修復方式不同。引用目標可能移動被引用的對象可能在同一段需要修復、在不同段不需要修復因為 GC 內(nèi)部結(jié)構(gòu)已經(jīng)處理了跨段引用。修復順序必須先修復所有引用再移動對象數(shù)據(jù)。否則修復時找不到舊地址。13.2 棧引用的修復棧引用的修復是最直接的部分。在壓縮開始前所有應(yīng)用線程被掛起GC 可以安全地掃描每個線程的棧幀// 棧引用修復簡化示意 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(); } } } }棧引用修復的關(guān)鍵點線程必須掛起修復棧引用時應(yīng)用線程不能運行否則棧內(nèi)容可能被改寫。寄存器也需要修復除了棧引用掛起時保存的寄存器快照中的引用也需要修復。修復是原地進行的直接修改棧幀中的引用值不需要移動棧本身。13.3 堆引用的修復堆引用的修復比棧引用復雜得多。存活對象內(nèi)部的引用字段可能指向同一段中的任何對象也可能指向其他段。只有指向同一段的引用需要修復// 堆引用修復簡化示意 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; // 只修復指向同一段的引用 if (target segment-start target segment-end) { *(Object**)ref_addr target-GetNewAddress(); } } obj obj-GetSize(); } else { obj obj-GetSize(); // 死亡對象跳過 } } }堆引用修復的耗時取決于引用字段的數(shù)量。一個包含 10 個引用字段的對象修復時需要檢查 10 次、最多更新 10 次。對于引用字段多的對象如字典、列表修復耗時可能顯著高于簡單對象。13.4 句柄表的修復句柄表的修復相對簡單因為句柄表是一個集中管理的數(shù)據(jù)結(jié)構(gòu)// 句柄表修復簡化示意 void FixHandleTable(heap_segment* segment) { for (HandleEntry entry : handle_table) { if (entry.target segment-start entry.target segment-end) { entry.target entry.target-GetNewAddress(); } } }句柄表的大小通常遠小于堆修復耗時可以忽略不計。但需要注意固定句柄pinned handle——固定句柄指向的對象在壓縮時不能被移動壓縮算法需要跳過這些對象。十四、深入壓縮算法的變體14.1 傳統(tǒng)壓縮移動對象前面描述的壓縮方式是移動對象將存活對象從舊地址復制到新地址。這是最常見的壓縮方式優(yōu)點是實現(xiàn)簡單、碎片消除徹底。但移動對象有一個問題指針不變性。如果外部代碼持有對象的原始指針如通過GCHandle的固定句柄移動對象會導致指針失效。這就是為什么固定句柄指向的對象不能被移動。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)復雜、間接尋址有性能開銷。.NET Core GC 目前不使用這種方式但在 .NET 7 中引入了更細粒度的段級壓縮優(yōu)化。十五、結(jié)語清掃和壓縮是 GC 回收階段的兩個核心操作它們共同決定了 GC 的內(nèi)存效率和暫停時間。清掃通過 intrusive list 技術(shù)實現(xiàn)了零分配耗時穩(wěn)定且可預(yù)測壓縮通過移動對象和修復引用消除了碎片但代價較高。.NET Core GC 的設(shè)計哲學是能不清壓就不清壓必須清壓時盡量并行化。通過碎片率閾值、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
返回資訊列表
国模精品一区二区三区苹果色戒| 欧美精品 - 91爱爱| 亚洲资源网| 人人人人插| …中文字幕亚洲乱,97人妻无码费视… | 香蕉国产精品麻豆亚洲欧美日韩| 丁香婷婷大香蕉| 亚洲无码一区成人免费午夜| 亚洲超碰在线| 波多野结衣AV无码一区| 老女人爆菊| 影音先锋每日最新资源在线观看| 精品九九淫乱男| 天天操天天舔| 欧洲无码一区二区| 370p日韩欧美亚洲精品| 男人的天堂三级| 日韩乱伦影音先锋| 亚洲图片欧洲图片aⅴ| 亚洲阿v天堂无码z2018| 超碰99热中文字幕| 97资源制服丝袜| 日本韩国国产精品一区| 国产aⅴ无码片毛片一级网站| 久久精品| 97色操| 91 手机在线播放 绯色| 國產尤物AV尤物在線觀看| 大香蕉淫人网| 久久伊人东京热| 91强在线播放| 懂色av一区二区三区天美传媒| 91精品人妻一区二区三区蜜桃臀| 激情五月天综合网| 国产无套粉嫩白浆在| 亚洲精品尤物yw在线影院| 亚洲日韩黑丝| 91高清欧美| 欧美女同在线| 天天干夜夜操一区二区| 国产精品电| 超碰97在线色男人??| 九色 人妻 大香蕉| 日韩97视频!在线| 欧美性天天影视| 熟女人妻一区二区三区免费看 | Sekablack无码一区| 精品人妻视频一区二区在线播放| 国产传媒美日韩av| 开心婷婷五月| 97香蕉网| 国产对白刺激视频| 久久精品熟女亚洲AV麻豆软件| 欧美人妻熟女在线| 久操国产在线| 欧美另类精品xxxx| 中文字幕久热视频在线| 乱论91| 夜夜做夜夜爽精品视频| 香蕉色网| 亚洲狠狠入| 9999久久久久| 亚洲无码 国产无码| 亚洲无码视频免费在线观看网址!| 一区二区三区国产在线播放 | 在线情色电影 91大 | 久久亚洲AV成人精品无码| 在线视频97| 欧美日韩中文字幕人妻| 国产一区二区三区白丝| 日本天天干天天日一区| 日韩色女精品| 国产自制av蜜乳| 国产高清免费不卡av| 免费A V在线播放| 日本中文字幕在线视频| 亚洲乱色视频一区、二区在线| 久久99草| 国产精品亚洲无码| 在线 亚洲 网爆 自拍| 亚洲久草AV色图| 九九九九九九九九九五码| 色97欧美| 国产日韩手机视频在线| 精品国产一区二区三区av在线资源| 中文字幕乱碼在线| 啊啊啊慢点| 入口操逼网站| 超碰视97中文| 国产精品视频内谢女人| 日本一区二区三区欧美日韩中文字幕| 免费精品AB| 久久久久婷婷| 91熟女视频网| 国产精品青草综合久久| 啊啊啊男女| 亚欧性爱ab| 91精品免费| 先锋色眉乱伦资源| 婷婷五月天AV| 伊人97色天使| 激情抓乳插进去啪啪啪日韩| 2026国产精品视频| 国产无套粉嫩白浆在| 看看日B真人视频| 日韩AV一起草| 亚洲精品国产精品成人| 蜜桃视频一区二区三区在线观看| 亚洲日韩黑丝| 91精品国产综合久久久蜜臀| 免费视频在线一区二区不卡| 久久精品中文| 高清无码网址| 蜜臀AV秘一区翔田千里| 欧美丰满少妇交换91欧美精品| 欧美亚洲激情一二三| 在线日韩精品一区二区三区| 欧美亚洲| 超碰97在线色男人??| 视频分类 国内精品| 蜜臀AV一区二区三区| 国产精品肉丝自拍| 国产AV高清AV无码| 18啪啪手机免费性爱| 四虎影视国产精品| 熟女精品一区二区在线观看| 青草视频在线看看看看看看看看看| 激情色图| 欧美A√综合网 | 亚洲色图片区| 亚洲自拍偷拍视频在线| 视频国产精品未满十八禁止在线观看| 激情文学小说一区二区| 综合亚洲欧美| 欧美日韩性感| 日本操逼视频导航| 涩涩这里只有精品视频| 亚洲色图欧美一区二区不卡| 国产精品久久久久久久久久久久久久| 操B久久| 91逼逼女人91| 欧美躁死她一区二区| 欧美大香蕉同搞| 熟女乱伦A| 欧美不卡五十路| 国产白丝网站| 丰满人妻一区二区中文| 久久妇| 2020中文字幕在线| 一级免费啪啪片| 久久人体一区二区| 黄片国产精品一区二区| 2024黄色视频| 成人无遮挡毛片免费看| 无码最新| 欧美第一页性| 噜噜噜久久亚洲精品色情| www.一本大99| 精品少妇人妻| 啊啊啊啊操死我| 美女被啪到深处抽搐视频| 一区二区三区视频| 亚洲av淫乱| 国产综合在线视频网站| 免费看日产一区二区三区| 亚洲三区视频| 九九久久九九久久| 久草草一二三四区久久| 国产成人五月天丁香花| 精品久久无码午夜福利| 欧美亚洲日本视频久久久| 伊人久久国产免费观看视频| 绯色AV粉色AV蜜臀AV| 2019亚洲男人天堂| 69精品| 翔田千里无码中出中文字幕| 在线性黄高清免费视频| 久久性爱视频| 加勒比久久av| 欧美一级美片在线观看免费| 黑操B| 天天干1区2区在线| 国产成人无码a| 精品一二三区女同| 做爱A级亚欧| 久久精品久久九九精品| 93人人操人人| 色哟哟-国产专区| 蜜桃臀av一区二区| A片 AV一级在线播放观看免费| 亚洲中文字幕一区| 老司机射| 九九九不卡| 懂色AV蜜臀无码精品APP| 嫩草 人人网精品| 91白虎| www.99在线| 九九九久| 日韩欧美女优电影| 国产精品一区二区密臀| 天天日天天色| TS人妖另类精品视频系列| 伊人激情| 伊人骚琪琪亚洲天堂网站| 亚洲AV免费在线| 亚洲熟女综合网| 國產尤物AV尤物在線觀看| 99re这里| 97在线资源| 涩综合导航| 色天堂综合| 亚洲古典另类欧美在线| 99久久免费看精品国产一区| 熟妇熟女亚洲天堂网| 亚洲欧美日韩偷拍色图| 久久久爆乳翘臀一线天伦理视频| 男人午夜天堂| 欧美九一精品久久久熟妇| 黄色一级视| 97亚洲精品超碰| 日韩在线一区高清在线| 五月天我淫我色av| 亚洲激情片| 欧美日韩人人精品| 乱伦熟女区| 91视频综合网| 人妻精品4K4K4K4K4| 一本大道不卡一二三区| 亚洲欧美在线观看免费| 激情婷婷丁香网| 校园春色综合色| 国产日比| 国产又黄又爽| 伊人欧美大香蕉视频| 啊视频在线| 久久精品黄色| 殴美在线AⅤ| 天天舔天天| 亚洲成人久久美女| 日本色色色视频| AVE乱伦| 国产乱码久久久| 男人的天堂日韩| 人妻人妻天天碰| 无码91| 婷婷四五区| 久久久久国产精品片区无码直播| 欧美成人9797| 91美女丝袜诱惑视频| 精品国产久热在线观看| 91在线无码精品秘 软件| 久久九九视频九九视频| 亚洲一欧洲中文字幕在线| 天天躁日日躁成人字幕aⅴ| 牛牛AV人人夜夜澡人人爽| 亚洲综合69| 超碰调教97| 67914亚洲精品| www.yw尤物| 一级成人性爱| 被窝影院午夜看片无码| 婷婷六月天| 欧美日韩国产三级黄色| 6080YYY午夜理论片在线观看| 久久亚州大香蕉| 久久激情四射婷婷丁香五月天| 欧美内射少妇| 丰满欧美放荡少妇在线| 美女91AV| 性爱Av免费| 亚洲国产成人7777| 亚洲成A∨人影院在线欢看| 国产女人成人精品视频| 厕所偷拍在线| 欧美少妇高潮视频| 免费av在线播放二区| 中国探花熟女| 亚洲男人的天堂亚洲| 色狠人在线99| 日本Suv精品一区二区| 麻豆国产视频精品观看| 成人资源中文字幕在线观看天天| 青草视频人妻在线观看| 91精品人| 91逼逼女人91| 久久精品操| 最新国内自拍av免费| 日韩欧美大力操| 蜜臀久久99精品久久久老,,| 国产av色网| 免费αⅴ在线观看| 啊啊啊好湿久久| 草草草视频| 亚洲AV无码成人精品久久| 国产色呦呦| 狠狠2050在线观看| 亚洲97久久精品亚洲| 曰本91情色| 少妇专区一二三四五| 艳美熟妇先锋一二三区| 91日本在线观看| 极品色电影院| 色婷五月| 日本淫色网| 强奸抽插av| 目产99999久久999| 国产午夜福利专区综合| 免费网站观看www在线观| 公司1区2区3区精产精| 成人性爱全视频观看| 亚洲素人网| 九色精品视频导航1| 久久视网78| 三级激情网站| 大香蕉日亚洲日本亚大 | 黄资源| 国产一进一出视频网站| 自拍啪啪视频| 亚洲精品欧洲精品| 亚洲超碰在线| 97欧美视频| 麻豆性爱视频在线播放| 天天搞在线综合网| 东京热天堂网| 亚洲欧美日韩中文久久自慰| 小草三级久久观看| 另类小色呦| 后入式999| 久久秀这里有精品| 欧美日韩国产高清在线一二三区 | 中文97国产| 婷婷视频在线免费观看| 97视频免费播放| 色综合超碰超| 综合网欧| 亚洲 欧美 日韩另类 麻豆| 一级A片女人高潮叫床| 精品一区二区三区蜜桃臀赵总 | 亚洲天堂另类小说男人| 狠狠狠狠狠狠| 日本综合久久| 国产一区二区av综合| 激情五月综合开心五月| 在线免费观看高清无码视频| 亚洲天堂久| 婷婷九月国产| 青青草玖玖爱| 国产精品天干天干综合网麻豆| 综合网欧美在线| 一区二区激情国产熟女| 丁香五月综合| 先锋精品av色鲁| 激情五月天网| 韩国久久97| 久久欧美按摩999| 少妇超碰在线| 国产夜夜操| 综合国产97| 99re6国产精品99re在线| 人妻熟女字幕一区二区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 久久99操天天日| 国产人妻天天干精品| 欧亚在线视频| ′ !γ}丶。。久久精品欧美一区二区三区 | 亚乱色| 少妇熟女一区二区三区| 国产91丝袜 在线播放| 国产精品精品系列在线观看| 日韩福利综合一区| 97国产高清视频在线观看| 欧美日韩性爱视屏免费看了| 成年人黄色视频免费| 精品-91人妻子系列| 天美传媒精品一区二区| 国产精品第一区第一页| 日本一区二区做爱的视频| 色小视频蜜乳| 久久深夜无码| 国产强奸无码乱伦| 色官网在线| 自拍欧美| 78超碰| 岛国大片在线观看网站入口| 激情五月天婷婷| 亚州综合AⅤ| 东亚亚洲无码高清| 久久久久久久 九九九九九九九| 啊啊啊好湿久久| 97资源站日韩| 日本欧美国内在线| 亚洲97网站| 偷拍 欧美 日韩| 亚洲成人综合在线| 欧美第一页| 隔壁邻居波多野结衣中文字幕 | 91丝袜美女视频| 国产精品69人妻无码久久久| 久久久久亚洲精品| 东京太热男人的天堂久久久| 亚洲天堂热| 伊人久久久日韩一区| 中文字幕在线2| 欧美一级特黄淫片在线观看| 久久111| 欧美一级在线观看成人 | 六九九九| 韩国一级做a久久久久| 天天狠| 国产精品美女久久久久久网站| 五月天激情网图片| 超碰97人妻| 精品无吗久久| 婷婷五月综合在线| 男人天堂2030| 色噜噜狠狠色综合日日| 亚洲AV无码乱码在线观看性色| 观看免费区二区三区二| 中文?日韩?免费?精品| 亚洲无吗在线视频| 国产精品农村妇女精品| 亚洲青青青视频在线| 十八禁视频一区二区| 夜色五月天| 狠狠久久手机视频精品| 亚洲有码第一页| 狠狠穞A片一區二區三區| 夜夜躁狠狠躁日日躁av| 国产免费久久精品99re韩国| 一区二区三区精品久久| 强奸乱伦AV网址| 91四海无码日韩欧美| 日韩精品人妻中文字幕有码午| 日本天天操| 好色综合| 日韩在线观看AV| 人妻在线大香蕉| 亚洲情色电影网| 在线国产一区二区av| 乱操乱伦AV| 亚洲成a人v欧美综合天堂下载| 久久6热精品99视频| 日韩精品中文字幕二区| 日韩Va亚洲va欧美Ⅴa久久| 射久久| 人妻熟女一区二区三区视频| 色偷偷男人的天堂麻豆| 绯色AV粉色AV蜜臀AV| 亚洲精品一区中文字幕乱码| 欧美,日韩,亚洲视频| 狠狠色伊人亚洲综合网站色| 成人国产视频在线观看| 久久东京热久久| 国产免费一区| 亚洲色偷偷色噜噜狠狠99网| 99ri精品| 91老司机在线视频免费观看| 2020中文字幕| 精品久久久久成人码免| 岛国片在线观看视频亚洲| 亚洲精品男人的天堂| 中文字幕久热视频在线| 国产成人手机视频激情| 波多野42部无码喷潮在线观看 | 中文一区二区婷婷视频| 狠狠爱AV| 色九久| 欧美色图91| 好吊色综合| 久久国产精品m码| 天堂性色| 测评在线观看AV| 日韩有码中文字幕女同性恋| 欧美日韩国产成人高清| 岛国片国产成人亚洲播放| 日本色色视频网站| 激情丁香五月婷婷| 成人精品电影| 哈哈操 大香蕉| 日韩精品中文字幕人妻| 国产精品爽爽va在线观看98| 亚洲激情在线| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 欧美日韩一区二区三区四区蜜桃| 精品久久人妻成人网| 亚洲天堂另类小说男人| 免费精品AB| 丁香九月 婷婷| 91爽啪| 夜夜春夜夜操| 欧美亚洲| 欧美精品三区| 老鸭窝成人| julia中文字幕在线观看| 一二三四视频在线社区中文字幕| 天天添天天干电影| 亚洲色图第四色| 久操网址| 偷拍在线观看视频| 亚洲成人久久一区二区| 亚洲成成熟女人综合一区二区| 精品日韩中文在线| 色香av| 夜夜爽77777| 久久爱超碰网| 亚洲午夜av| 蜜桃视频精品一区二区| 97av,com| 午夜欧美J进J出白浆流出久久久 | 江都AV在线| www狠狠| 99只有精品| 免费看久久久性性| 久夜操| 欧美亚洲中文字幕| 夜夜高潮夜夜爽夜夜爱爱一区| 91精品又粗又猛又爽| 欧美麻豆成人同性GⅤ在线| 精品人妻一区二区三区四区| 九九热九九热| 91精品女厕偷拍视频| 97在线观看免费视频l| 久久直播国产| 日夜伊人网| 九九热五区| 天天操天天舔| 张柏芝国产一区在线观看| 97色色网| 亚洲va有码在线天堂| 亚洲操操操无码| 中文字幕在线观看第二页| 97在线视频观看网站| 久久丝袜| 任你干在线视频| 美国一区二区免费视频| 嫩草美女久久| 大香蕉狠狠爱| 色情婷婷久久五月天| 99少妇精品视频| 亚洲毛片一级带毛片基地| 91爱啪| 亚洲成人AB| 美国久久一二三四| 欧美老熟另类| www.狠狠操| 日韩中文字幕人妻视频| 亚洲色电影在线| 四虎在线免费视频| 亚洲一区二区三区欧美日韩| 免费99精品国产自在在线| 欧美午夜精品久久久久久超碰| 欧美日韩国产三级黄色| 中文字幕国产在线天堂| 久久在肏| 97视频播放| 曰韩少妇无码| 日韩78m视频| 中文有码第五页| 88xx成人精品视频| 综合久久久久久久久91| 天美传媒AV在线播放| 日日骚av| 亚洲狠狠入| 97在线欧| 蜜桃久久一区| 97在线/亚洲| 97欧美色综合| 久久97超碰香蕉| 丝袜无码a片| 97丝袜亚洲在线播放| 男人的天堂色偷偷青青草视频婷婷网| 亚熟在线| 美日韩一二三区| 狠狠操天天干| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 91中文字幕制服丝袜免费视频| 五月天偷拍| 99久久网站| 久草精品国产蜜臀 | 久久久久熟女| 日本天天干天天操一区| 91美女片在线| 亚洲综合影院| 人人爱人人乐人人操| 国产精品96久久久久久| 欧美亚洲手机在线| a片久久久久久久久久久久 | 乱伦3P视频| 欧美日韩第一页| 亚洲欧美日韩综合在线尤物| 日韩精品99999| 国产精品老熟女一区二区| 亚洲五月婷| 欧州色图区| 亚洲色欲一区二区三区| 亚州 综合 色图| 国产高清在线自在拍69| 大香蕉视频啪啪啪啪| 亚洲熟女av中文字幕| 亚洲视频中文一区| 岛国视频一二三区| 亚洲色系另类精品国产| 超碰人人妻| 色女综合| 日韩黄色小说| 97精品网| 欧美αv.com| 天天干夜夜鈤| 女沟厕偷窥piss小便| 国产精品麻豆免费视频| 久久香蕉综合一本到3atv| 五月天激情小说网| 九九九九久久久| 久久精品一区| 蜜桃臀av一区二区| 亚洲欧美不卡线| 26uuu性物| 亚洲欧美精品一区天堂久久| 四虎884a| 国产97亚洲| 天天操夜夜操狠很操| 九月丁香综合网| 精品视频123区小说区| 小骚逼被操的爽不爽| 午夜传煤十二区精品| 国产精品高清2021在线| 日欧操屄视频| 亚洲情色在线| 丁香六月婷婷久久综合| 8x福利精品第一福利视频导航| 我要去看2个日本美女.com曹逼| 日本操大逼| 91青青在线视频| 密臀AV在线| JIZZJIZZ亚洲女人被躁| 国产网站在线播放| 中文字幕久久亚州无码| 麻豆啪啪啪视频| 丁香色色网| 韩国黄色片精品久久久| www网站黄| 青青草一本道福利视频| 久久亚洲熟妇在线视频| 精品一区96| 亚洲不卡av在线| 国产乱伦亚洲| 97天天插| WWW操逼| 男人的天堂不卡一区二区 | 色亚州人久干视频在线观看免费版 | 欧美日韩久久精品爱爱| 久久精品国产亚洲AV无码电影| 啊啊啊好湿国产一二| 奶水 人妻 哺乳 在线| 日韩激情啪啪| 欧美极品色| 欧美成人AⅤ大片在线观看| 日本日日色视频| 97爱爱| 素人美腿视频网站| 97超碰精品| 亚洲激情网一二三四区| 外国91| 人妻激情另类| 色综91| 曰韩精品九九无码| 蜜臀久久99精品久久久久久| 看黄片视频免费| 少妇99| 黄色免费网页无码| 超碰在线综合97| 亚洲图片偷拍视频区| 中文字幕欧美日本乱码一线二线| 欧美亚洲色图另类国产| 超碰在97| 天天天天天干夜夜夜夜夜操| 欧美BT 亚洲色图| 久操操| 久久久久久大| 久久久久久久综合,国产| 国产肏逼网站| 91成人国产综合久久精品蜜月| 亚洲免费成人在线高清无码视频 | 啊啊啊啊嗯嗯嗯用力好爽| 美女网站91| 极品色社| 99精品欧美一区二区三区桃色| 97精品97久久| 大香蕉啪啪啪| 国产精品麻豆成人av| av东京热男人的天堂| 91爆操视频| 新怡红院| 第二页中文字幕| AV乱伦专区| 大香蕉啪啪啪啪在线| 国产小黄片在线免费观看| 亚洲欧洲日韩中文字幕一区| 日韩人体偷拍| 亚洲高清无码在线桃色| 青青草依人大香蕉| 日日干日日操五月天伦理视频| 中日亚韩免费视频| 亚洲欧美清纯| 日日A∨| 日本三级韩三级99久久| 国产色图乱伦| 久久久久久久久女黄| 亚洲。日韩。欧美| 国产精品爽爽va在线观看98| 91美女高潮| 国产成人网址| 国产真实野战在线视频| 女人综合网| 加勒比性爱成人在线| 亚州情色j区| 日韩欧美午夜视频在线| 激情文学88| 蜜桃网熟妇| 日韩精品高清资源在线| 强奸乱亚洲| 欧美黄色片在线播放| 2020中文字幕在线观看| 五月开心久久AV官网| 极品色社| 国产亚洲综合欧美一区| 被男人添B超爽视频| 9久久精品| 久久久久久中文| 青娱乐av在线| 午夜120视频在线观看| 少妇激情一区二区三区视频| 久污| 超碰综合色| av操操不卡| 亚洲.欧美.丝袜.中文.综合| 极品白嫩美女白浆成人福利在线看| 无码一区免费在线不卡| 久草线上视频免费看| 大香蕉啪啪啪啪在线| 婷婷五月天AV| 亚欧国产无码精品在线| 亚洲黄色a级片| 26uuu偷拍亚洲欧洲综合| 97香蕉网| 亚洲天堂男人天堂| 97亚洲中文| 亚洲熟女乱综合一区二区三区| 日韩人妻大香蕉| 丁香色五月 97干| 日韩一级成人毛片免费观看 | 国产AV毛片| 日韩中文字幕人妻视频| 国产av强奸美女| 国产精品探花色| PMv在线观看| 中国农村熟妇毛片视频| 国产成人 综合亚洲 天堂| 丝袜人妻av一区二区| 亚洲在线| 俺去啦俺来也久久综合| 亚洲se91| 欧色网址| 青青操在线亚洲视频观看欧美在线 | 国产后入清纯| 亚洲人精品午夜不卡| 亚欧操逼片在线观看 | 97视频在线免费看| 欧美亚综合色图| 78p欧美| 日韩99神马视频播放| 天天综合网入口~91| 大香蕉之青青草原| av线电影| 又黄又硬又粗又长国产视频| 少妇高潮一区二区三区在线| 麻豆熟妇乱妇熟色A片在线看| 揉揉揉夜夜| 国产三级片在线观看| 私人尤物在线精品不卡| 免费观看网黄| AV污污污污| 免費黃色視頻觀看一| 亚洲欧美精品一区天堂久久| 欧美熟妇乱码在线一区| 91 亚洲情侣偷拍 久久| 97超碰影音| dy888午夜老子影视达达兔| 日韩激情无码影院| 婷婷午夜成人色中色| www超碰| 亚洲天堂另类小说男人| 97天天弄| 亚洲图片欧美偷拍| 国产精品无码成人精品| 香蕉人人操tv| 五月丁香六月婷| 日日夜夜青青草母狗| 久久华人网| 九九AV| 国产成人自拍视频视频| 日本 欧美 国产一区| 1956日韩精品| 天堂av最新电影网| 乱伦一二三| 小情侣高清国产在线视频| 亚洲性综合9| 97精品国产精品免费观看| 日本布卡一区二三区| 国产辣妈在线视频福利| 亚洲国产一区二区三区四区国产| 99久久久无码| 少妇高潮喷水无套久久久久久| 亚洲欧美不卡线| 欧美日韩性爱无码| 97干在线看| 色九久| 这里都是精品在线观看| 美女干逼2| se吧提供国产乱老熟视频胖女人| 欧美另类色图片| 97久久超碰日韩精品| 图片区小说区| 久久骚| 国产成人综合在线播放| 国产高清不卡视频| 69视频入口| 台欧久久精品视频| 综合 亚洲 欧美| 九九色逼| 91女日逼| 国产精品交换一区二区| 久热这里只有精品9| 操逼操逼逼操操逼91 | 91麻豆天美国产欧美| 日韩射图| 中文字幕av亚洲在线| 亚洲综合九| 呦呦影院| 天天综合网91入口| 大肥女高潮bbwbbwhd视频| 中文字幕jul-617人妻熟女| 超碰在线第一页| 日韩免费在线视频观看| 吉川爱美98堂在线| 国产精品久久久吖| 18一区二区三区| 91骚熟女| 欧美专区第一页| 精品黄色电影| 久操黄色视频| 少妇久久久久久| 日韩A优精品在线观看| 91女人的网站| 大香蕉淫人| 性色一线| 欧差乱伦二三| 麻豆九九九| 国产黄色在线播放观看| 日韩久久艹| 中文精品一区二去| 日韩一级二级三级免费看完整版国语版| 国产婷婷综合在线观看| 欧美一二在线| 亚洲国产美女久久久久| 久久一留热品黄| 欧美精品23| 91影视亚洲| 在线亚洲丝袜视频网站| 日韩91网| 久久婷婷国产一区二区色| 视频国产欧美在线播放| 麻豆精品天美| 玖玖在线视频| 婷婷av在线中文字幕| 日韩欧美中文字| 亚洲成人碰碰| 夜夜天天噜狠狠爱2021| 欧美的精品的视频| 日韩啪啪啪视频| 成人看片网站| 国产高清精品一区二区三区毛片| 97爱啪| 久久久工口| 久久精品店| 日韩一级二级三级在线不卡观看完整| 激情终合网| 色婷婷五月天| 精品一区二区成人| 91伊人| 国产蜜臀在线| 国产精品欧美激在线| 色九九综合| 8x福利精品第一福利视频导航| 中文字幕欧美精品亚洲日韩蜜臀| 青苹果影院男人的天堂| 色婷婷综合网站| 色色网91| 91亚州| 久草综合网| 超碰1997| 97超碰色屌| 国产欧美日韩在线观看麻豆传媒公司| 国产AV激情无码久久无码| 日本不卡一区二区| 久草看看看| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 熟妇高潮精品一区二区三区下载| 中亚av| 欧美啪啪女女| 久久精品国产亚洲AV片多多| 99久久亚洲精品无码毛片潘甜甜| 欧美色吧综合| 美女黄码视频午夜| 美骚妇av高清在线| 亭亭丁香激情| 亚洲天堂中文字幕无码男同| 日韩欧美经典在线观看| www.大香| 国产在线视频二区| 伊人一级免费黄片| WWW.操逼.COM| 欧美极品| 97超碰久久| 97手机日韩| 91色插| 自拍六区| 九九热av| 亚洲久久久| 日韩色| 白丝一区| 国产精品视频内谢女人| 亚洲无992tv| 在线综合网| 日本影视久久免费| 四虎精品永久在线播放| 不卡日本一区二区| 91无遮挡| 人人操人人色网| 大香蕉欧美| 婷婷色色五月天福利| 在线日韩日本亚洲国产| 国产精品久久久啊| 婷婷伊人五月| 囯产精品久久久久久久久久梁医生 | 亚洲综合在线高清| 美女淫穴| 亚洲熟久久| 超碰精品人妻狠狠干| 正宗无毛一线天嫩逼| 亚洲综人网| 国产成人五月天丁香花| 久久精品一区二区| 乱抡国产91| 久久成人午夜精品影院| 国产亚州高清国产拍精| 影音先锋国产精品| 999在线电影香蕉| 欧美少妇一区二区三区| 99re只有精品| 欧美日韩美女精品久草一区二区三区| 麻豆色约约| 欧美亚洲天堂| 自拍偷拍亚洲熟女妇人精品| 香蕉人人操tv| 日韩欧美女优电影| 婷婷情色五月天| 亚洲啪啪啪啪视香蕉| 精品无码少妇| 偷拍 欧美 日韩| 一区二区三区四区免费视频| 久久五月视频| 欧美综合色站| 久久r精品| 91天天综合| 高清国产成人无码| 中文字幕成人| 亚洲熟女综合| 男人天堂最新手机版在线青青草| 美女久久久| 性色生活片久久毛片婬片免费放女人一级毛片| caoni国产亚洲av| 99爱在线视频| 91总综合网| 综合亚洲欧美| 天天躁日日躁AAAAXXXX国产| 色播综合| 91精品婷婷国产综合久久竹菊| 欧亚 另类 久| 欧美精品成人在线播放| 五月丁香影院| 亚洲黄色网址| 国产精品电影大全| 91在线精品| 97se综合网| 99999久久精| 日韩丰满熟妇| 日本淫色网| 欧美日韩制服| 亚洲1区2区三区高清中文字幕| 蜜臀av一区二区三区免费观看| 99蜜桃臀久久久欧美精品网站| 色欧美综合| 日韩欧美国产高清视频| 91天美传媒精品| 日日摸天天爽夜夜欢| 操逼视频免费日韩无码| 久草精品国产蜜臀| 丰满人妻一区二区三区蜜桃视频| 久久av成人无码免费| 欧美熟女激情| 久久春色| 丁香啪啪| 色九九九九九九| 嗯啊抽插大香蕉网页| 人人操天天爽| 久久9久| 99激情视频| 美女天天干| 国产精品无码在线| 国产熟女精品区| 中国操逼无码| 视频在线观看一二三区| 啊啊啊好大好深| 日本岛国黄色网址| 欧美成人国产精品| 操逼片国产| 欲射影视| 91人妻精华帖| 国产精品熟女九九九| 人妻精品免费一二三区| 青青草原人妻| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 高清孕妇孕交 交孕妇| 欧美精品99久久久**| 97色妞| 亚洲国产尤物yw在线观看| 亚洲www91| 欧美激情另类一区二区| 一区二区三区蜜桃成人撸久久东京热| 中文?日韩?免费?精品| 中文伊人大香蕉视频| 大色综合| 一区二区久久天天干狠狠| 天美传媒婬乱| 96AV久久久| 亚洲国产ⅴ高清在线观看| 中文字幕78| 操逼视频亚洲| 五十路熟女,国产欧美精品区一区二区三区| 亚洲系列第一页| 激情文学小说一区二区 | 久久精品电影在线| 日韩精品一区二区三区四虎影视| www.男人的天堂| 久久色一区| 欧美亚洲第一页| 天天拍天| 色婷婷综合视频| 78久久| 国产精品亚洲四五区在线观看| 久综合国内精品自在自线| 麻豆天美在线喷水AV| 伊人色综合网电影| 亚洲图片91| 超碰97网址| 亚洲国产成人精品无码专区| 玖玖综合视频| 欧美九九爱| 18禁中文字幕| 蜜桃传媒视频第一区入口在线看| 亚洲第一综合| 一区AV| 青久久| 熟妇熟女亚洲天堂网| 美女视频尤物网在线看| 97资源站久久| 95精品在线| 久草久日| 九九九九九九九九九九九免费国产| 天美传媒AV在线播放| 丝袜综合| 久久久久久AV无码免费网站| 熟女人妻一区二区三区免费看 | 亚洲91亚洲| 国产中文字幕曰本毛片| 国产精品乱码久久| 99精品伊人| 久久极品一区二区| www.yeyecao| 久久9久久| 欧美72网页| 五月天啪啪| www.大香| 97香蕉网| 4tube欧美女厕所| 亚洲永久永久永久永久一级一级一级精品 | 亚洲欲色| 欧美与日韩97| 偷窥自拍亚洲色图| hd成人一区二区在线| JIZZJIZZ亚洲女人被躁| 四虎影视 亚洲无码| 超硑97精品| 久久久人体| 色青青久久影视| 久久精品久久久久久久久| 另类欧美综合| 欧美性天天影院| 97爱欧美| 素人播放一区| 久久人人爽人人爽人人片Ⅴ| 无码人妻一区二区三区色欲aⅴ| 伊人宅男大香蕉 | 国产熟女乱论| 在线毛片片免费观看| 抽插亚洲无码| 天天干夜夜| 国产精品久久久久久久久久久久久久久 | 亚洲 综合 欧美| 国产91久久九九免费精品无码| 欧美日韩黄片精品在线| dy888午夜老子影视达达兔| 国产超碰欧美| 人妻激情在线视频| 97er欧美性| 少妇69中文| 日韩AV中文字幕电影| 亚洲日韩AV视色| 五月天激情婷婷| 曰韩无码777| 午夜精品久久久久久久99蜜桃一| 亚洲图片激情综合另类| 中文字幕天堂在线| 少妇久久久久久| 夜色91| 操东北女人| 亚洲图片第一页| 97爱亚洲| 国产AV中文| 老妇女91| 91色香| 9118禁| 国产精品九九九| 97操| 日韩免费簧片| 中国熟女老妇仑乱一区二区三区| 天美传媒婬乱在| 精品久久久久久久| 东京热天堂网| 人人搞人人插人人操| 亚洲成人激情小说视频| 午夜精品久久一区二区| 亚洲阿v天堂在线| 视频国产成人精品日本亚洲18| 亚洲欧美日韩中文播放| aaaa黄片| 久久中出在线| AV99热18这里只有精品| 蘋果手機免費看成人Av|