色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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í)行任何清掃動(dòng)作之前必須先制定計(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%手動(dòng)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 手動(dòng)觸發(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ù)自動(dòng)決定是否啟用并行清掃。四、壓縮階段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ù)制會移動(dòng)對象如果先復(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) { // 對象需要移動(dòng)復(fù)制數(shù)據(jù) size_t size obj-GetSize(); MemMove(new_addr, current, size); } } } }復(fù)制階段使用MemMove批量移動(dòng)對象數(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è)手動(dòng)觸發(fā)的操作默認(rèn)不自動(dòng)執(zhí)行。這是因?yàn)?LOH 壓縮的代價(jià)極高——它需要移動(dòng)所有存活的大對象并更新所有指向它們的引用。// 手動(dòng)觸發(fā) LOH 壓縮 GCSettings.LargeObjectHeapCompactionMode GCLargeObjectHeapCompactionMode.CompactOnce; // 下一次 GC.Collect() 會壓縮 LOH GC.Collect();LOH 壓縮的觸發(fā)條件觸發(fā)方式條件說明手動(dòng)觸發(fā)GCSettings.LargeObjectHeapCompactionMode CompactOnce下一次 GC.Collect() 觸發(fā)永久模式GCSettings.LargeObjectHeapCompactionMode CompactEveryTime每次 GC.Collect() 都觸發(fā)不推薦自動(dòng)觸發(fā)無.NET Core 默認(rèn)不自動(dòng)壓縮 LOHLOH 壓縮的代價(jià)內(nèi)存復(fù)制所有存活 LOH 對象需要被移動(dòng)復(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 路徑。定期手動(dòng)壓縮在低峰期手動(dòng)觸發(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í)波動(dòng)最小因?yàn)樗灰蕾嚧婊顚ο髷?shù)與碎片率無關(guān)。壓縮最可變壓縮耗時(shí)波動(dòng)最大從幾毫秒低碎片到數(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? ├─ 手動(dòng)觸發(fā)? → Yes → 壓縮 └─ No → 不壓縮即使碎片率很高這個(gè)策略的核心考量壓縮的代價(jià)高壓縮需要移動(dòng)對象、更新引用耗時(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)不自動(dòng)壓縮。最近一次壓縮的時(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 不自動(dòng)壓縮但 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)存。空閑鏈表的節(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 壓縮手動(dòng)觸發(fā)無專門 LOH并發(fā)清掃.NET 3.0 支持增量清掃可配置零分配保證清掃階段不分配部分支持壓縮暫停時(shí)間30-100ms100MB10-50ms100MBUnity 的增量清掃是應(yīng)對移動(dòng)設(shè)備資源限制的特殊設(shè)計(jì)——將清掃拆分成多個(gè)小片段避免單次清掃暫停過長。而 .NET Core GC 更傾向于一次性完成通過后臺 GC 和并發(fā)壓縮來降低單次暫停的代價(jià)。10.2 為什么 Unity 的壓縮暫停更短Unity SGen 的壓縮暫停通常比 .NET Core GC 短原因有三堆更小移動(dòng)設(shè)備的堆通常只有幾十 MB而 .NET 服務(wù)端應(yīng)用的堆可能達(dá)到數(shù) GB。壓縮耗時(shí)與堆大小成正比。壓縮策略更保守SGen 只在必要時(shí)壓縮小代不壓縮整個(gè)堆。對象更小移動(dòng)應(yīng)用的對象通常較小復(fù)制代價(jià)更低。但這些差異也反映了平臺約束移動(dòng)設(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是手動(dòng)十二、總結(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 不自動(dòng)壓縮需要手動(dòng)觸發(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? │ ├─ 手動(dòng)壓縮? │ │ ├─ Yes → 清掃 → 壓縮STW耗時(shí)高 │ │ └─ No → 清掃不壓縮 │ └─ 碎片率 70%? │ └─ 仍不自動(dòng)壓縮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)可能移動(dòng)被引用的對象可能在同一段需要修復(fù)、在不同段不需要修復(fù)因?yàn)?GC 內(nèi)部結(jié)構(gòu)已經(jīng)處理了跨段引用。修復(fù)順序必須先修復(fù)所有引用再移動(dòng)對象數(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)行的直接修改棧幀中的引用值不需要移動(dòng)棧本身。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í)不能被移動(dòng)壓縮算法需要跳過這些對象。十四、深入壓縮算法的變體14.1 傳統(tǒng)壓縮移動(dòng)對象前面描述的壓縮方式是移動(dòng)對象將存活對象從舊地址復(fù)制到新地址。這是最常見的壓縮方式優(yōu)點(diǎn)是實(shí)現(xiàn)簡單、碎片消除徹底。但移動(dòng)對象有一個(gè)問題指針不變性。如果外部代碼持有對象的原始指針如通過GCHandle的固定句柄移動(dòng)對象會導(dǎo)致指針失效。這就是為什么固定句柄指向的對象不能被移動(dòng)。14.2 間接壓縮更新指針另一種壓縮方式是不移動(dòng)對象只更新引用。具體來說不移動(dòng)任何對象數(shù)據(jù)。為每個(gè)對象維護(hù)一個(gè)轉(zhuǎn)發(fā)指針forwarding pointer指向壓縮后的邏輯位置。所有引用指向轉(zhuǎn)發(fā)指針而不是直接指向?qū)ο?。傳統(tǒng)壓縮移動(dòng)對象 舊地址: [ObjA][ObjB][ObjC] → 新地址: [ObjA][ObjB][ObjC][空閑] 引用 → ObjA 引用 → ObjA (新地址) 間接壓縮更新指針 舊地址: [ObjA][ObjB][ObjC] → 邏輯地址: [ObjA][ObjB][ObjC][空閑] 引用 → ObjA 引用 → 轉(zhuǎn)發(fā)指針 → ObjA (邏輯地址)間接壓縮的優(yōu)點(diǎn)是不需要移動(dòng)對象數(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ù)測壓縮通過移動(dòng)對象和修復(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视频| 国产又大又粗又色生活片亚洲国产精品成人久久久综合免费 | 国产一级片| 欧美少妇色综合| 中文字幕一区电影在线观看 | 97视频在线视频| 亚洲国产剧情少妇激情| 男人的天堂三级| 九色 人妻 大香蕉| 资源在线观一 二| 岛国片在线视频网站| 日韩专区久久久| 中文幕97| 情色五月天久久久| 精品无码一区二区| 99re9在线| 99热这里只有精品地址 | 一区二区精品日韩欧美在线观看 | 久久久久久97| 国内毛片欧美香蕉精品| 超碰久久精品| 在线免费观看高清无码视频| 国产精品久久久久久久久久久久久久久久久久 | 中文字幕蜜乳av| 亚洲 欧美 日本 国内 首页| 欧美97se| 久草毛片电影怡| 天堂资源站| 91人妻Pr| 国产九九久久久精品| ′ !γ}丶。。久久精品欧美一区二区三区 | 国产精品色约约| 中文字幕乱碼在线| 美女黄码视频午夜| chaopen97久久| 狠狠爱夜夜| 老熟女综合网| 亚洲国产天堂| 成人在线视频网| 青青青在线高清视频在线一二三四区| 九九九偷拍| 精品九九| 欧美 亚洲 在线| 淫荡网址| 亚洲综合一区二区| 亚洲精品久| 黑丝日韩av丝袜av| 蜜臀久久99精品久久久久久婷婷| 免费a v| 日韩精品在线放| 先锋激情∨在线视频播放| 精品少妇一区二区三区| 国产美女在线精品免费看| 国产精品探花在线| 久久欧洲| 秋霞Av理论一级在线| 婷婷AV一区二区三区| 国产成人精品亚洲日本| 亚洲AV无码久久精品蜜桃小说| 国产精品不卡一区二区三区| 黄色大片视频在线免费看| 午夜精品99久久久久传媒| 激情综合婷婷| 日韩成人性爱电影在线播放| 搡老女人老妇女老妇老熟女怎么读| 色香色香欲天天天影视综合网| 青青草在线视频欧美| 亚洲男人天堂2012| 日韩大香蕉AV影片| 国产自产自拍| 久久中出在线| 天天上日日上日韩精品| 九九热精品免费视频| 国产无码高清操逼视频| 激情综合网一盗摄| 中文字幕av色| 91老熟女视频| 久久亚洲不卡| 九九热九九| 久久亚洲精品成人av| 国产传媒1234区| 无码精品久久久久久亚洲| 亚洲操逼无码| 亚洲欧美综合图片| 黄网色一区二区三区四区精品| 97超碰影音| 26uuu成人影片| 亚洲国产一级精品毛一级精品看免费视频| 国产精品久久久蜜臀| 探花精品 一区二区| 大奶啊啊好爽| 欧美一级美片在线观看免费| 97超碰资源网| 激情久久av一区av二区av| 天色综合网| 亚洲色婷婷久久91| 99久久9| 日本大片日本一区二区免费高清| 久久久精品中文字幕麻豆| 欧美亚洲中文字幕| 尤物av网站免费在线播放| 熟妇色99| 97亚洲精品| 精品久久99| 无码高清操逼| 欧美日日人人天天| juliaann精品熟女一区| 人人操,操人人| 欧美 亚洲精品首页| 中文字幕av一区二区三区人妻少妇| 国产99999久久精品| 三级日本一区二区三区| 伊人午夜福利视频| 西西美女视频网| 亚洲色人妻综合| 人人操人人摸超碰| 干B| 青青操轻轻| 亚洲国产综合图区中文字幕 | 亚洲一区二区av| 免费农村成人少妇人妻Aa一区二区视频| 91扒丝袜综合在线| 中文字幕熟女人妻丝袜| 4399成人黄A片| 91老熟妇| 国产亚洲色婷婷久久99精品91 - 百度 | 亚洲砖码砖专无区2023| 久久九九视频九九视频| 色操逼网| 欧美日韩操操操| 色综合国产在线观看| 高清视频一区| site:sinbotex.com| 青青草国产一区二区三区| 蜜臀人妻少妇久久在线观看| 97在线免费看视频| 精产品久久| 久日综合网| 大屁股xxxxx| 口爆吞精在线观看| 国产精品自在线发布| 天天草天天日| 亚洲精品蜜桃久久久久久久| 少妇国产不卡| 欧美色图私拍91| 亚洲 欧美 另类 日韩 人妻一区| 欧美有码亚洲中文字幕一区二区三区四区| 久久久久女教师免费一区| 亚洲欧洲激情| 久久爱97| 久久久久久亚洲Av无码| 亚洲暴力强奸AV| 亚洲一本大道中文字幕无码在线| 在线国产探花| 天天日日舔舔| 97超碰中文字幕| 一本色道人妻久久| 国产最火爆久久国产网站网站| 亚洲精品尤物yw在线影院| 麻豆天天躁天天揉揉AV| 91新在线欧美| 加勒比少妇AV婷婷六月天超碰超碰| 91在线/欧洲| 欧美熟女激情| site:sinbotex.com| 韩三级a视频在线观看| 大黄片做爱的大的| 95精品在线| 人妻内射一区二区在线视频| 欧美激情综合网| 国产精品999zyz| 久久久人体| 欧美黄片欧美黄片xxx| 成年人性爱日韩| 精品熟女一区=区三区| 青青草原av| 男人女人18禁片免费看网站| 日韩不卡a级视频专区| 这里只有精品视频在线| 97久久天天综合色天天综合色电影| 国产AV天美传媒一区二区三区 | 91ise欧美| 男女激情黄色网址| 台湾肥佬网一区二区三区| 欧美日韩人妻精品系列一区二区三区| 午夜AV人气不卡| 好湿好紧好爽 视频| 中文字幕精品三级久久久| 性夜影院爽黄A爽免费动漫| www.色操逼| 日韩三级一区 | 九九色图| 蜜臀久久99精品久久久久久成人小说 | 人人妻人人爽| 一类av片在线看| 一区二区三区四区姦女| 精品高清av中文字幕| 精品一区96| 秋霞免费无码视频日韩A片| 嗯嗯啊操我| 91视频在线观看18| 九九九网站| 淫骚熟女一区二区三区| 青草草免费网站av| 欧美操人视频| 粉嫩国产精品久久粉嫩| 玖玖爱伊人玖玖爱| 日韩免费人妻色情网站| 高清国产精品无码| 男人的天堂日韩| 人妻乱仑一区二区三区| 啊啊啊无码| 超碰538| 双插性欧美一二三区| 亚洲人在线| 国产二区视频在线观看电影| 国产精品69久久久久孕妇欧美 | 涩涩这里只有精品视频| 九一屌逼| 一区二区三区免费岛国片| 亚洲影视第一页| 久久精品免费| 一本正道久久熟女| 欧美一级欧美三级在线观看| 你懂的在线观看区国产 | 国产最新小视频在线播放下载| 国产精品呦一区二区三区| 亚洲性爱成人| 欧美18老人禁| 97操97色| 草草电影院| 天天综合91入口| 国产25页| 五月开心久久AV官网| 午夜精品久久久久久久男人的天堂 | 91中文精品日韩欧美在线| 91一起操| 欧美综合站| 午夜无码精品免费看性色| 中字幕人妻一区二区三区| 先锋影音av先锋一区| 啊啊啊啊啊啊好湿好爽视频| 人人 操人人 操人人| 久久久无码精品人妻二区 | 中欧人妻丝袜中文字幕| 欲香欲色综合天天伊人| 伊色久人大在线| 97久久精品不卡| 中文字幕丝袜| 乱欲视频| 国产精品盗摄 偷窥盗摄| 日本淫乱女一区二区三区视频| 久久久噜噜噜久久久| 99福利社| 亚洲加勒比| 久日综合网| 中出后入| 亚洲全色网| 日韩欧美性爱电影在线观看| 国产日韩在线播放av| 精品少妇人妻av久久免费| 亚洲无码精品AV久久久| 日日日日做夜夜夜夜无码| 国产操偷| 日本天天人人狠狠在线日美女 | 操死我了嗯嗯嗯| 激情AV| 国产精品一区二区校花| 激情五月天视频| 920日本午夜免费| 国产天美传媒精品| 久久人妻熟女一区二区| 欧 美 自 拍 偷 拍| 97在线观看免费| 国产亚洲精品农村妇女| 欧美人人天天网| 欧美欲色| 奶水 人妻 哺乳 在线| 国产无码精品高清| 嗯阿好爽好紧| 欧美一级色| 蜜臀AV成人精品蜜臀| 狠日欧美| 夜嗨影院| 在线视频一区二区传媒| 亚洲系列第一页| 91爱综合| 大香蕉伊人亚洲| 99re99| 水野优香在线观看| 我中文字幕6区| 97国产人人| 久草大| 91路www| 青娱乐休闲视频在线观看| 日本一级婬片试看三分钟| 亚洲图片欧美日韩| 超碰97久久国| 日韩色欲久久一二三四区| 97激情97激情| 亚洲天堂精品日韩电影| 精品久久視頻在线| 色欧美亚洲| 国产亚洲99久久精品| 亚洲综合射| 好一吊区二区| 男人的天堂一区三区| 国产第二页| 人人玩人人添人人澡免费| 美女高潮视频91| 少妇一区二区三区| 嗯嗯啊啊操死我| 亚洲高清欧美总合| 色婷婷五月综合| 欧亚 另类 久| 操碰97| 啊啊啊啊啊啊在线| 久草综合京东| 国产精品亚洲一级av第二区| 亚洲97p| 国产精品无码成人精品| 天天夜夜久久| 中国一区二区亚洲人妻| 大香蕉2017| 日日夜夜干| 精品在线78| 人妻熟女午夜精品在线| 国产高清自拍| 国产天美传媒精品| 亚洲五月天激情| 亚洲欧美日韩中文播放| 人妻 欧美 中文| 嫩草影院在线观看精品| 精品999一区二区| 欧美久久婷| 国产51色综合久久免费| 性欧美| 小泽玛利亚一二三| 免费看黄片现成| 97在线观看免费视频l| 91精品人妻电影| 91丰满| 97这里都是精品| 一本一道vs波多野结衣| 国产高清自拍视频| 中文字幕精品专区搜索结果91| 久久9视频| 国产精品视频内谢女人| 久久久久久久久久久久欧美日| 欧美人人AAA| 97国产|免费| 91女神在线视频| 日日操丁香五月天| 96精品久久久久久久久| 丝袜美腿91| 九九英色视频| 成人欧美一区二区三区黑人一| 日本一区二区亚洲综合| 啊啊啊轻点在线观看| 91亚洲不卡一区| 性做久久久久久免费观看软件| 少妇熟女一区二区三区| 97视频在线观看网站| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 乱伦1色页| 屁股久久久久久久久久| 欧美淫乱视频| 嗯嗯啊啊操死我| 欧美一区二区三区日韩| 国产小视频91| 黄色网址在线免费观看| 人人摸.人人色| 手机在线大香蕉| 日韩 欧美 国产 麻豆| 国产suv精品一区二区四| 偷窥自拍A片| 九九精品99| 热99这里有精品综合久久| 91欧洲入口| 精品国产久久乱码| silk lablo在线观看一区二区| 91亚州日韩高清| 久9热| 国产动漫操逼视频| 欧美日综合| 亚洲古典另类欧美在线| 欧美成人性爱视频免费观看| 人人操,人人插| 91超级碰| 婷婷色五月激情| 秋霞影音一区二区三区 | 日本高清一区二区在线| 夜嗨影院| 婷婷中文网| 最新啪啪视频| 殴美大黄片| 欧美东京热精品A∨| 日韩国产欧美伦理在线| 日本色色色视频| 国产第25页在线观看| 亚洲av影音先锋| 性色av网站| 国产激情在线观看| 99色综合| 好湿好紧好爽 视频| 91久热这里只有精品| 91九久| 亚洲中文字幕乱码无码一区二区| 96AV久久久| 九九九九88| 亚洲欧美另类少妇精品| 无码人妻精品一区二区三区九九 | 久久久专区| 免费亚洲国产精品久久一区| WWW.加勒比人妻一区不卡.com| 青青草操逼逼视频| www亚洲免费| 久久久久久久久久久精| 亚洲欧洲日产国产综合网| 欧美白嫩在线放| 伊人操| 五月天伊人| 狠狠狠一区二区三区| 色老汉色| 九九九九一区| 影音先锋日本乱伦| 国产亚州高清国产拍精| 99啪啪| 日韩人妻网站| 精品大全99999| 亚洲激情视频| 操逼天美3区| 麻豆啪啪啪视频| 久久久久成人蜜桃精品| 操死我了嗯嗯嗯| 欧亚三区动漫| 人人妻人人澡人人爽久久av| 26uuu性| 欧美亚洲高清晰| 天天爱天天操| 92人人操人人| 操人妻少妇中文 | 色综合美国| 久久夜精品一区二区三区| 日本超碰97日韩精品人妻| 久久久免费高清中文视频| 欧美不卡五十路| 入口操逼网站| 97超碰逼| 亚洲人精品久久久| 国产精品久久久久无码A√| 91精品丝袜在线观看| 久久免费看高潮毛片韩国| 玖玖爱视频网站| 性在久久久久久| 96AV精品| 91美| 1024人妻| 欧洲站一级二级三级h| 综合av社区| 校园春色 男人天堂 | 大香蕉免| 亚洲性天堂| 亚洲Av无码成人精品国产| 自拍欧美| 国产v片在线免费观看| 国产剧情AV不卡在线观看| 亚州春色| 亚洲国产精品成人综合| 美女露胸露奶头| 超碰人妻久久| 99色视频| 999精品久久久久久久| 亚欧性爱ab| 日韩图区| 欧美一级黄片视频在线| 99re69| 殴美牲| 超碰99re| 日本高清电影欧美色图| 久9精品| 99精品视频在线观看| q2午夜理论片夜色av| av天堂精品久久| 成人熟女区| 精品国产无码中文| 日韩午夜国产| 中文字幕精品探花视频| 国产精品制服丝袜中文字幕日韩一区二区三区| 免费国产视频| 国产大片精久久久久久| 黄色操人| 国产SV一线| 国产精品高清2021在线| 日本蜜桃| 欧美性爱视频免费一区一A| 九九九九九九免费视频| 日韩一级成人毛片免费观看| 天天干夜夜操一区二区| 国产大学生高潮在线播放| 日韩欧美三级| 蜜色网色哟哟| 成人免费看吃奶视频网站| 97频视在线| 国产精品无码在线| 九九九精品美女| 久久婷婷色综合一区二区三区| 国产91精品在线免费| 欧美日韩222| 18禁美女裸体无遮挡啪啪| 四虎影视永久在线观看精品免费网站| 欧美亚洲一级在线观看| 四虎影视国产精品| 国产精品久久9| 91碰超| 性欧美| 极品极品色影院| 91老女人| 天天影视网色欲色香| 色香蕉影院| 久久国产逼| 色97综合中文字幕| 天天干天天日天天射黄色大片| 色y情视频免费看| 欧美91网站| 中日韩熟女| 国产精品96| 国产精品天干天干综合网麻豆| 自偷自拍的亚洲视频| 国产色产精品在线观看| 久久久草草精品| 日韩偷拍色图| 97综合在线| 日本操逼视频不卡直接放| 天天看高清麻豆| 丁香六月婷| 色操逼网| 国产v亚洲v日韩v欧美v片另类| 东北女人| 最新AVzaixian| 色噜噜精品一区二区三| 在线中文字幕| 999精品乱码| 性欧美第一页| 91激情综合| 青青草吊丝| 思思热在线观看| 亚洲一欧洲中文字幕在线| 性色AV蜜色av色欲av| 婷婷10月天青娱乐| 在线五区| 欧美色自拍| 东京成人一区| 亚洲熟妇丝袜在线观看| 亚洲欧美精品一区天堂久久| 精品成人av一区二区三区在线| 超碰人人操97碰| 97操| 亚洲动态色图| 后入国产| 蜜桃臀一区二区三区久久| 伊人久久大香线综合无码| 欧美少妇大量自拍视频在线观看| 超碰碰碰碰| 久久草在线综合视频| 熟女高潮合集-永久久久-成人AV| 国产嫩草精品A88AV在线| 人妻少妇蜜桃视频欧美一区| 国产69精品久久久久99尤物| 熟妇综合一区二区三区| 精品国产一区探花在线观看| 欲香欲色| 看免费的黄片| 国产高清免费不卡av| 秋霞成人做爱| 成人七区| 在线性黄高清免费视频| 91丨九色丨东北熟女| 久99热| 久久草草欧美精品| 混色激情av| 人人手机欧洲亚洲国产人妻| 怡红院怡春院| 亚洲色图欧美另类在线| 嫩草 我啊~嗯~在线| 亚洲国产精品久久久久婷婷老年| 呻吟 欧美 日本 中出| 东北女人性交| 九九九九热| 大屁股人妻女教师撅着屁股| 成人麻豆av电影网站| 黄色AAAAAAAAAAA大片| 日韩性爱电影一区| 色色国产| 大香蕉中文aV在线| 国产一| 成人小电影网站tex| 少妇久久久久久| 麻豆国产视频精品观看| 黄片aaaaa一区| 99综合| 亚洲丝袜B诱惑| 偷拍综合亚洲| 精品传媒在线一区| 久久性爱精品一区| av资源在线观看少妇| 日韩人妻资源在线看| 午夜欧美J进J出白浆流出久久久 | 青草园大香蕉| 精品天堂| 伦伦成年午夜免费视频| 久久99操天天日| 亚洲天堂人人妻| 青青青在线高清视频在线一二三四区 | 99热啪啪| 国产精品毛片?v一区二区三区 | 91亚洲人电影| 欧美影音在线| 日日骚AV| 蜜桃无码AV一区二区| 欧美激情综合色综合啪啪五月| 91色黑人少妇| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 欧美三级不卡| 美女91av| 国产精品福利视频播放| 超碰狠狠操| 啊啊啊要高潮了| 国产一区在线播放| 白嫩国模丰满一二三区| 在线 亚洲 网爆 自拍| 色九九久九九| 亚洲色图日韩精品| 欧美久久九九| 美女t无毒不卡不卡| 日本黄色大片一级视频免费麻豆| 婷婷尹人大香蕉免费| 蜜臀无码一区二区| 99久久精品无码一区二区毛片免费| 五月婷婷激情综合| 亚洲一区制服诱惑| 日韩在线一区二区| 后入人妻一区| 放黄片放3级黄片没穿衣服| 欧美精品日韩一区二区| 精品久久在线区一区| 欧美综合网A| www…国产操逼| 超碰97在线色男人??| 飘花国产午夜精品不卡| 伊人青青一区成人视频在线观看区| 亚洲天堂少妇| 午夜福利免费精品视频| 色哟哟av网址| 超碰在线香蕉| 欧美天天综合站| 日本成人A片免费看| 夜夜高潮夜夜爽高清视频一| 欧美午夜熟妇黑人精品91| 国产综合在线视频网站| 超碰 av 女人天堂| 一区不卡在线观看av| 涩涩五月天| 少妇天堂| 九九成人| 91亚洲欧洲| 欧美熟妇视频| 超碰在线人人射| 亚洲最大的黄色电影网站。| 乱性AV| 日韩三级在线观看mp4| 亚洲超碰97| 大香蕉免| 色综合天天| 91国精产品| 乱伦熟女区| 狠狠爱夜夜| 久久精品欧美一区蜜桃| 91国模| 国产老熟女| 两女互慰AV高潮喷水在线观看| av麻豆啪啪| 欧美亚洲日本视频久久久 | 深夜国产一区二区三区在线看| 亚州高清av| 色色色99| 色色毛片| 嗯嗯啊啊好大好爽| 久精品无码av一区二免费国产在线观看| 后入式999| 国产乱码久久| 99这里只有精品国产| 超碰久在线天天做| a网站免费观看| 日本韩国国产精品一区| 熟女露脸激情自拍视频| 大香网伊人久久综合| 中文字幕精品探花视频| 美女97超碰| 在线中文字幕极品av| 欧美劲爆第一页| 桃色五月天| a片偷拍视频| 超碰综合97在线| 九九热在线视频| 久草精品国产99| 少妇熟女视频一二三区| 欧美性爱一内片一区二区三区| 国产极品美女高潮无套在线观看| 人妻丝袜一区二区三区在线| 少妇99成人麻豆| 一区二区三区免费岛国片| 特色a在线上| 青青欧美| 91九色丨国产丨爆乳| 日本性爱欧美性爱| 久久久久久久9| 久久夜精品一区二区三区| 欧美男人一区| 黄色欧美性爱视频| 91av熟女人妻| 91性网| 九七人妻在线| 免费农村成人少妇人妻Aa一区二区视频| 一区二区影院| 成年人网站在线免费观看| 午夜九九| 中文字幕在线2| 草b在线| 香蕉久久国产AV一区二区| 日韩精品碰碰| 欧美在线色图| 欧美亚洲日韩人妻在线观看| 首页中文字幕中文字幕免费| 黄色电影在线播放综合网站| 精品日日人妻| 欧美激情精品久久久| 干b在线性社区| 欧美日不卡| 亚洲国产激情国产av| 不卡一区二区日本视频| 天天日天天干天天色| 黄页av| 少妇无码999| 欧美日韩亚洲少妇寂寞影院正在播放| 亚洲十八禁止| 天美传媒Av在线| 精品小视频在线| 欧美性色综合网| 99热亚洲天堂| 亚洲 中文 女同| 神马久久久久眼| 亚洲 欧美 中文 日韩超碰| 九九在线视频| 亚州少妇| 亚洲情色1区| 国产免费大片| 日韩少妇丰满亚洲| 国产精品久久久视频| 高清无码网址| 亚洲AV无码天美传媒一区| 一区二区日韩欧美久久| 920日本午夜免费| 日本三级久| 青青色综合| 天堂国产AV| 大乔未久88一区| 超碰精品人妻狠狠干| 大香蕉在线SuP| 五月天日日操夜夜操| 久久久久女教师免费一区| 人妻熟女一区二区三区视频| 亚洲丝袜诱惑| 操逼操逼逼操操逼91| 国产精品久久| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 天美91| 精品无码久久久久久久久果冻糖心| 性色AV蜜色av色欲av| 吖在线不卡一区二区国产剧情| 亚州免费啪啪视频| 日韩精品一区二区高清| 国产大学生口爆吞精合集| A 天堂在线观看视频| 丁香九月激情啪| 色婷婷久久| 久久久精久久久| 老司机免费视频在线91| 欧美色图99| 人人澡人人澡人人| 久久精品国产亚洲AV先锋| 岛国1区2区3区在线观看| 韩日巨乳美女免费视频在线观看| 日本孕妇孕交| 夜夜爽夜夜高潮夜夜爽| 成年人网站在线免费观看| 国产女人和拘做爰视频 | av天堂5| 台湾佬激情综合| 校园春色中文字幕AV| 色色97爱| 亚洲色欲天天天堂色欲网女| 国产一区二区在线电影| 97色五月天完| 美女网站黄页| 操国产逼| 中文字幕一区日韩精| 99精品无码| 美女AV一区二区| 久久久精品一区二区| 久久久久九九九| 国产熟女完整版中字| 亚洲精品99| 精品人妻夜夜草| 亚洲精品九九九九九九| 国产精品一区二区亚洲人成毛片| 96久久精品一二三区色欲| 九九热精品在线| 亚洲加勒比色图| 波多野结衣之双飞调教在线播放| 久久精品国产亚洲AV高级北京| 国产精品青青草| 60秒免费视频| 狠狠久久手机视频精品| 国产黄色 A 片免费看| 91丝袜美腿网站| 精品无码久久| 日韩三级天堂在线观看| 日本 免费 一区二区三区 久久香蕉 | 人妻熟女午夜精品在线| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 色色激情五月天| 99re这里| 成人26uuu| 日本一区三级韩国| 亚洲成成熟女人综合一区二区| 国产极品99热在线播放69| 91人妻爽爽人人做人人澡| 97少妇人妻中文字幕久久| 欧美色图 色综合图| 97人人模人人爽人人| 久久久九精品| 青娱乐亚洲自拍| 午夜精品久久久久| 日韩免费簧片| 人妻夜夜爽天天爽麻豆三区网站| 久操电影网| 久久精品国产亚洲AV成人直播| 啊啊啊好大好湿| 正在播放国产精品一区| 久插综合| 国内毛片无遮挡国产| 插老姨肥穴| 欧美性爱日韩高清| 老熟女熟妇| 国产AV精久久| 久久精品无码熟妇一区二区三区视频导航 | 亚洲日韩电影| 97一区二区蜜臀| 看大黄色大片原件| 校园春色欧美| 国产做?爰片久久毛片?片美国| 韩国嫰模上门援交视频| 精品中文字幕一区二区l - 百度| 91欧美另类| 日韩欧美大片免费高清啪啪| 欧美爆操91| www亚洲免费| 夜夜操一区二区| 欧亚性爱视频免费看| 久久久精品中文字幕麻豆| 秋霞影音一区二区三区| 新97国产超碰| 久久久久亚洲Aⅴ无码| 怡红院网站在线视频| 国产成人网站在线观看| 成人性交午夜免费片| 欧美黄色大香蕉一区二区| 国产麻豆91欧美一区二区久久婷婷国产精品| 久久精品国产72国产精品福利| 亚洲欧美内射| 黑丝少妇在线观看| 三级日本一区二区三区| 精品久久久不卡一区二区| 中国一级操逼视频| 呻吟 欧美 日本 中出| 色综合久久888| 蜜臀久久99精品久久久| 99色婷婷中文字幕乱色| 国产偷拍自拍在线视频| 亚洲色人阁| 蜜臀99999| 亚洲操逼视频网站| 亚洲欧美综合| 制服中出中文人人精品| av九九| 以及麻豆国产入口在线观看免费| 把腿张开老子CAO烂你| 91观看 国产白丝| 麻豆精品天美| 日韩99999色| 亚洲aV性爱| 欧美性生活免费网| 日韩免费a级毛片无码a∨| 草B在线| 国产乱人妻精品入口| 久久精彩视频9| 97操碰| 青娱乐久久艹| 中文精品一区二去| 欧洲性爱无码区| 精品视频久久| 国产精品69久久久久久久 | a亚洲欧美色欲| 少妇的嫩逼图片| 亚洲在钱| 偷拍综合亚洲| 97在线观看免费视频l| 97日本超碰综合| 日韩人妻少妇 一区二区三区| 日韩欧美国产一区二区三区四区| 欧美性爽xyxOOOO| 国产精品久久久久久久久久久久久久吹 | 日韩综合色图| 98久久超碰| 99AV| 欧美综合综合| 欧美热图99| 国产精品对白自产拍| 色婷婷一区二区三区久久午夜| 美美91成人国产精品欧美精品久久久久久久 | 天天爱天天操| 91丨九色丨东北熟女| 亚洲Av无码成人精品国产| 国产精品成人福利在线| 丰满人妻一区二区三区四区| 小日子操bb在线看| 午夜乱轮操逼视频免费看| 人人操人人操人人人操| 91亚洲色人| 无码最新| 国产尤物AV尤物在线观看不卡| 成人七区| 日本国产高清色www视频在线| 日韩色欲久久一二三四区| 免费看A片毛毛片在线播| 成人a大片在线观看| 午夜精品五区| 久久精品色欧美aⅴ一区二区| 破苞ⅩXXX性无码动漫无码| 在线人人人人人人精品超| 极品色www影院| 国产亚洲在线观看| 高潮内射在线| 国产精品网站免费| 九七人妻在线| 玖玖久久久| 青草综合| 中文字幕AV乱伦| 在线可观看的黄色网址| 日本99久久| 久久99国产综合精品女同| 乱码熟妇人妻久久久| 免费亚洲国产精品久久一区| 欧美日韩精品青青| 友优传媒精品在线一区二区| 一中国女人毛片水真多| 成人一级性爱| 日本网色| 蜜色网色哟哟| 91精品久久久久久久久久| 欧亚 另类 久| 超碰午夜| 亚洲最新中文字幕免费| 国产亚洲一黄| 东北老女人的激情视频| 日日日日做夜夜夜夜做无码97| 久久久性爱| 韩三级a视频在线观看| 国产激情av女片自拍| 少妇二级| 97欧美色综合| av网站免费看| 黄色小视频日本txt| 九九热免费视频| 东京热av男人的天堂| 亚洲天堂男| 国产99精品一区二区三区免费| 色婷婷导航| 国产精品久久久蜜臀| 国产丝袜一区二区三区| 18禁看网站一区| 99操逼| baiduhicn.com。| 97在线免费视频观看| 伊人久久综合精品欧美| 亚洲一区二区三区久久 亚洲一区二区| 伊人网在线观看| 97日韩超碰超碰中文字幕| 欧美天天干| 高清不卡国产| 蜜桃久久一区| 综合久久久久久久综合网| 麻豆 欧美 日韩| 精品人妻一区二区三区蜜桃视频| 欧美不卡在线一区二区| 久久久五月天| 婷婷九月国产| 欧美呦呦性爱| 97二区四区| 男人综合网| 国产亚洲禁久一区二区| 干B| 日韩精品在线放| 亚洲 欧美 中文 日韩超碰| 91精品在线播放| α√在线| 金典av| 影音先锋日本一区二区| 成年女人一区| 五十路三区在线| 一区二区三区机械有限公司| 校园春色亚洲无码| 国产精品嫩草影院午夜两性| 欧美色三级片91| 91性情| 九九热视频在线观看| 97国产中文| 国产情侣自拍在线播放| 亚洲亚洲亚洲天堂天堂 | 精久久久| 亚洲中文日韩欧美大香蕉视频| 91中文精品日韩欧美在线 | 99色悠悠| 资源新线在线天堂| 亚洲 日韩 欧美 国产综合体| 黄片直播三级黄片两女一男| 激情人妻另类| 加勒比久久综合网高清| 国产精品久久久久久久久久久久久久久| 日本操逼aaaaa| 日韩一级二级在线| 国产日韩色综合| 精品97久久综合| 人人玩人人添人人澡免费| 啊啊啊快操我视频| 日韩 欧美 视频 在线 一区| 国产第11页| 久久久久国产精品片区无码直播 | 色婷婷香蕉| 91 天天综合| 成年女人一区| 69视频入口| 欧洲亚洲人妻无码中字久久三区四区| 91丨豆花丨熟女| 91人妻久久久久久久久久久久久| 午夜福利免费精品视频| 夜夜无码| 中文字幕第页| 成年人网站在线免费观看| 国产白丝在线| 久久久精品成人国产| 怡红院成人视频| 中文字幕视频在线观看一区二区| 国产 日韩 欧美一区| 密臀AV在线| 在线观看国产黄色| 操人妻视频| 偷拍超碰| 日本在线激情一区二区三区| 伊香蕉综合久久久久久久噜噜噜 | 日韩无限资源| 激情亚洲天堂| 激情啪啪拍91| 啊啊啊啊啊啊啊啊视频| 美欧老女人97| 伊人色综合网电影| 麻豆久久精品亚洲精品88| 精品视频97| 成人网址在线观看| 国产一区二区成人av在线播放| 秋霞鲁丝午夜无码一区二区三| 久久亚洲婷婷| 午夜视频黄| 二级毛片| 欧美熟女激情| 桃花色涩综合影院| 26uuu最新| 中文字幕av片| 欧美性战999| 婷婷91| 蜜乳AV.COM| 超碰碰97资源站| 蜜桃久久久久久久久久久久| 99久久99久久综合| 日韩美女啪啪一区| 丝袜AV一区二区三区| 热久久国产精品视频大陆精品| 中文字幕在线观看视频www| 亚洲暴力强奸AV| 国产熟女精品一区二区| 青青草久久在线| 欧美亚洲国产自久久| 中文字幕av乱伦| 中文字幕一区二区三区字幕| 99999国产| 熟妇激情| 99综合自拍| 日韩精品一区二区三区四虎影视| 超碰成人公开| a片在线播放| 色97干| 51一区二区三区| 中美日韩毛片| 天天舔天天日天天射| 亚洲有码 欧美精品| 手机在线观看不卡无码av| 日韩 国产 欧美自拍| 国产无套粉嫩白浆在| 最新av网站在线观看| 色吧91| 操久久久久| 久久精品综合| 亚洲日韩久久精品一区| 蜜桃不卡一区二区| 97二区四区| 欧美毛片在线网| www.天天干| 国产久久久久久久久一区二区| 能在线播放的国产三级| 中国操逼无码| 国产成人亚洲精品无码最新在线| 色图四区| 国内一级精品| 南澳成人一级片在线播放| 国产热av| 国产欧美日产一区二区三区 - 国产欧美日 | 国产美女高潮叫床视频| 97在线观看播放视频| 日韩中文字幕国产| 日本人妻中文字幕精品| 亚洲黄片免费在线播放| 亚欧高清| 国产精品99精品视频网站| www.色吧5.com| 亚洲欧美色图小说| 免费a级毛片av无码久久精品中文字幕| 美女黄网| 国产成人亚洲精品无| 97视频免费在线观看| 九九九九精品| 国产成人超碰在线| 国产成人99久久亚洲综合|