精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JVM調優之垃圾定位、垃圾回收算法、垃圾處理器對比

開發 前端 算法
談垃圾回收器之前,要先講講垃圾回收算法,以及JVM對垃圾的認定策略,JVM垃圾回收器是垃圾回收算法的具體實現,了解了前面的前置知識,有利于對垃圾回收器的理解。

 談垃圾回收器之前,要先講講垃圾回收算法,以及JVM對垃圾的認定策略,JVM垃圾回收器是垃圾回收算法的具體實現,了解了前面的前置知識,有利于對垃圾回收器的理解。

什么是垃圾?

垃圾,主要是指堆上的對象,那么如何確定這些對象是可以被回收的呢?

大概思路就是,如果一個對象永遠不可能被訪問到,那么就是垃圾,可以被回收了如何確定對象永遠不會被使用呢?

引用計數法

在對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加一;當引用失效時,計數器值就減一;任何時刻計數器為零的對象就是不可能再被使用的。但是,在Java領域,至少主流的Java虛擬機里面都沒有選用引用計數算法來管理內存,主要原因是,這個看似簡單的算法有很多例外情況要考慮,必須要配合大量額外處理才能保證正確地工作,譬如單純的引用計數就很難解決對象之間相互循環引用的問題。

如圖,每一個對象的引用都是1,構成了循環引用,但是并不能被其他對象訪問,這兩個對象再無任何引用,引用計數算法也就無法回收它們。

代碼驗證:

  1. package com.courage; 
  2. public class ReferenceCountingGC { 
  3.     public Object instance = null
  4.     private static final int _1MB = 1024 * 1024
  5.     /** 
  6.      * 這個成員屬性的唯一意義就是占點內存,以便能在GC日志中看清楚是否有回收過 
  7.      */ 
  8.     private byte[] bigSize = new byte[5* _1MB]; 
  9.     public static void testGC() { 
  10.         //5 M 
  11.         ReferenceCountingGC objA = new ReferenceCountingGC(); 
  12.         //5 M 
  13.         ReferenceCountingGC objB = new ReferenceCountingGC(); 
  14.         objA.instance = objB; 
  15.         objB.instance = objA; 
  16.         objA = null
  17.         objB = null
  18. // 假設在這行發生GC,objA和objB是否能被回收? 
  19.         System.gc(); 
  20.     } 
  21.     public static void main(String[] args) { 
  22.         testGC(); 
  23.     } 

執行結果:

  1. [0.004s][warning][gc] -XX:+PrintGCDetails is deprecated. Will use -Xlog:gc* instead. 
  2. [0.012s][info   ][gc,heap] Heap region size: 1M 
  3. [0.015s][info   ][gc     ] Using G1 
  4. [0.015s][info   ][gc,heap,coops] Heap address: 0x0000000701000000, size: 4080 MB, Compressed Oops mode: Zero based, Oop shift amount: 3 
  5. ...... 
  6. [0.119s][info   ][gc,metaspace   ] GC(0) Metaspace: 805K->805K(1056768K) 
  7. [0.119s][info   ][gc             ] GC(0) Pause Full (System.gc()) 14M->0M(8M) 2.886ms 
  8. [0.119s][info   ][gc,cpu         ] GC(0) User=0.03s Sys=0.00s Real=0.00s 
  9. [0.120s][info   ][gc,heap,exit   ] Heap 
  10. ...... 

為了篇幅,我將部分打印內容省略了,可見System.gc()后內存占用由14M->0M,將對象這10M釋放了。也就是JVM里面并沒使用引用計數法來標記垃圾。

根可達算法

這個算法的基本思路就是通過一系列稱為“GC Roots”的根對象作為起始節點集,從這些節點開始,根據引用關系向下搜索,搜索過程所走過的路徑稱為“引用鏈”(Reference Chain),如果某個對象到GC Roots間沒有任何引用鏈相連,或者用圖論的話來說就是從GC Roots到這個對象不可達時,則證明此對象是不可能再被使用的。

在Java技術體系里面,固定可作為GC Roots的對象包括以下幾種:

  1. 在虛擬機棧(棧幀中的本地變量表)中引用的對象,譬如各個線程被調用的方法堆棧中使用到的
    參數、局部變量、臨時變量等在方法區中類靜態屬性引用的對象,譬如Java類的引用類型靜態變量。
  2. 在方法區中常量引用的對象,譬如字符串常量池(String Table)里的引用。
  3. 在本地方法棧中JNI(即通常所說的Native方法)引用的對象。
  4. Java虛擬機內部的引用,如基本數據類型對應的Class對象,一些常駐的異常對象(比如
    NullPointExcepiton、OutOfMemoryError)等,還有系統類加載器。
  5. 所有被同步鎖(synchronized關鍵字)持有的對象。
  6. 反映Java虛擬機內部情況的JMXBean、JVMTI中注冊的回調、本地代碼緩存等。

垃圾回收算法

本文介紹了常見的三種垃圾回收算法(mark-sweep,mark-compact,mark-copy),是java虛擬機各種垃圾收集器的算法基礎。

垃圾回收算法思想

當前商業虛擬機的垃圾收集器,大多數都遵循了“分代收集”(Generational Collection)的理論進行設計,分代收集名為理論,實質是一套符合大多數程序運行實際情況的經驗法則,它建立在兩個分代假說之上:

1)弱分代假說(Weak Generational Hypothesis):絕大多數對象都是朝生夕滅的。

2)強分代假說(Strong Generational Hypothesis):熬過越多次垃圾收集過程的對象就越難以消亡。

這兩個分代假說共同奠定了多款常用的垃圾收集器的一致的設計原則:收集器應該將Java堆劃分出不同的區域,然后將回收對象依據其年齡(年齡即對象熬過垃圾收集過程的次數)分配到不同的區域之中存儲顯而易見,如果一個區域中大多數對象都是朝生夕滅,難以熬過垃圾收集過程的話,那么把它們集中放在一起,每次回收時只關注如何保留少量存活而不是去標記那些大量將要被回收的對象,就能以較低代價回收到大量的空間;

如果剩下的都是難以消亡的對象,那把它們集中放在一塊,虛擬機便可以使用較低的頻率來回收這個區域,這就同時兼顧了垃圾收集的時間開銷和內存的空間有效利用。

標記-清除算法 Mark-Sweep

算法分為“標記”和“清除”兩個階段:首先標記出所有需要回收的對象,在標記完成后,統一回收掉所有被標記的對象,也可以反過來,標記存活的對象,統一回收所有未被標記的對象。

它的主要缺點有兩個:

第一個是執行效率不穩定,如果Java堆中包含大量對象,而且其中大部分是需要被回收的,這時必須進行大量標記和清除的動作,導致標記和清除兩個過程的執行效率都隨對象數量增長而降低;

第二個是內存空間的碎片化問題,標記、清除之后會產生大量不連續的內存碎片,空間碎片太多可能會導致當以后在程序運行過程中需要分配較大對象時無法找到足夠的連續內存而不得不提前觸發另一次垃圾收集動作。

標記-復制 Mark-Copy

標記-復制算法常被簡稱為復制算法它將可用內存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面,然后再把已使用過的內存空間一次清理掉。

如果內存中多數對象都是存活的,這種算法將會產生大量的內存間復制的開銷,但對于多數對象都是可回收的情況,算法需要復制的就是占少數的存活對象,而且每次都是針對整個半區進行內存回收,分配內存時也就不用考慮有空間碎片的復雜情況,只要移動堆頂指針,按順序分配即可。這樣實現簡單,運行高效,不過其缺陷也顯而易見,這種復制回收算法的代價是將可用內存縮小為了原來的一半,空間浪費未免太多了。

標記-壓縮 Mark-Compact

標記-復制算法在對象存活率較高時就要進行較多的復制操作,效率將會降低。更關鍵的是,如果不想浪費50%的空間,就需要有額外的空間進行分配擔保,以應對被使用的內存中所有對象都100%存活的極端情況,所以在老年代一般不能直接選用這種算法。

標記-壓縮算法其中的標記過程仍然與“標記-清除”算法一樣,但后續步驟不是直接對可回收對象進行清理,而是讓所有存活的對象都向內存空間一端移動,然后直接清理掉邊界以外的內存:

標記-清除算法與標記-整理算法的本質差異在于前者是一種非移動式的回收算法,而后者是移動式的。是否移動回收后的存活對象是一項優缺點并存的風險決策:如果移動存活對象,尤其是在老年代這種每次回收都有大量對象存活區域,移動存活對象并更新所有引用這些對象的地方將會是一種極為負重的操作,而且這種對象移動操作必須全程暫停用戶應用程序(STW問題)才能進行 。

垃圾處理器

基于上面的三種垃圾回收算法,衍生出7種垃圾回收器:

Serial收集器

這個收集器是一個單線程工作的收集器,但它的“單線程”的意義并不僅僅是說明它只會使用一個處理器或一條收集線程去完成垃圾收集工作,更重要的是強調在它進行垃圾收集時,必須暫停其他所有工作線程,直到它收集結束。

迄今為止,它依然是HotSpot虛擬機運行在客戶端模式下的默認新生代收集器,有著優于其他收集器的地方,那就是簡單而高效(與其他收集器的單線程相比),對于內存資源受限的環境,它是所有收集器里額外內存消耗(Memory Footprint) [1] 最小的;對于單核處理器或處理器核心數較少的環境來說,Serial收集器由于沒有線程交互的開銷,專心做垃圾收集自然可以獲得最高的單線程收集效率。Serial收集器對于運行在客戶端模式下的虛擬機來說是一個很好的選擇。

ParNew收集器

ParNew收集器實質上是Serial收集器的多線程并行版本,除了同時使用多條線程進行垃圾收集之

外,其余的行為包括Serial收集器可用的所有控制參數(例如:-XX:SurvivorRatio、-XX:

PretenureSizeThreshold、-XX:HandlePromotionFailure等)、收集算法、Stop The World、對象分配規

則、回收策略等都與Serial收集器完全一致,在實現上這兩種收集器也共用了相當多的代碼。

ParNew收集器除了支持多線程并行收集之外,其他與Serial收集器相比并沒有太多創新之處,但它

卻是不少運行在服務端模式下的HotSpot虛擬機,尤其是JDK 7之前的遺留系統中首選的新生代收集

器,其中有一個與功能、性能無關但其實很重要的原因是:

除了Serial收集器外,目前只有它能與CMS

收集器配合工作,另一方面CMS的出現鞏固了ParNew的地位

ParNew收集器在單核心處理器的環境中絕對不會有比Serial收集器更好的效果,甚至由于存在線程

交互的開銷,該收集器在通過超線程(Hyper-Threading)技術實現的偽雙核處理器環境中都不能百分之百保證超越Serial收集器。當然,隨著可以被使用的處理器核心數量的增加,ParNew對于垃圾收集時

系統資源的高效利用還是很有好處的。

Parallel Scavenge收集器

Parallel Scavenge收集器也是一款新生代收集器,它同樣是基于標記-復制算法實現的收集器,也是能夠并行收集的多線程收集器……Parallel Scavenge的諸多特性從表面上看和ParNew非常相似,那它有什么特別之處呢?

Parallel Scavenge收集器的特點是它的關注點與其他收集器不同,CMS等收集器的關注點是盡可能地縮短垃圾收集時用戶線程的停頓時間,而Parallel Scavenge收集器的目標則是達到一個可控制的吞吐量(Throughput)。所謂吞吐量就是處理器用于運行用戶代碼的時間與處理器總消耗時間的比值,即:

如果虛擬機完成某個任務,用戶代碼加上垃圾收集總共耗費了100分鐘,其中垃圾收集花掉1分鐘,那吞吐量就是99%。停頓時間越短就越適合需要與用戶交互或需要保證服務響應質量的程序,良好的響應速度能提升用戶體驗;而高吞吐量則可以最高效率地利用處理器資源,盡快完成程序的運算任務,主要適合在后臺運算而不需要太多交互的分析任務。

由于與吞吐量關系密切,Parallel Scavenge收集器也經常被稱作“吞吐量優先收集器”。

Serial Old收集器

Serial Old是Serial收集器的老年代版本,它同樣是一個單線程收集器,使用標記-整理算法。這個收集器的主要意義也是供客戶端模式下的HotSpot虛擬機使用。如果在服務端模式下,它也可能有兩種用途:一種是在JDK 5以及之前的版本中與Parallel Scavenge收集器搭配使用,另外一種就是作為CMS收集器發生失敗時的后備預案,在并發收集發生Concurrent Mode Failure時使用。

Parallel Old收集器

Parallel Old是Parallel Scavenge收集器的老年代版本,支持多線程并發收集,基于標記-整理算法實現。這個收集器是直到JDK 6時才開始提供的,在此之前,新生代的Parallel Scavenge收集器一直處于相當尷尬的狀態,原因是如果新生代選擇了Parallel Scavenge收集器,老年代除了Serial Old(PSMarkSweep)收集器以外別無選擇,其他表現良好的老年代收集器,如CMS無法與它配合工作。

由于老年代Serial Old收集器在服務端應用性能上的“拖累”,使用Parallel Scavenge收集器也未必能在整體上獲得吞吐量最大化的效果。

同樣,由于單線程的老年代收集中無法充分利用服務器多處理器的并行處理能力,在老年代內存空間很大而且硬件規格比較高級的運行環境中,這種組合的總吞吐量甚至不一定比ParNew加CMS的組合來得優秀。直到Parallel Old收集器出現后,“吞吐量優先”收集器終于有了比較名副其實的搭配組合,在注重吞吐量或者處理器資源較為稀缺的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器這個組合。

CMS收集器

CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器。目前很大一部分的Java應用集中在互聯網網站或者基于瀏覽器的B/S系統的服務端上,這類應用通常都會較為關注服務的響應速度,希望系統停頓時間盡可能短,以給用戶帶來良好的交互體驗。CMS收集器就非常符合這類應用的需求。

從名字(包含“Mark Sweep”)上就可以看出CMS收集器是基于標記-清除算法實現的,它的運作過程相對于前面幾種收集器來說要更復雜一些,整個過程分為四個步驟,包括:

1)初始標記(CMS initial mark)

2)并發標記(CMS concurrent mark)

3)重新標記(CMS remark)

4)并發清除(CMS concurrent sweep)

其中初始標記、重新標記這兩個步驟仍然需要“Stop The World”。初始標記僅僅只是標記一下GCRoots能直接關聯到的對象,速度很快;并發標記階段就是從GC Roots的直接關聯對象開始遍歷整個對象圖的過程,這個過程耗時較長但是不需要停頓用戶線程,可以與垃圾收集線程一起并發運行;而重新標記階段則是為了修正并發標記期間,因用戶程序繼續運作而導致標記產生變動的那一部分對象的標記記錄,這個階段的停頓時間通常會比初始標記階段稍長一些,但也遠比并發標記階段的時間短;最后是并發清除階段,清理刪除掉標記階段判斷的已經死亡的對象,由于不需要移動存活對象,所以這個階段也是可以與用戶線程同時并發的。由于在整個過程中耗時最長的并發標記和并發清除階段中,垃圾收集器線程都可以與用戶線程一起工作,所以從總體上來說,CMS收集器的內存回收過程是與用戶線程一起并發執行的。

 

優點:并發收集、低停頓

缺點:1.對處理器資源非常敏感

​ 2.無法處理“浮動垃圾”(Floating Garbage)

​ 3.空間碎片

Garbage First收集器

Garbage First(簡稱G1)收集器是垃圾收集器技術發展歷史上的里程碑式的成果,它開創了收集器面向局部收集的設計思路和基于Region的內存布局形式。G1是一款主要面向服務端應用的垃圾收集器。

在G1收集器出現之前的所有其他收集器,包括CMS在內,垃圾收集的目標范圍要么是整個新生代(Minor GC),要么就是整個老年代(Major GC),再要么就是整個Java堆(Full GC)。而G1跳出了這個樊籠,它可以面向堆內存任何部分來組成回收集(Collection Set,一般簡稱CSet)進行回收,衡量標準不再是它屬于哪個分代,而是哪塊內存中存放的垃圾數量最多,回收收益最大,這就是G1收集器的Mixed GC模式。G1開創的基于Region的堆內存布局是它能夠實現這個目標的關鍵。雖然G1也仍是遵循分代收集理論設計的,但其堆內存的布局與其他收集器有非常明顯的差異:G1不再堅持固定大小以及固定數量的分代區域劃分,而是把連續的Java堆劃分為多個大小相等的獨立區域(Region),每一個Region都可以根據需要,扮演新生代的Eden空間、Survivor空間,或者老年代空間。收集器能夠對扮演不同角色的Region采用不同的策略去處理,這樣無論是新創建的對象還是已經存活了一段時間、熬過多次收集的舊對象都能獲取很好的收集效果。

Region中還有一類特殊的Humongous區域,專門用來存儲大對象。G1認為只要大小超過了一個Region容量一半的對象即可判定為大對象。每個Region的大小可以通過參數-XX:G1HeapRegionSize設定,取值范圍為1MB~32MB,且應為2的N次冪。而對于那些超過了整個Region容量的超級大對象,將會被存放在N個連續的Humongous Region之中,G1的大多數行為都把Humongous Region作為老年代的一部分來進行看待,如圖3-12所示。

雖然G1仍然保留新生代和老年代的概念,但新生代和老年代不再是固定的了,它們都是一系列區域(不需要連續)的動態集合。G1收集器之所以能建立可預測的停頓時間模型,是因為它將Region作為單次回收的最小單元,即每次收集到的內存空間都是Region大小的整數倍,這樣可以有計劃地避免在整個Java堆中進行全區域的垃圾收集。更具體的處理思路是讓G1收集器去跟蹤各個Region里面的垃圾堆積的“價值”大小,價值即回收所獲得的空間大小以及回收所需時間的經驗值,然后在后臺維護一個優先級列表,每次根據用戶設定允許的收集停頓時間(使用參數-XX:MaxGCPauseMillis指定,默認值是200毫秒),優先處理回收價值收益最大的那些Region,這也就是“Garbage First”名字的由來。這種使用Region劃分內存空間,以及具有優先級的區域回收方式,保證了G1收集器在有限的時間內獲取盡可能高的收集效率。

垃圾處理器總結

目前是新生代老年代垃圾回收器組合方式:

 

責任編輯:張燕妮 來源: 博客園精華區
相關推薦

2012-01-09 16:53:36

JavaJVM

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2022-01-20 10:34:49

JVM垃圾回收算法

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2015-07-06 10:14:25

Java垃圾回收實戰

2010-09-26 11:22:22

JVM垃圾回收JVM

2012-01-10 11:19:35

JavaJVM

2012-01-09 17:06:16

JavaJVM

2021-11-05 15:23:20

JVM回收算法

2014-12-19 11:07:40

Java

2012-01-10 14:25:36

JavaJVM

2022-06-10 07:13:29

JVM垃圾回收

2009-12-25 16:15:31

JVM垃圾回收算法

2023-08-08 10:29:55

JVM優化垃圾回收

2010-12-13 11:14:04

Java垃圾回收算法

2009-12-30 10:14:29

JVM垃圾回收

2010-09-25 15:33:19

JVM垃圾回收

2022-06-22 09:54:45

JVM垃圾回收Java

2024-03-11 16:27:02

垃圾回收器JVM

2021-10-05 20:29:55

JVM垃圾回收器
點贊
收藏

51CTO技術棧公眾號

久久久爽爽爽美女图片| 欧美成人官网二区| 色综合影院在线观看| 中文字幕一级片| 国产精品不卡| 亚洲国产成人精品久久| 免费观看成人在线视频| 欧洲不卡av| 成人午夜免费av| 国产精品69久久| 极品颜值美女露脸啪啪| 亚洲精品推荐| 欧美一区二区日韩一区二区| 国产女大学生av| 五月婷婷在线视频| jiyouzz国产精品久久| 国产精品久久久久久久久久久久久久| 好吊日在线视频| 欧美一级全黄| 91麻豆精品国产综合久久久久久| 欧美 日韩 国产 高清| 天堂中文а√在线| 91丨porny丨户外露出| 成人做爽爽免费视频| 黑人一级大毛片| 欧美在线不卡| 日韩最新中文字幕电影免费看| 香蕉视频污视频| 中文字幕综合| 91久久线看在观草草青青| 国产欧美123| 最新真实国产在线视频| 久久综合精品国产一区二区三区| 亚洲伊人久久大香线蕉av| 亚洲永久精品一区| 国产精品久久久久毛片大屁完整版| 久久精品成人欧美大片古装| 扒开jk护士狂揉免费| 久久人人爽人人爽人人片av不| 欧美高清一级片在线| 美女福利视频在线| yellow字幕网在线| 亚洲在线观看免费| 裸体裸乳免费看| 国产小视频福利在线| 成人免费黄色大片| 北条麻妃高清一区| 国产aⅴ爽av久久久久成人| 蜜桃精品在线观看| 国产精品久久久久久av福利| 日韩美一区二区| 99av国产精品欲麻豆| 欧美精品成人在线| 免费日韩在线视频| 欧美日韩国产探花| 欧美国产日韩中文字幕在线| 国产精品三区在线观看| 91成人精品视频| 久久手机精品视频| 日韩女优一区二区| 欧美午夜免费影院| 欧美国产日本在线| 国产一级片播放| 精品电影一区| 91精品国产91久久久久福利| 日韩av黄色片| 亚洲一区二区成人| 国产精品吊钟奶在线| 无码人妻一区二区三区免费| 三级久久三级久久久| 国产大片精品免费永久看nba| 日韩综合在线观看| 奇米精品一区二区三区在线观看一| 国产精品aaa| 亚洲中文一区二区三区| 国产综合久久久久久久久久久久| 亚洲www在线| 精品乱子伦一区二区| 成人丝袜18视频在线观看| 国产亚洲一区在线播放| 天堂中文在线8| 国产亚洲成aⅴ人片在线观看| 少妇特黄a一区二区三区| 香港伦理在线| 亚洲愉拍自拍另类高清精品| 亚洲熟妇无码另类久久久| 日韩毛片免费观看| 欧美挠脚心视频网站| 成人做爰69片免费| 日韩极品少妇| 中文字幕一区二区三区电影| 欧美在线视频第一页| 亚洲激情婷婷| 国产精品久久久久久久av大片| 国产情侣av在线| 97久久精品人人做人人爽| 亚洲精品tv久久久久久久久| 亚洲婷婷噜噜| 91国产丝袜在线播放| 人妻激情偷乱视频一区二区三区| 日韩美女国产精品| 深夜成人在线观看| 国产手机在线视频| 麻豆久久久久久久| 九九九热999| 18免费在线视频| 亚洲国产精品人人做人人爽| 国产福利一区视频| 91精品久久久久久综合五月天| 亚洲欧美自拍一区| 麻豆亚洲av成人无码久久精品| 香蕉久久夜色精品国产| 91久久久久久久久| 青草久久伊人| 亚洲高清在线精品| 国产精品嫩草影院8vv8 | 久久综合色占| 久久夜色撩人精品| 亚洲免费视频二区| 99久久婷婷国产| a级网站在线观看| 另类专区亚洲| 精品国产乱码久久久久久图片| 谁有免费的黄色网址| 激情成人综合| 亚洲a级在线播放观看| av电影在线观看| 欧美视频在线观看免费网址| 国偷自产av一区二区三区麻豆| 成人动漫免费在线观看| 4444欧美成人kkkk| 韩国av免费在线观看| 亚洲色图欧洲色图| 一区二区三区网址| 精品久久综合| 青草青草久热精品视频在线网站| 欧美国产视频一区二区| 久一视频在线观看| 韩日精品视频一区| 亚洲一区二区在线免费观看| 免费成人直播| 亚洲精品国产成人| 香蕉视频一区二区| 成人综合在线网站| www.九色.com| 91综合久久爱com| 欧美大片va欧美在线播放| 中文字幕一区二区人妻痴汉电车| 久久久国产精华| 久久久999免费视频| 露出调教综合另类| 97香蕉超级碰碰久久免费软件| 亚洲成人一二三区| 亚洲五月六月丁香激情| 麻豆av免费看| 亚洲天堂男人| 欧美优质美女网站| 日韩国产美国| 日本免费一区二区三区四区| 日韩精品中文字幕在线| av在线不卡一区| 成a人v在线播放| 在线观看日韩电影| 日韩女同一区二区三区| 久久久久国产一区二区| 日韩av在线电影观看| jizz久久精品永久免费| 久久人人爽亚洲精品天堂| 中文字幕日本视频| 国产女主播在线一区二区| 少妇激情一区二区三区| 欧美在线色图| 成人免费视频a| 污污视频在线| 欧美激情综合亚洲一二区 | xxxxxx欧美| 亚洲欧洲黄色网| 中文永久免费观看| 国产精品成人午夜| 国产精品欧美性爱| 国产一区二区你懂的| 日韩福利视频| 久久噜噜噜精品国产亚洲综合 | 亚洲影视在线观看| 国产精品久久久久久亚洲av| 亚洲男人影院| 五月天亚洲综合小说网| 日韩成人18| 97视频在线观看亚洲| 国产人成在线观看| 欧美一级日韩免费不卡| 日韩三级小视频| 国产清纯白嫩初高生在线观看91| 亚洲免费黄色录像| 激情视频一区| 日韩av高清在线播放| 成人午夜888| 5566日本婷婷色中文字幕97| 免费网站成人| 精品一区二区电影| 国产熟女一区二区三区五月婷| 岛国精品视频在线播放| 国产馆在线观看| 国产91精品一区二区麻豆网站| 欧美一级片中文字幕| 欧美成人有码| 天堂av一区二区| 国产欧美三级电影| 成人激情黄色网| 在线中文字幕播放| 精品自在线视频| jizz日韩| 亚洲国产精品免费| 国产视频手机在线| 欧美综合色免费| 国产午夜精品无码| 亚洲婷婷国产精品电影人久久| 精品人妻无码一区二区三区 | 97人人精品| 欧美极品一区二区| 成人春色在线观看免费网站| 国产欧美欧洲在线观看| 五月天av在线| 欧美夫妻性视频| 日本天堂在线观看| 一区二区日韩精品| 少妇性bbb搡bbb爽爽爽欧美| 日韩免费视频线观看| 亚洲无码精品在线观看| 色八戒一区二区三区| 日本少妇毛茸茸高潮| 亚洲乱码中文字幕| xxxxx99| 久久午夜羞羞影院免费观看| av av在线| 国产精品2024| 精产国品一二三区| 久久电影网站中文字幕| 欧美日韩在线观看不卡| 久久精品人人做人人爽电影蜜月| 性欧美大战久久久久久久| 欧美激情第8页| 欧美日韩一级在线| 97国产成人高清在线观看| 色一情一乱一伦一区二区三区| 羞羞色国产精品网站| 国产伦精品一区二区三区高清| 538任你躁精品视频网免费| 91成人理论电影| 日本亚州欧洲精品不卡| 999热视频| 亚洲小说春色综合另类电影| 99久久99久久| 亚洲精选av| 国产精品免费视频一区二区| 精品国产乱子伦一区二区| 国产超碰91| 精品午夜电影| 九九九热999| 国产成人1区| 亚洲精品无人区| 婷婷久久一区| 日韩中文字幕在线不卡| 亚洲茄子视频| 欧美精品一区二区三区免费播放| 久久三级视频| 我要看一级黄色大片| 另类调教123区| 手机精品视频在线| 成人av一区二区三区| 51调教丨国产调教视频| 国产欧美日韩综合精品一区二区 | 精品久久在线观看| 欧美精品一区二| 久久精品a一级国产免视看成人 | 极品中文字幕一区| 精品少妇人妻av免费久久洗澡| 国产精品久久久一区二区| 8x8x最新地址| 国产乱淫av一区二区三区| 国产艳妇疯狂做爰视频 | 国产精品一区二区欧美黑人喷潮水| 极品束缚调教一区二区网站 | 国产精品成人一区二区不卡| av动漫在线免费观看| 亚洲一区免费| 九九热免费在线观看| 丁香一区二区三区| 亚洲v国产v欧美v久久久久久| 1000精品久久久久久久久| 久久久久久久久久综合| 一道本成人在线| 国产精选久久久| 日韩精品福利在线| 精品孕妇一区二区三区| 91福利视频网| 亚洲高清影院| 美女一区视频| 欧美黄免费看| 日本成人中文字幕在线| 国产不卡视频在线播放| 欧美黄色高清视频| 亚洲图片欧美综合| 亚洲一级特黄毛片| 日韩福利在线播放| а√天堂官网中文在线| 欧美一级成年大片在线观看| 欧美经典一区| 日韩亚洲不卡在线| 亚洲精品在线二区| 色男人天堂av| 亚洲国产精品v| 91精品国产乱码久久久张津瑜| 欧美美女激情18p| 免费在线高清av| 欧美精品18videos性欧美| 亚洲综合av一区二区三区| 国产精品视频免费一区| 91精品综合久久久久久久久久久 | 天天躁夜夜躁狠狠是什么心态| 一级日本不卡的影视| 中文字幕人妻丝袜乱一区三区| 亚洲国产精品资源| av免费在线观看网址| 国产精品久久久久一区二区| 日韩伦理一区二区三区| 黄色a级片免费看| 国产制服丝袜一区| 黑人狂躁日本娇小| 欧美这里有精品| 美丽的姑娘在线观看免费动漫| 久久久久久久久中文字幕| 久久69av| 干日本少妇视频| 久久精品久久99精品久久| 免费黄色片网站| 欧美视频在线观看免费网址| 色综合免费视频| 国模极品一区二区三区| 日韩精品久久久久久久软件91| 一区二区三区三区在线| 奇米精品一区二区三区在线观看 | 亚洲免费毛片| 又粗又黑又大的吊av| 91麻豆免费在线观看| 99久热在线精品996热是什么| 日韩av网址在线观看| 蜜桃av在线播放| 麻豆精品蜜桃一区二区三区| 中文高清一区| 三级黄色片网站| 黑人极品videos精品欧美裸| 天天爽夜夜爽夜夜爽| 97在线精品视频| 秋霞影院一区二区三区| 国产a级一级片| 国产亚洲精品中文字幕| 天堂免费在线视频| 一道本无吗dⅴd在线播放一区| 国产 日韩 欧美一区| 亚洲一区综合| 国内精品久久久久影院色 | 欧美亚洲日本| 日韩av电影手机在线| 成人av国产| 青青草原播放器| 亚洲一区二区三区不卡国产欧美| 亚洲乱色熟女一区二区三区| 欧美激情在线视频二区| 理论片一区二区在线| 一本久道综合色婷婷五月| 国产精品五月天| 国产乱子伦精品无码码专区| 欧美高清视频在线| 日韩av黄色在线| 国产主播中文字幕| 日韩毛片在线免费观看| 亚洲乱码精品久久久久.. | 伊人情人网综合| 国产精品资源在线| 日韩免费一级片| 一区二区福利视频| 日本免费一区二区三区视频| 欧美精品一区免费| 国产精品情趣视频| 亚洲黄色小说网址| 国产精品精品一区二区三区午夜版| 小处雏高清一区二区三区| 日本美女视频网站| 欧美性感一区二区三区| 狂野欧美性猛交xxxxx视频| 欧美一区二区视频在线| 国产一区二区导航在线播放| 偷偷操不一样的久久| 色偷偷偷亚洲综合网另类| 99久久香蕉| 国产aaaaa毛片| 午夜欧美2019年伦理| 欧美成年黄网站色视频| 好吊妞www.84com只有这里才有精品 |