日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang源码探索(三) GC的实现原理

發布時間:2024/8/26 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang源码探索(三) GC的实现原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Golang從1.5開始引入了三色GC, 經過多次改進, 當前的1.9版本的GC停頓時間已經可以做到極短.
停頓時間的減少意味著"最大響應時間"的縮短, 這也讓go更適合編寫網絡服務程序.
這篇文章將通過分析golang的源代碼來講解go中的三色GC的實現原理.

這個系列分析的golang源代碼是Google官方的實現的1.9.2版本, 不適用于其他版本和gccgo等其他實現,
運行環境是Ubuntu 16.04 LTS 64bit.
首先會講解基礎概念, 然后講解分配器, 再講解收集器的實現.

基礎概念

內存結構

go在程序啟動時會分配一塊虛擬內存地址是連續的內存, 結構如下:

這一塊內存分為了3個區域, 在X64上大小分別是512M, 16G和512G, 它們的作用如下:

arena

arena區域就是我們通常說的heap, go從heap分配的內存都在這個區域中.

bitmap

bitmap區域用于表示arena區域中哪些地址保存了對象, 并且對象中哪些地址包含了指針.
bitmap區域中一個byte(8 bit)對應了arena區域中的四個指針大小的內存, 也就是2 bit對應一個指針大小的內存.
所以bitmap區域的大小是 512GB / 指針大小(8 byte) / 4 = 16GB.

bitmap區域中的一個byte對應arena區域的四個指針大小的內存的結構如下,
每一個指針大小的內存都會有兩個bit分別表示是否應該繼續掃描和是否包含指針:

bitmap中的byte和arena的對應關系從末尾開始, 也就是隨著內存分配會向兩邊擴展:

spans

spans區域用于表示arena區中的某一頁(Page)屬于哪個span, 什么是span將在下面介紹.
spans區域中一個指針(8 byte)對應了arena區域中的一頁(在go中一頁=8KB).
所以spans的大小是 512GB / 頁大小(8KB) * 指針大小(8 byte) = 512MB.

spans區域的一個指針對應arena區域的一頁的結構如下, 和bitmap不一樣的是對應關系會從開頭開始:

什么時候從Heap分配對象

很多講解go的文章和書籍中都提到過, go會自動確定哪些對象應該放在棧上, 哪些對象應該放在堆上.
簡單的來說, 當一個對象的內容可能在生成該對象的函數結束后被訪問, 那么這個對象就會分配在堆上.
在堆上分配對象的情況包括:

  • 返回對象的指針
  • 傳遞了對象的指針到其他函數
  • 在閉包中使用了對象并且需要修改對象
  • 使用new

在C語言中函數返回在棧上的對象的指針是非常危險的事情, 但在go中卻是安全的, 因為這個對象會自動在堆上分配.
go決定是否使用堆分配對象的過程也叫"逃逸分析".

GC Bitmap

GC在標記時需要知道哪些地方包含了指針, 例如上面提到的bitmap區域涵蓋了arena區域中的指針信息.
除此之外, GC還需要知道棧空間上哪些地方包含了指針,
因為棧空間不屬于arena區域, 棧空間的指針信息將會在函數信息里面.
另外, GC在分配對象時也需要根據對象的類型設置bitmap區域, 來源的指針信息將會在類型信息里面.

總結起來go中有以下的GC Bitmap:

  • bitmap區域: 涵蓋了arena區域, 使用2 bit表示一個指針大小的內存
  • 函數信息: 涵蓋了函數的棧空間, 使用1 bit表示一個指針大小的內存 (位于stackmap.bytedata)
  • 類型信息: 在分配對象時會復制到bitmap區域, 使用1 bit表示一個指針大小的內存 (位于_type.gcdata)

Span

span是用于分配對象的區塊, 下圖是簡單說明了Span的內部結構:

通常一個span包含了多個大小相同的元素, 一個元素會保存一個對象, 除非:

  • span用于保存大對象, 這種情況span只有一個元素
  • span用于保存極小對象且不包含指針的對象(tiny object), 這種情況span會用一個元素保存多個對象

span中有一個freeindex標記下一次分配對象時應該開始搜索的地址, 分配后freeindex會增加,
在freeindex之前的元素都是已分配的, 在freeindex之后的元素有可能已分配, 也有可能未分配.

span每次GC以后都可能會回收掉一些元素, allocBits用于標記哪些元素是已分配的, 哪些元素是未分配的.
使用freeindex + allocBits可以在分配時跳過已分配的元素, 把對象設置在未分配的元素中,
但因為每次都去訪問allocBits效率會比較慢, span中有一個整數型的allocCache用于緩存freeindex開始的bitmap, 緩存的bit值與原值相反.

gcmarkBits用于在gc時標記哪些對象存活,?每次gc以后gcmarkBits會變為allocBits.
需要注意的是span結構本身的內存是從系統分配的, 上面提到的spans區域和bitmap區域都只是一個索引.

Span的類型

span根據大小可以分為67個類型, 如下:

// class bytes/obj bytes/span objects tail waste max waste // 1 8 8192 1024 0 87.50% // 2 16 8192 512 0 43.75% // 3 32 8192 256 0 46.88% // 4 48 8192 170 32 31.52% // 5 64 8192 128 0 23.44% // 6 80 8192 102 32 19.07% // 7 96 8192 85 32 15.95% // 8 112 8192 73 16 13.56% // 9 128 8192 64 0 11.72% // 10 144 8192 56 128 11.82% // 11 160 8192 51 32 9.73% // 12 176 8192 46 96 9.59% // 13 192 8192 42 128 9.25% // 14 208 8192 39 80 8.12% // 15 224 8192 36 128 8.15% // 16 240 8192 34 32 6.62% // 17 256 8192 32 0 5.86% // 18 288 8192 28 128 12.16% // 19 320 8192 25 192 11.80% // 20 352 8192 23 96 9.88% // 21 384 8192 21 128 9.51% // 22 416 8192 19 288 10.71% // 23 448 8192 18 128 8.37% // 24 480 8192 17 32 6.82% // 25 512 8192 16 0 6.05% // 26 576 8192 14 128 12.33% // 27 640 8192 12 512 15.48% // 28 704 8192 11 448 13.93% // 29 768 8192 10 512 13.94% // 30 896 8192 9 128 15.52% // 31 1024 8192 8 0 12.40% // 32 1152 8192 7 128 12.41% // 33 1280 8192 6 512 15.55% // 34 1408 16384 11 896 14.00% // 35 1536 8192 5 512 14.00% // 36 1792 16384 9 256 15.57% // 37 2048 8192 4 0 12.45% // 38 2304 16384 7 256 12.46% // 39 2688 8192 3 128 15.59% // 40 3072 24576 8 0 12.47% // 41 3200 16384 5 384 6.22% // 42 3456 24576 7 384 8.83% // 43 4096 8192 2 0 15.60% // 44 4864 24576 5 256 16.65% // 45 5376 16384 3 256 10.92% // 46 6144 24576 4 0 12.48% // 47 6528 32768 5 128 6.23% // 48 6784 40960 6 256 4.36% // 49 6912 49152 7 768 3.37% // 50 8192 8192 1 0 15.61% // 51 9472 57344 6 512 14.28% // 52 9728 49152 5 512 3.64% // 53 10240 40960 4 0 4.99% // 54 10880 32768 3 128 6.24% // 55 12288 24576 2 0 11.45% // 56 13568 40960 3 256 9.99% // 57 14336 57344 4 0 5.35% // 58 16384 16384 1 0 12.49% // 59 18432 73728 4 0 11.11% // 60 19072 57344 3 128 3.57% // 61 20480 40960 2 0 6.87% // 62 21760 65536 3 256 6.25% // 63 24576 24576 1 0 11.45% // 64 27264 81920 3 128 10.00% // 65 28672 57344 2 0 4.91% // 66 32768 32768 1 0 12.50%

以類型(class)為1的span為例,
span中的元素大小是8 byte, span本身占1頁也就是8K, 一共可以保存1024個對象.

在分配對象時, 會根據對象的大小決定使用什么類型的span,
例如16 byte的對象會使用span 2, 17 byte的對象會使用span 3, 32 byte的對象會使用span 3.
從這個例子也可以看到, 分配17和32 byte的對象都會使用span 3, 也就是說部分大小的對象在分配時會浪費一定的空間.

有人可能會注意到, 上面最大的span的元素大小是32K, 那么分配超過32K的對象會在哪里分配呢?
超過32K的對象稱為"大對象", 分配大對象時, 會直接從heap分配一個特殊的span,
這個特殊的span的類型(class)是0, 只包含了一個大對象, span的大小由對象的大小決定.

特殊的span加上的66個標準的span, 一共組成了67個span類型.

Span的位置

在前一篇中我提到了P是一個虛擬的資源, 同一時間只能有一個線程訪問同一個P, 所以P中的數據不需要鎖.
為了分配對象時有更好的性能, 各個P中都有span的緩存(也叫mcache), 緩存的結構如下:

各個P中按span類型的不同, 有67*2=134個span的緩存,

其中scan和noscan的區別在于,
如果對象包含了指針, 分配對象時會使用scan的span,
如果對象不包含指針, 分配對象時會使用noscan的span.
把span分為scan和noscan的意義在于,
GC掃描對象的時候對于noscan的span可以不去查看bitmap區域來標記子對象, 這樣可以大幅提升標記的效率.

在分配對象時將會從以下的位置獲取適合的span用于分配:

  • 首先從P的緩存(mcache)獲取, 如果有緩存的span并且未滿則使用, 這個步驟不需要鎖
  • 然后從全局緩存(mcentral)獲取, 如果獲取成功則設置到P, 這個步驟需要鎖
  • 最后從mheap獲取, 獲取后設置到全局緩存, 這個步驟需要鎖

在P中緩存span的做法跟CoreCLR中線程緩存分配上下文(Allocation Context)的做法相似,
都可以讓分配對象時大部分時候不需要線程鎖, 改進分配的性能.

分配對象的處理

分配對象的流程

go從堆分配對象時會調用newobject函數, 這個函數的流程大致如下:

首先會檢查GC是否在工作中, 如果GC在工作中并且當前的G分配了一定大小的內存則需要協助GC做一定的工作,
這個機制叫GC Assist, 用于防止分配內存太快導致GC回收跟不上的情況發生.

之后會判斷是小對象還是大對象, 如果是大對象則直接調用largeAlloc從堆中分配,
如果是小對象分3個階段獲取可用的span, 然后從span中分配對象:

  • 首先從P的緩存(mcache)獲取
  • 然后從全局緩存(mcentral)獲取, 全局緩存中有可用的span的列表
  • 最后從mheap獲取, mheap中也有span的自由列表, 如果都獲取失敗則從arena區域分配

這三個階段的詳細結構如下圖:

數據類型的定義

分配對象涉及的數據類型包含:

p: 前一篇提到過, P是協程中的用于運行go代碼的虛擬資源
m: 前一篇提到過, M目前代表系統線程
g: 前一篇提到過, G就是goroutine
mspan: 用于分配對象的區塊
mcentral: 全局的mspan緩存, 一共有67*2=134個
mheap: 用于管理heap的對象, 全局只有一個

源代碼分析

go從堆分配對象時會調用newobject函數, 先從這個函數看起:

// implementation of new builtin // compiler (both frontend and SSA backend) knows the signature // of this function func newobject(typ *_type) unsafe.Pointer { return mallocgc(typ.size, typ, true) }

newobject調用了mallocgc函數:

// Allocate an object of size bytes. // Small objects are allocated from the per-P cache's free lists. // Large objects (> 32 kB) are allocated straight from the heap. func mallocgc(size uintptr, typ *_type, needzero bool) unsafe.Pointer { if gcphase == _GCmarktermination { throw("mallocgc called with gcphase == _GCmarktermination") } if size == 0 { return unsafe.Pointer(&zerobase) } if debug.sbrk != 0 { align := uintptr(16) if typ != nil { align = uintptr(typ.align) } return persistentalloc(size, align, &memstats.other_sys) } // 判斷是否要輔助GC工作 // gcBlackenEnabled在GC的標記階段會開啟 // assistG is the G to charge for this allocation, or nil if // GC is not currently active. var assistG *g if gcBlackenEnabled != 0 { // Charge the current user G for this allocation. assistG = getg() if assistG.m.curg != nil { assistG = assistG.m.curg } // Charge the allocation against the G. We'll account // for internal fragmentation at the end of mallocgc. assistG.gcAssistBytes -= int64(size) // 會按分配的大小判斷需要協助GC完成多少工作 // 具體的算法將在下面講解收集器時說明 if assistG.gcAssistBytes < 0 { // This G is in debt. Assist the GC to correct // this before allocating. This must happen // before disabling preemption. gcAssistAlloc(assistG) } } // 增加當前G對應的M的lock計數, 防止這個G被搶占 // Set mp.mallocing to keep from being preempted by GC. mp := acquirem() if mp.mallocing != 0 { throw("malloc deadlock") } if mp.gsignal == getg() { throw("malloc during signal") } mp.mallocing = 1 shouldhelpgc := false dataSize := size // 獲取當前G對應的M對應的P的本地span緩存(mcache) // 因為M在擁有P后會把P的mcache設到M中, 這里返回的是getg().m.mcache c := gomcache() var x unsafe.Pointer noscan := typ == nil || typ.kind&kindNoPointers != 0 // 判斷是否小對象, maxSmallSize當前的值是32K if size <= maxSmallSize { // 如果對象不包含指針, 并且對象的大小小于16 bytes, 可以做特殊處理 // 這里是針對非常小的對象的優化, 因為span的元素最小只能是8 byte, 如果對象更小那么很多空間都會被浪費掉 // 非常小的對象可以整合在"class 2 noscan"的元素(大小為16 byte)中 if noscan && size < maxTinySize { // Tiny allocator. // // Tiny allocator combines several tiny allocation requests // into a single memory block. The resulting memory block // is freed when all subobjects are unreachable. The subobjects // must be noscan (don't have pointers), this ensures that // the amount of potentially wasted memory is bounded. // // Size of the memory block used for combining (maxTinySize) is tunable. // Current setting is 16 bytes, which relates to 2x worst case memory // wastage (when all but one subobjects are unreachable). // 8 bytes would result in no wastage at all, but provides less // opportunities for combining. // 32 bytes provides more opportunities for combining, // but can lead to 4x worst case wastage. // The best case winning is 8x regardless of block size. // // Objects obtained from tiny allocator must not be freed explicitly. // So when an object will be freed explicitly, we ensure that // its size >= maxTinySize. // // SetFinalizer has a special case for objects potentially coming // from tiny allocator, it such case it allows to set finalizers // for an inner byte of a memory block. // // The main targets of tiny allocator are small strings and // standalone escaping variables. On a json benchmark // the allocator reduces number of allocations by ~12% and // reduces heap size by ~20%. off := c.tinyoffset // Align tiny pointer for required (conservative) alignment. if size&7 == 0 { off = round(off, 8) } else if size&3 == 0 { off = round(off, 4) } else if size&1 == 0 { off = round(off, 2) } if off+size <= maxTinySize && c.tiny != 0 { // The object fits into existing tiny block. x = unsafe.Pointer(c.tiny + off) c.tinyoffset = off + size c.local_tinyallocs++ mp.mallocing = 0 releasem(mp) return x } // Allocate a new maxTinySize block. span := c.alloc[tinySpanClass] v := nextFreeFast(span) if v == 0 { v, _, shouldhelpgc = c.nextFree(tinySpanClass) } x = unsafe.Pointer(v) (*[2]uint64)(x)[0] = 0 (*[2]uint64)(x)[1] = 0 // See if we need to replace the existing tiny block with the new one // based on amount of remaining free space. if size < c.tinyoffset || c.tiny == 0 { c.tiny = uintptr(x) c.tinyoffset = size } size = maxTinySize } else { // 否則按普通的小對象分配 // 首先獲取對象的大小應該使用哪個span類型 var sizeclass uint8 if size <= smallSizeMax-8 { sizeclass = size_to_class8[(size+smallSizeDiv-1)/smallSizeDiv] } else { sizeclass = size_to_class128[(size-smallSizeMax+largeSizeDiv-1)/largeSizeDiv] } size = uintptr(class_to_size[sizeclass]) // 等于sizeclass * 2 + (noscan ? 1 : 0) spc := makeSpanClass(sizeclass, noscan) span := c.alloc[spc] // 嘗試快速的從這個span中分配 v := nextFreeFast(span) if v ==

轉載于:https://www.cnblogs.com/xumaojun/p/8547439.html

總結

以上是生活随笔為你收集整理的Golang源码探索(三) GC的实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日韩三级在线 | 国产精品久久久久久久免费观看 | 久久久免费电影 | 国产精品九九视频 | 99精品视频中文字幕 | 人人澡人人添人人爽一区二区 | 91av国产视频 | 在线国产一区二区 | 日韩午夜视频在线观看 | 欧美日韩免费一区二区 | 国产欧美日韩一区 | 一区二区三区在线免费播放 | 免费福利片2019潦草影视午夜 | 三级黄色在线 | 一区二区精品在线 | 国产黄色视 | 91成人在线视频 | 亚洲美女视频在线观看 | 国产亚洲视频中文字幕视频 | 日韩精品欧美精品 | 永久免费毛片 | 久久国产精品网站 | 亚洲天堂首页 | 精品国产乱码久久久久久天美 | 日本女人在线观看 | 欧美a级片免费看 | 91视频麻豆视频 | 伊人网综合在线观看 | 免费观看一级特黄欧美大片 | 夜添久久精品亚洲国产精品 | 日韩国产欧美在线播放 | 美女黄色网在线播放 | 伊人狠狠色丁香婷婷综合 | www色婷婷com| 91麻豆产精品久久久久久 | 欧美一区中文字幕 | 精品国产免费一区二区三区五区 | 日本黄区免费视频观看 | 色人久久 | 在线观看91久久久久久 | 一级片免费观看 | www日韩在线| 中文字幕免费国产精品 | 久草久热 | 日本在线精品视频 | 欧美另类高清 | 99re国产视频 | 五月综合色婷婷 | 成人蜜桃| 成人久久久电影 | 亚洲国产中文字幕 | 在线观看国产日韩欧美 | a级国产乱理伦片在线播放 久久久久国产精品一区 | av黄色大片 | 亚洲一级片免费观看 | 青青看片| 在线观看深夜视频 | 日韩高清在线一区 | 国产精品久久99综合免费观看尤物 | 五月婷婷色 | 午夜少妇一区二区三区 | 国产精品女同一区二区三区久久夜 | 久久久福利 | 99re亚洲国产精品 | 色欧美成人精品a∨在线观看 | 99精品欧美一区二区三区黑人哦 | 91在线看网站 | 国产精品久久久久久久久久99 | 激情五月婷婷综合网 | 麻豆91精品91久久久 | 青青草视频精品 | 青草草在线| 国产亚州av | 热久精品 | 日本系列中文字幕 | 81国产精品久久久久久久久久 | 国产乱码精品一区二区蜜臀 | 97超碰在线久草超碰在线观看 | 亚洲最大av在线播放 | 国产精品自产拍 | 色午夜 | 黄色精品网站 | 久久婷婷综合激情 | 免费a v观看 | 中文字幕a∨在线乱码免费看 | 国产午夜三级一区二区三 | 国产色拍拍拍拍在线精品 | 日韩在线观看免费 | 日日弄天天弄美女bbbb | 又色又爽又黄 | 欧美日韩视频在线播放 | 欧美aaa一级 | 中文字幕免费观看 | 西西444www大胆高清图片 | 日韩精品一区二区三区免费视频观看 | 99久久精品免费视频 | 97精品国产97久久久久久春色 | 亚洲天堂网在线观看视频 | 黄色精品网站 | 日日夜夜精品 | 蜜臀一区二区三区精品免费视频 | 日韩精品专区在线影院重磅 | 亚洲精品久久久久久国 | 夜夜爽夜夜操 | 日韩欧美xxxx | 色视频 在线 | 五月天婷婷在线视频 | 成人国产网站 | 国产精品成人av在线 | 久久综合久久综合这里只有精品 | 国产第页 | 91在线超碰| www.国产在线视频 | 日韩视频欧美视频 | 狠狠色噜噜狠狠狠 | 激情九九 | 高清av中文字幕 | 午夜.dj高清免费观看视频 | 在线中文字幕电影 | 成人黄色片免费看 | 亚洲视频一级 | 九九一级片 | 美国人与动物xxxx | 国产一区二区三区免费观看视频 | 日韩欧美在线第一页 | 久草免费在线视频观看 | 超碰在线日本 | 五月天久久狠狠 | 天天综合视频在线观看 | 欧美精品一区在线发布 | 97福利视频| 久久福利综合 | 97爱爱爱 | 久久一久久 | 99久久999久久久精玫瑰 | 日韩中文在线播放 | 91av电影在线观看 | 成人精品一区二区三区电影免费 | 欧美精品中文 | 五月激情六月丁香 | 91久久人澡人人添人人爽欧美 | 国产在线观看免费av | 99色人| 国产一区二区三区久久久 | 日韩精品一区二区不卡 | 日韩av在线一区二区 | 丝袜美腿在线视频 | 激情小说久久 | 99精品在线观看视频 | 亚洲综合在线五月 | 色婷婷88av视频一二三区 | 亚洲japanese制服美女 | 瑞典xxxx性hd极品 | 天天干,夜夜操 | 麻豆视屏| 国产日产av | 在线日韩一区 | 一级片黄色片网站 | 最近日本中文字幕a | 日韩精品欧美一区 | 激情综合五月 | 日韩午夜大片 | 亚洲精品99久久久久久 | 插插插色综合 | www.香蕉 | 激情中文字幕 | 亚洲精品玖玖玖av在线看 | 免费在线观看av的网站 | 国产在线看一区 | 97香蕉久久国产在线观看 | 亚洲精品成人网 | 国产精品久久久久久久久久了 | 国产成人精品久久久久蜜臀 | 在线亚洲欧美视频 | 69av视频在线观看 | 欧美在线一 | 97在线免费观看视频 | av成人动漫| 中文字幕在线视频一区二区三区 | 日韩电影在线一区二区 | 亚洲精品国产精品国 | 91色欧美| av一区二区三区在线播放 | 91夫妻自拍 | 婷婷六月色 | 日日干夜夜骑 | 99久久精品国产网站 | 98涩涩国产露脸精品国产网 | 国产午夜精品免费一区二区三区视频 | 2018好看的中文在线观看 | 夜夜摸夜夜爽 | 成人在线视频一区 | 久久久久欠精品国产毛片国产毛生 | av千婊在线免费观看 | 综合色中色 | 手机看片99 | 91av视频在线免费观看 | 超碰97免费观看 | 毛片二区 | 欧美激情视频一二区 | 日韩一区正在播放 | 91欧美在线 | 日韩在线不卡 | 欧美日韩在线视频一区二区 | 夜夜躁狠狠躁日日躁 | 日日草天天干 | 97爱 | 国内精品久久久久影院男同志 | 亚洲精品视频在线观看免费视频 | 欧美成人999 | 伊人日日干 | 日韩一区在线播放 | 日韩精品1区2区 | 97免费在线观看 | 日日夜夜天天久久 | 在线精品播放 | 国内精品在线一区 | 日韩高清免费无专码区 | 日韩,精品电影 | 97超碰人人澡 | 欧美一区日韩一区 | 狠狠88综合久久久久综合网 | 九九热视频在线播放 | 国产成人在线观看免费 | 中文字幕在线资源 | 国产成人精品午夜在线播放 | 亚洲视频免费在线观看 | 99精品偷拍视频一区二区三区 | 久久久久久中文字幕 | 国产精品福利视频 | 欧产日产国产69 | 亚洲成人av免费 | 成人免费网站视频 | 天天操天天吃 | 在线播放 日韩专区 | 麻豆免费视频网站 | 久久这里只有精品视频99 | 欧美日韩视频精品 | 狠狠色丁香久久婷婷综合五月 | 久久精品毛片基地 | www.777奇米 | 久久麻豆视频 | www.国产精品 | 国产一级黄色av | 日韩中文字幕免费在线观看 | 久久精品国产一区二区三区 | 久亚洲| 亚洲欧洲xxxx | 国产精品影音先锋 | 成人一区二区在线 | 九九在线视频免费观看 | 成人精品一区二区三区中文字幕 | 91麻豆文化传媒在线观看 | 狠狠操欧美 | 久久综合免费视频影院 | 黄色小说视频网站 | 免费av片在线 | 一级α片免费看 | 91成年人网站 | 免费在线观看污 | 天天人人综合 | 四虎www.| 亚洲91精品 | 欧美午夜剧场 | 中文在线a天堂 | 18岁免费看片 | 精品乱码一区二区三四区 | 色婷婷国产精品一区在线观看 | 亚洲动漫在线观看 | 91在线一区 | 久久手机免费视频 | 日日躁你夜夜躁你av蜜 | 91香蕉久久| 在线中文字母电影观看 | 91av在线播放视频 | 久久久99久久 | 精品影院 | 久久韩国免费视频 | 色悠悠久久综合 | 一区二区三区在线免费观看视频 | 日韩视频在线一区 | 欧美久久久久 | 亚洲人天堂 | 成人国产电影在线观看 | 免费久久99精品国产 | 免费电影一区二区三区 | 国产一区欧美日韩 | 深夜男人影院 | 免费av高清| av丝袜美腿 | 欧洲一区二区三区精品 | 国产精品一区二区三区电影 | 久久人人干 | 国产群p| 天天操网| 国产91九色蝌蚪 | 伊人导航| 欧美a性 | 成人av中文字幕在线观看 | 国精产品999国精产品岳 | 日本高清dvd | 亚洲精品乱码久久久久久蜜桃动漫 | 日韩av线观看 | 福利一区二区 | 日韩在线国产 | 欧美日韩不卡在线视频 | 99精品黄色片免费大全 | 精品一二| 国产精品视频永久免费播放 | 国产经典av| 欧美成人性战久久 | 久久国产精品免费看 | 五月天婷婷在线观看视频 | 精品一区二区免费 | 国产精品永久在线 | 狠狠色丁香久久婷婷综 | 特级毛片网站 | 亚洲理论在线 | 国产精品久久一区二区三区不卡 | 亚洲国产高清在线观看视频 | 日韩精品视频在线观看网址 | 中文字幕免费高清在线观看 | 97av影院| 日韩大片在线播放 | 日本韩国欧美在线观看 | 91视频在线观看免费 | 国产高清视频免费最新在线 | 日韩免费观看一区二区 | 2020天天干天天操 | 婷婷综合久久 | 九色视频网站 | 成片人卡1卡2卡3手机免费看 | 日韩在线免费高清视频 | 又大又硬又黄又爽视频在线观看 | 国产色综合 | 天天搞天天干 | 丁香婷婷激情 | 精品视频999 | 2022久久国产露脸精品国产 | 四虎成人免费影院 | av成人免费在线观看 | 久久激情视频 | 人人看人人 | 国产馆在线播放 | av性网站 | 久久艹国产视频 | 日日夜夜添 | 久久久久久激情 | 国产中文字幕在线免费观看 | 狠狠干在线播放 | 久久一级片 | 欧美一级特黄aaaaaa大片在线观看 | 午夜三级在线 | 在线观看网站av | 在线国产视频一区 | 九九精品视频在线看 | 国产一级在线观看视频 | 亚洲一级理论片 | 日本久久久影视 | 亚洲男男gaygay无套 | www欧美日韩 | 91尤物在线播放 | 国产69精品久久久久久 | 97精品视频在线播放 | 亚洲免费在线观看视频 | 久草 | 久久综合色一综合色88 | 夜夜视频 | 五月天婷婷在线视频 | avhd高清在线谜片 | 久久久精品国产一区二区三区 | 成人一级电影在线观看 | 久久三级视频 | 久久99视频 | 久久国产精品一区二区 | av看片在线| 国产麻豆精品久久一二三 | 日韩女同av| 久久久久久97三级 | 国产精品99视频 | 国产成人一区三区 | 久久久香蕉视频 | 最近中文字幕高清字幕免费mv | 成人a视频片观看免费 | 日韩国产精品久久久久久亚洲 | 精品国产乱码久久久久久天美 | 免费精品视频 | 亚洲欧洲日韩 | 日日日日 | 99久久精品免费看 | 国产精品激情 | 欧美日本高清视频 | 亚洲人成人在线 | 国产午夜三级一区二区三 | 天天色天天色天天色 | 欧美日韩在线观看一区二区三区 | 天天操天天射天天爽 | 麻豆视频免费入口 | 丁香九月婷婷 | 天天色天天爱天天射综合 | 激情综合一区 | 日韩精品一区二区三区丰满 | 五月天激情综合网 | 在线v片免费观看视频 | 一区二区丝袜 | 亚洲美女精品区人人人人 | 99视频在线精品免费观看2 | 久久 精品一区 | 天天天色综合a | 亚洲五月 | 成人app在线免费观看 | 黄色的视频网站 | 婷婷九月激情 | www.亚洲黄 | 日韩av伦理片 | 黄色午夜网站 | 日韩免费在线视频观看 | 久久久黄视频 | 欧美日韩性视频 | 日日操日日操 | 国产91九色视频 | 欧美日韩在线播放 | 国产欧美在线一区 | 成人三级av | 国产精品入口传媒 | 69精品在线观看 | 国产手机精品视频 | www.天天射 | a国产精品 | 久久视频精品在线观看 | 欧美日韩在线免费观看视频 | 国产亚洲精品久久久久久电影 | 精品免费久久久久久 | 一区二区视频在线看 | 欧美一区二区在线免费看 | 日韩高清免费无专码区 | 日韩夜夜爽| 久久色视频 | av东方在线 | 精品久久久亚洲 | 久久黄网站 | 免费91麻豆精品国产自产在线观看 | 狠狠艹夜夜干 | 人人玩人人添人人澡超碰 | 国际精品久久久久 | 缴情综合网五月天 | 超碰97国产 | 成人在线你懂得 | 蜜桃麻豆www久久囤产精品 | 天天在线视频色 | 日本韩国精品一区二区在线观看 | 国产精品久久久久久久久久妇女 | 精品自拍网 | 精品久久久久久久久久 | 成人av观看 | www久 | 日本久久视频 | 色婷婷电影 | 日韩精品字幕 | 久久久久久久久影院 | 一区二区三区免费在线观看视频 | 国产精品久久久久久吹潮天美传媒 | 国产精品久久久毛片 | 911香蕉视频 | 99久久精品久久久久久动态片 | 久久99精品国产99久久6尤 | 日韩理论在线 | 九九九在线 | www.色五月.com | 九九日韩 | av综合站| 外国av网| 91在线麻豆| 狠狠狠色狠狠色综合 | 国产精品久久久久久久婷婷 | 日日干天天插 | 日韩免费在线观看视频 | av在线免费观看黄 | 亚洲天堂首页 | 国产首页| 国产日韩亚洲 | 热re99久久精品国产99热 | 中文字幕成人在线 | 久久99精品一区二区三区三区 | 欧美少妇xxxxxx | 久久电影色 | 搡bbbb搡bbb视频 | 天天视频色版 | 在线不卡中文字幕播放 | 亚洲免费在线视频 | 国产在线不卡视频 | 在线视频日韩一区 | 天天操网址 | 天天色天天色天天色 | 日韩精品久久久久 | 在线观看av免费 | 欧洲亚洲国产视频 | 国产99久久九九精品免费 | 黄网站污 | 美女视频久久久 | 成年人网站免费在线观看 | 欧美一二在线 | 在线天堂v | 欧美激情精品久久久久久免费 | 91九色porny在线 | 五月天视频网站 | 久久久精品二区 | 亚洲高清色综合 | 九九九九精品 | 69视频永久免费观看 | 一区三区视频 | 亚洲国产小视频在线观看 | 成人在线视频免费观看 | 在线观看视频一区二区三区 | 五月婷婷久草 | 中文字幕 国产 一区 | 天干啦夜天干天干在线线 | 狠狠干夜夜操天天爽 | 亚洲第一色 | 精品国产一区二区三区在线 | 一级a毛片高清视频 | 9在线观看免费高清完整版 玖玖爱免费视频 | 国产香蕉视频在线播放 | 欧美一区二区精品在线 | 亚洲情感电影大片 | 天天视频亚洲 | 国产亚洲成av人片在线观看桃 | 欧美韩国日本在线 | 久草网免费 | 久久久免费精品国产一区二区 | 色六月婷婷 | 久影院 | 黄色成人在线观看 | 色噜噜狠狠狠狠色综合久不 | 日本三级人妇 | 欧美日韩高清一区二区三区 | 国产成人99av超碰超爽 | 五月天色中色 | 久久xx视频 | 中文字幕在线观看第一区 | 亚洲激情在线观看 | 日韩网站免费观看 | 亚洲国产日韩精品 | 亚洲国产精品激情在线观看 | 婷婷婷国产在线视频 | 三级毛片视频 | 三级a视频| 人成午夜视频 | 色婷婷av一区 | 久草久草在线观看 | 亚洲黄色小说网址 | 91av视频在线观看 | 99热在线国产精品 | 天天操夜夜做 | 91精品视频免费看 | 美女视频又黄又免费 | 国产精品1024 | 久久久久北条麻妃免费看 | 免费不卡中文字幕视频 | 久久观看免费视频 | 亚洲精品国产精品国 | 国产另类av| 欧美国产日韩中文 | 国产一级片观看 | 99九九99九九九视频精品 | 麻豆免费精品视频 | 一区二区 不卡 | 精品久久一| 国内精品久久久久久久久 | 美女免费视频观看网站 | 一区二区三区精品在线 | 国产一级特黄毛片在线毛片 | 狠狠色伊人亚洲综合网站野外 | 91高清免费看| 欧美成人区 | 日韩欧美在线视频一区二区三区 | 亚洲精选99 | 中文十次啦 | 欧美一二三区在线播放 | a级黄色片视频 | 国产五月天婷婷 | 国产在线999 | 色综合天天天天做夜夜夜夜做 | 久青草国产在线 | 国产精品丝袜久久久久久久不卡 | 久久成人视屏 | 99视频偷窥在线精品国自产拍 | 91桃色国产在线播放 | 国产一级片久久 | 亚洲永久精品在线观看 | 成人国产在线 | 精品久久久精品 | 99久久精品午夜一区二区小说 | 久久久精品 | 亚洲黄色在线 | 美女久久一区 | www.色五月.com | 91av短视频 | 黄色亚洲 | 国产精品久久久久久久久久久久久久 | 蜜臀久久99精品久久久无需会员 | 午夜av网站| 国内亚洲精品 | 免费十分钟| 激情视频区 | 91超碰在线播放 | 欧美性生交大片免网 | 最新国产精品久久精品 | 亚洲精品美女久久 | 色婷婷av一区 | 狠狠干美女 | 亚洲精品视频在线免费 | 国产成人久久精品一区二区三区 | 欧美成人xxx| 免费黄色av电影 | 久久99九九99精品 | 午夜视频在线观看一区二区三区 | av一本久道久久波多野结衣 | 亚洲另类在线视频 | 国产精品久久久久久久免费大片 | 日韩成人看片 | 人人爽久久久噜噜噜电影 | 国产九九精品 | 久久国产精品色婷婷 | 99久久精品免费看国产四区 | 91在线观看视频 | av短片在线观看 | 日韩在线观看电影 | av成人免费观看 | 一区二区三区免费网站 | 五月婷在线观看 | 在线观看理论 | 蜜臀一区二区三区精品免费视频 | 色综合久久久久久久久五月 | 欧美日韩国产三级 | 一区二区三区国 | 日韩精品一区二区不卡 | 五月天久久 | 激情综合中文娱乐网 | 这里有精品在线视频 | 中文字幕av有码 | 日本性视频 | 亚洲v欧美v国产v在线观看 | 免费网站在线 | 国产高清永久免费 | 99精品偷拍视频一区二区三区 | 1024手机基地在线观看 | 日韩欧美高清 | 99成人在线视频 | 欧美一级淫片videoshd | 国产精品成人久久久久久久 | 91在线国产观看 | 日韩三级视频在线看 | 国产精品久久久久久久av电影 | 91精品爽啪蜜夜国产在线播放 | 国产在线欧美 | 国产精品精品久久久久久 | 国产亚洲免费观看 | 天天射综合网站 | 日本中文字幕网址 | 欧美在一区 | 香蕉视频免费看 | 久久精品免费播放 | 国产99re| 一区二区精品视频 | 日韩精品无 | 丁香综合av | 久久免费激情视频 | 欧美性久久久 | 青草视频在线看 | 99在线视频精品 | 国产99黄| 国产精品久久久久毛片大屁完整版 | 欧美a级成人淫片免费看 | 国产1级视频 | 国产精品永久在线观看 | 久久爱影视i | 久久综合九色综合久99 | 亚洲欧洲视频 | 日韩精品一区二区三区免费观看 | 亚洲黄色免费观看 | 日韩精品免费在线观看 | 五月天激情视频 | japanesefreesex中国少妇 | 欧美日本在线视频 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 天天操天 | 在线一区av | 国产无套视频 | 亚洲一区黄色 | 国产最顶级的黄色片在线免费观看 | 亚洲va欧美va | 国产精品岛国久久久久久久久红粉 | 97精品国产97久久久久久免费 | 午夜久久 | 五月天丁香亚洲 | 国产特级毛片aaaaaa毛片 | 99精品视频一区二区 | 亚洲一区在线看 | 91视频国产高清 | 五月天激情开心 | 亚洲精品人人 | 日韩av手机在线观看 | 久久久精品欧美一区二区免费 | 国产九九九精品视频 | 日韩超碰 | 日韩一区二区三区视频在线 | 黄色官网在线观看 | 久久久久免费精品视频 | 成人97人人超碰人人99 | 久久综合九色综合网站 | 日韩久久视频 | 91日韩精品视频 | 久草在线在线精品观看 | 亚洲精品国产拍在线 | 国产日韩欧美在线看 | 成人国产精品av | 婷婷色影院 | 国产在线传媒 | 亚洲资源视频 | 欧美 激情 国产 91 在线 | av丝袜在线| 自拍超碰在线 | 欧美激情视频在线观看免费 | 欧美亚洲成人免费 | 日韩av高清在线观看 | 亚洲一区二区精品3399 | 欧美激情精品久久 | 日韩欧美在线视频一区二区 | 欧美精品一区二区在线播放 | 国产视频在线看 | 99色在线观看视频 | 久热超碰 | 蜜桃视频在线视频 | 女人18片毛片90分钟 | 久久国产系列 | 欧美精彩视频在线观看 | 午夜婷婷在线观看 | 久久免费av| 久久伊人婷婷 | 在线观看视频一区二区 | 午夜精品久久久久久99热明星 | 91福利专区| h动漫中文字幕 | 天堂av中文字幕 | 国产高清精| 午夜精品一区二区三区免费 | 亚州激情视频 | 欧美一二三专区 | 婷婷去俺也去六月色 | 久久中文精品视频 | 国产精品av久久久久久无 | 国产精品久久网站 | 在线观看视频一区二区三区 | 97超碰免费在线观看 | 一级片色播影院 | 日韩久久久久 | 麻豆mv在线观看 | 国产二区电影 | 免费又黄又爽 | 五月婷婷狠狠 | 亚洲一区视频在线播放 | 久久婷婷国产 | 久久电影中文字幕视频 | 久久黄视频 | 久艹在线观看视频 | www.黄色小说.com | 精产嫩模国品一二三区 | 国产小视频91| av在线短片 | 中日韩欧美精彩视频 | 国产精品福利久久久 | 九九视频这里只有精品 | 在线观看视频免费播放 | 99r在线观看 | 国产成人久久 | 欧美日本不卡高清 | aa一级片| 一区电影 | 亚洲精品美女久久久 | 国产淫片免费看 | 日韩激情在线视频 | 亚洲国产成人精品在线 | 色在线亚洲 | 一本一本久久a久久精品牛牛影视 | 91免费在线播放 | 丁香六月网 | 亚洲精品高清视频 | 精品一区电影 | 免费观看9x视频网站在线观看 | 欧美精品乱码久久久久久按摩 | 亚洲精品系列 | 欧美精品xx | 97成人资源| 久久午夜精品视频 | 国产精品成人品 | 91精品久久久久久综合乱菊 | 精品视频成人 | 日韩精品中文字幕av | 狂野欧美激情性xxxx | 黄色av在| 伊人中文在线 | 免费观看www小视频的软件 | 国产91全国探花系列在线播放 | 亚洲欧洲国产精品 | 国产福利精品在线观看 | 婷婷性综合 | 免费久久久久久久 | www五月 | 久久人人爽爽人人爽人人片av | 中文字幕在线观看视频一区二区三区 | 日日夜夜精品 | 国产成在线观看免费视频 | 久久亚洲免费 | av动图| 亚洲精品乱码久久久久久 | 日日夜精品 | 天天想夜夜操 | 日本在线观看中文字幕 | 久久艹在线观看 | www.久久久com | 亚洲成 人精品 | 成人av直播| 天天操狠狠操网站 | 久久综合九色综合欧美就去吻 | 91香蕉国产 | 亚洲一二三区精品 | 日韩av免费一区二区 | 欧美爽爽爽 | 激情久久一区二区三区 | 国产精品电影一区 | 色偷偷888欧美精品久久久 | 久久综合久久久久88 | 九九热视频在线免费观看 | 欧美精品被 | 欧美一区在线观看视频 | 成人免费观看在线视频 | 日韩视频区 | 在线你懂的视频 | 日韩免费视频在线观看 | 久久精品免费 | 91九色精品国产 | 国产伦精品一区二区三区高清 | 欧美网站黄色 | 91成年人网站 | 亚洲国产激情 | av再线观看 | 在线视频一二三 | 99久久精品国 | 成人黄色在线播放 | 国产 在线观看 | 人人讲| 91成年视频 | 在线看的av网站 | 黄色小说免费在线观看 | 网站在线观看日韩 | 成人a在线观看 | 91在线操 | 午夜精品久久久久久久99水蜜桃 | 久av在线| 国产录像在线观看 | 久久成人一区 | 国产亚洲aⅴaaaaaa毛片 | 色婷婷激情电影 | 五月婷在线视频 | 在线观看视频一区二区三区 | 中文字幕高清免费日韩视频在线 | 日韩欧美视频在线播放 | 一区二区三区四区精品视频 | 91精品国产99久久久久久久 | 激情综合久久 | 999国内精品永久免费视频 | 免费看一级特黄a大片 | 最新av观看 | 欧美精品视 | 天天婷婷 | 精品国产一区二区三区在线观看 | 96精品在线 | 在线观看国产区 | 亚洲国产精品久久 | 欧美伦理一区二区 | 色综合久久久久综合体 | 在线观看视频黄色 | 免费高清国产 | 国产免费一区二区三区最新 | 国产高清av | 久草电影在线 | avhd高清在线谜片 | 久久综合九色综合97_ 久久久 | 91自拍视频在线 | 国产玖玖精品视频 | 亚洲影院天堂 | 99视频网址| 在线播放亚洲激情 | 国产精品九九久久久久久久 | 亚洲男女精品 | 手机看国产毛片 | 97超级碰碰碰碰久久久久 | 久久久久久久久爱 | 久久黄色免费观看 | 久久久国产影院 | 91精选| av免费看电影 | 中文字幕在线久一本久 | 久久精品视频国产 | 亚洲精品国精品久久99热一 | 久99久精品视频免费观看 | 黄色软件在线观看视频 | 国产区在线看 | 久久九九影视网 | 亚洲涩涩网站 | 91免费试看 | 99热精品免费观看 | 久久免费视频在线 | 国产精品久久99综合免费观看尤物 | 中文字幕在线观看av | av片在线看 | 久久亚洲精品国产亚洲老地址 | 91麻豆精品国产91 | 在线a视频免费观看 | 亚洲狠狠婷婷 | 青春草视频 | 欧美日韩在线网站 | 久久这里有 | 国产精品久久综合 | sesese图片 | 久久不射电影网 | 国产香蕉久久精品综合网 | 亚洲午夜精品一区 | 日韩在线三级 | 在线观看网站你懂的 | 美女视频黄色免费 | 亚洲高清91| 国产日韩中文字幕 | 操操操干干干 | 人人超碰在线 | 国产大片免费久久 | 久久久国产精品免费 | 色激情在线 | 九色在线 | 8x8x在线观看视频 | 黄网av在线 | 999久久国精品免费观看网站 | 亚洲不卡123 | www.五月天 | 亚洲va欧洲va国产va不卡 | 国产资源在线观看 | 狠狠色丁香婷婷综合最新地址 | 国产亚洲精品久久久久久网站 | 亚洲精品在线观 | 国产原创中文在线 | 国产精品理论片在线观看 | 999久久久 | 8x成人免费视频 | 久久精品在线免费观看 | 欧美一级电影片 | 91色在线观看 | 久草青青在线观看 | 免费日韩高清 | 91麻豆精品国产 | 国产日韩精品在线观看 | 亚洲免费av电影 | 亚洲国产精品久久 | av黄色在线播放 | 成人cosplay福利网站 | av三级av| 亚洲国产一区在线观看 | 久操中文字幕在线观看 | 欧美日韩在线网站 | 亚洲aⅴ乱码精品成人区 | 国产精品国产三级国产aⅴ入口 | 国产 在线 日韩 | 99视频精品全部免费 在线 | 久久精品96 | 丁香花在线视频观看免费 | 亚洲欧美日韩一区二区三区在线观看 | 日韩mv欧美mv国产精品 | 国产 日韩 欧美 自拍 | 在线免费黄色片 | 国产黄在线观看 | 在线v片 | 国产成人亚洲在线观看 | 成年人在线免费看 | 99热精品久久 | 成人午夜av电影 | av黄色影院 | 国产一区二区久久精品 | 最新91在线视频 | 久久99久久99精品 | www.伊人网 | 天天色宗合 | 人人爽人人片 | 成人免费xxxxxx视频 | 99热99热 | 五月综合 | 丁香网五月天 | 欧美专区日韩专区 | www国产一区 |