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

一文吃透 JVM 中的垃圾收集器

開發 前端
在 JDK1.8 及之后的版本中,用元空間來作為方法區的實現,元空間的內存空間默認使用的是操作系統的內存空間,它的垃圾回收不再由 Java 來控制,元空間的內存管理由元空間虛擬機來完成。

01、背景介紹

今天通過這篇文章,結合之前的知識,我們一起來了解一下 JVM 中的垃圾收集器。

02、垃圾收集器

如果說收集算法是內存回收的方法論,那么垃圾收集器就是內存回收的具體實現。

不同的虛擬機所提供的垃圾收集器可能會有很大差異,以 HotSpot 虛擬機為例,所包含的垃圾收集器可以用如下圖來概括。

圖片圖片

上圖中的連線表示,不同分代的收集器可以搭配使用。

  • 新生代收集器:Serial、ParNew、Parallel Scavenge
  • 老年代收集器:Serial Old、CMS、Parallel Old
  • 通用收集器:G1

在虛擬機中,沒有所謂的萬能收集器,只有根據具體的業務場景,選擇最合適的收集器。這也是為什么 HotSpot 實現了這么多收集器的原因。

下面我們一起來看看相關的具體實現。

2.1、Serial 和 Serial Old收集器

Serial 系列的垃圾收集器是 JVM 的第一款收集器,它的設計思路很簡單,在新生代,使用單線程采用復制算法進行收集對象;在老年代,使用單線程采用標記整理算法進行收集對象;垃圾收集的過程中會暫停用戶線程,直到垃圾收集完畢。

因為當時的硬件環境配置都不高,內存都是幾十兆,CPU 也都是單核的,不像現在這樣處處都是高并發的應用場景。限于當時的硬件資源和應用場景,這個收集器優勢很突出,簡單高效、消耗資源也很少。

唯一的不足在于,在用戶不可見的情況下要把用戶正常工作的線程全部停掉,這對很多應用比較難以接受。不過實際上到目前為止,Serial 收集器依然是虛擬機在 Client 模式下運行的默認新生代收集器,因為它簡單而高效。客戶端應用模型下,分配給虛擬機管理的內存一般來說不會很大,收集幾十兆甚至一兩百兆的新生代對象,停頓時間平均在幾十毫秒,只要不是頻繁收集,完全可以接受。

整個流程,可以用如下圖來概括。

圖片圖片

總結下來,收集器特點如下:

  • 收集區域:Serial(新生代),Serial Old(老年代)
  • 收集算法:Serial(復制算法),Serial Old(標記整理算法)
  • 收集方式:單線程
  • 優勢:簡單高效,內存資源占用少,單核 CPU 環境最佳選項
  • 劣勢:整個搜集過程需要停頓用戶線程,多核 CPU、大內存的環境,資源優勢無法發揮起來

2.2、ParNew收集器

ParNew 收集器,可以看成是 Serial 收集器的多線程版本。除了使用多線程進行垃圾收集外,其余行為和 Serial 收集器完全一樣,包括使用的也是復制算法,垃圾收集時暫停用戶線程。在多核 CPU 資源環境下,可以顯著提升整個垃圾收集的性能,也是虛擬機在 Server 模式下運行的首選新生代收集器。

能讓 ParNew 出名的一個核心因素是,它是除了 Serial 收集器外,目前唯一一個能與 CMS 收集器配合一起使用的新生代收集器,因為 CMS 優秀所以 ParNew 也出名了,有點類似碰上了大款的感覺,其中 CMS 收集器是一款幾乎可以認為有劃時代意義的垃圾收集器,下文我們再講。

其次,ParNew 收集器在單個 CPU 的環境中絕對不會有比 Serial 收集器更好的效果,甚至由于線程交互的開銷,該收集器在兩個 CPU 的環境中都不能百分之百保證可以超越 Serial 收集器。當然,隨著可用 CPU 數量的增加,它對于垃圾收集的效率提升還是很有幫助的。

整個流程,可以用如下圖來概括。

圖片圖片

總結下來,收集器特點如下:

  • 收集區域:新生代
  • 收集算法:復制算法
  • 收集方式:多線程
  • 優勢:多線程收集,多核 CPU 環境下效率要比 serial 高,新生代中,除了 Serial 收集器外目前唯一一個能與 CMS 配合的收集器
  • 劣勢:整個搜集過程需要停頓用戶線程

3.3、Parallel Scavenge 和 Parallel Old收集器

Parallel Scavenge 和 ParNew 收集器很類似,也是一款使用多線程采用復制算法的新生代收集器;Parallel Old 收集器是一款使用多線程采用標記整理算法的老年代收集器;垃圾收集過程中也會暫停用戶線程,直到整個垃圾收集過程結束。

不同的是,Parallel 收集器更關注系統的吞吐量,也被稱為“吞吐量優先收集器”。

所謂吞吐量的意思就是 CPU 用于運行用戶代碼時間與 CPU 總消耗時間的比值,即吞吐量=運行用戶代碼時間/(運行用戶代碼時間+垃圾收集時間),比如虛擬機總運行 100 分鐘,垃圾收集 1 分鐘,那吞吐量就是 99%。高吞吐量可以高效率的利用 CPU 資源,盡快完成程序的運算任務,主要適合在后臺運算而不需要太多交互的任務。

自適應調節策略也是 Parallel Scavenge 與 ParNew 的一個重要區別,用戶可以通過參數來打開自適應調節策略,比如-XX:+UseAdaptiveSizePolicy參數,打開之后就不需要手動指定新生代大小、Eden 區和 Survivor 參數等細節參數了,虛擬機會根據當前系統的運行情況收集性能監控信息,動態調整這些參數以提供最合適的停頓時間或最大的吞吐量。如果對于垃圾收集器運作原理不太了解,優化比較困難的情況下,使用 Parallel 收集器配合自適應調節策略,把內存管理的調優任務交給虛擬機去完成也是一個不錯的選擇。

另外,Parallel 收集器是虛擬機在 Server 模式下運行的默認垃圾收集器。

整個執行流程,跟 ParNew 收集器類似。

總結下來,收集器特點如下:

  • 收集區域:Parallel Scavenge(新生代),Parallel Old(老年代)
  • 收集算法:Parallel Scavenge(復制算法),Parallel Old(標記整理算法)
  • 收集方式:多線程
  • 優勢:多線程收集,多核 CPU 環境下效率要比 serial 高
  • 劣勢:整個搜集過程需要停頓用戶線程

2.4、CMS收集器

CMS 收集器是一種以獲取最短回收停頓時間為目標的老年代收集器。

與前面幾個收集器不同,它采用了一種全新的策略可以在垃圾回收過程中的某些階段用戶線程和垃圾回收線程一起工作,從而避免了因為長時間的垃圾回收而使用戶線程一直處于等待之中。

目前很大一部分 Java 應用集中在互聯網站或者 B/S 系統的服務端上,這類應用尤其注重服務的響應速度,希望系統停頓時間最短,比如在一個長度為 M 毫秒的時間片段內,消耗在垃圾收集上的時間不得超過多少毫秒,以期給用戶帶來較好的體驗,其中 CMS 收集器就非常符合這類應用的需求。

CMS 的英文全程是:Concurrent Mark-Sweep Collector,從名字上就能看出 CMS 收集器是基于“標記-清除”算法實現的,它的運作過程相對于前面幾種收集器來說要更復雜一些,整個過程分為如下 4 個步驟:

  • 初始標記
  • 并發標記
  • 重新標記
  • 并發清除

CMS 會根據每個階段不同的特性來決定是否停頓用戶線程。整個流程,可以用如下圖來概括。(圖片來自于勤勞的小手 - 垃圾收集器文章)

圖片圖片

2.4.1、階段一:初始標記

初始標記階段的工作主要是標記一下 GC Roots 能直接關聯到的對象,這個過程會短暫的停頓用戶線程,因為并不會對整個 GC Roots 的引用進行遍歷,因此速度很快。

2.4.2、階段二:并發標記

并發標記階段的工作主要是把階段一標記好的 GC Roots 對象進行深度的遍歷,找到所有與 GC Roots 關聯的對象并進行標記,這個過程會采用多線程的方式進行遍歷標記,因為非常耗時,CMS 考慮到為了盡量不停頓用戶線程,因此這個階段不會暫停用戶線程,也就是說,此時 JVM 會分配一些資源給用戶線程執行任務,通過這樣的方式減少用戶線程的停頓時間。

2.4.3、階段三:重新標記

重新標記階段的工作主要是修補階段二用戶線程運行期間產生新的垃圾對象,進行重新標記,同樣也是采用多線程方式進行,此階段數量不會很多,會短暫的停頓用戶線程,速度也很快。

2.4.4、階段四:并發清除

并發清除階段的工作主要是對那些被標記為可回收的對象進行清理,在一般情況下,并發清除階段是使用的是“標記-清除”算法,因為這個過程不會牽扯到對象的地址變更,所以 CMS 在并發清除階段是不需要停止用戶線程的,對象回收效率非常高。

與此同時,正因為并發清除階段用戶線程也可以同時運行,所以在用戶線程運行的過程中自然也會產生新的垃圾對象,這也就是導致 CMS 收集器會產生“浮動垃圾”的原因,此時也會產生很多的空間碎片,當空間碎片到達了一定程度時,此時 CMS 就會使用“標記-整理”算法來解決空間碎片的問題。

在上文的垃圾回收算法中我們有說到,“標記-整理”算法會將對象的位置進行挪動并更新對象的引用的指向地址,在這個過程中,如果用戶線程同時運行的話會產生并發問題,因此當 CMS 進行碎片整理的時候必須得停止用戶線程。所以,在某些情況下,并發清除階段 CMS 也會停頓用戶線程。

CMS 收集器作為一個全新思路的垃圾收集器,雖然很優秀,但一直沒有被 Hospot 虛擬機納入為默認的垃圾收集器。時至今日,JDK1.8 使用的默認收集器都還是 Parallel scavenge 和 Parallel old 收集器,主要原因在于 CMS 存在一些比較頭疼的問題,比如浮動垃圾、空間碎片整理時會造成系統卡頓、在并發清除階段可能會出現系統長時間的假死。

2.4.5、小結

總結下來,收集器特點如下:

  • 收集區域:老年代
  • 收集算法:標記清除算法 + 標記整理算法
  • 收集方式:多線程
  • 優勢:多線程收集過程中可以做到不停止用戶線程,以獲取最短回收停頓時間
  • 劣勢:會產生浮動垃圾、空間碎片整理時會造成系統卡頓、并發清除階段可能會出現系統假死等問題

2.5、G1收集器

G1(Garbage-First)收集器是當今收集器技術發展的最前沿成果之一,從 JDK 7 Update 4 后開始進入商用。

在 G1 收集器出現之前,不管是 Serial 系列,Parallel 系列,還是 CMS 收集器,它們都是基于把內存進行物理分區的形式將 JVM 內存分成新生代、老年代、永久代或 MetaSpace,這種分區模式下進行垃圾收集時必須對某個區域進行整體性的收集,比如整個新生代、整個老年代收集或者整個堆,當內存空間不大的時候,比如幾個 G,通過參數優化能取得不錯的收集性能。但是,隨著硬件資源的發展,JVM 可用內存從幾十 G 到幾百 G 甚至上 T 時,這種采用傳統模式下的物理分區進行收集時,每次掃描內存的區域自然就變大了,進行垃圾清理的時間自然就變得更長了,此時傳統的收集器即時再怎么優化,也難以取得令人滿意的收集效果,因此需要一款全新的垃圾收集器。

G1 收集器就是在這樣的環境下誕生的,它摒棄了原來的物理分區,把整個 Java 堆分成若干個大小相等的獨立區域(Region),雖然還保留有新生代和老年代的概念,但新生代和老年代不再是物理隔離,它們都是一部分 Region 的集合。從結構上看,G1 收集器不要求整個新生代或者老年代都是連續的,也不再堅持固定大小和固定數量,它會跟蹤各個 Region 里面的垃圾堆積的價值大小,在后臺維護一個優先列表,每次根據允許的收集時間,優先回收價值最大的 Region。這種通過 Region 劃分內存空間以及有優先級的區域回收方式,保證了 G1 收集器在有限的時間內可以獲取盡可能高的收集效率。

G1 收集器內存劃分,可以用如下圖來概括。(圖片來自于勤勞的小手 - 垃圾收集器文章)

圖片圖片

在 G1 收集器里面維護了一個 Collect Set 集合,這個集合里面記錄了待回收的 Region 區域信息,同時也包括了每個 Region 區域可回收的大小空間。通過 Collect Set 里面的信息,G1 在進行垃圾收集時,可以根據用戶設定的可接受停頓時間來進行分析,在設定的時間范圍內優先收集垃圾最多的 Region 區域,以實現高吞吐、低停頓的收集效果。

在工作流程上,G1 收集器也吸收了 CMS 很多優秀的收集思路,整個垃圾收集過程,可以分為如下 4 個步驟:

  • 初始標記
  • 并發標記
  • 重新標記
  • 篩選回收

G1 收集器的垃圾回收流程和 CMS 邏輯大致相同,主要的區別在最后一個階段,G1 不會直接進行清除,而是會根據設置的停頓時間進行智能的篩選和局部的回收,采用“標記復制”算法來實現。

整個流程,可以用如下圖來概括。

圖片圖片

2.5.1、階段一:初始標記

此階段的工作內容與上文介紹的 CMS 收集器一樣,會先把所有 GC Roots 直接引用的對象進行標記,同時會短暫的停止用戶線程,因為不會對整個 GC Roots 的引用進行遍歷,因此速度比較快。

2.5.2、階段二:并發標記

此階段的工作內容與上文介紹的 CMS 收集器也一樣,找到所有與 GC Roots 關聯的對象并進行深度遍歷標記,會采用多線程的方式進行遍歷標記,因為比較耗時,為了盡量不停頓用戶線程,這個階段 GC 線程會和用戶線程同時運行,通過這樣的方式減少用戶線程的停頓時間。

2.5.3、階段三:重新標記

此階段的工作內容與上文介紹的 CMS 收集器也是一樣,針對階段二用戶線程運行的過程中產生新的垃圾,采用多線程方式進行重新標記,為了避免這個過程再次產生新的垃圾對象,會短暫的停止用戶線程,因為數量不會很多,因此速度比較快。

2.5.4、階段四:篩選回收

篩選回收階段的工作主要是把存活的對象復制到 Region 空閑區域,同時會根據 Collect Set 記錄的可回收 Region 信息進行篩選,計算 Region 回收成本,接著根據用戶設定的停頓時間值制定回收計劃,最后根據回收計劃篩選合適的 Region 區域進行垃圾回收。

從局部來看,G1 使用的是復制算法,將存活對象從一個 Region 區域復制到另一個 Region 空閑區域;但從整個堆來看,G1 使用的邏輯又相當于標記整理算法,每次垃圾收集時會把存活的對象整理到對應可用的 Region 區域,再把原來的 Region 區域標記為可回收區域并記錄到 Collect Set 中,因此 G1 的每一次回收都可以看作是一次標記整理過程,兩者都不會產生空間碎片問題。

2.5.5、小結

總結下來,收集器特點如下:

  • 收集區域:整個堆內存
  • 收集算法:復制算法
  • 收集方式:多線程
  • 優勢:停頓時間可控,吞吐量高,不會產生空間碎片,不需要額外的收集器搭配
  • 劣勢:目前而言,相較于 CMS,G1 還不具備全方位、壓倒性優勢,G1 在收集過程中內存占用和執行負載都偏高;其次,在小內存應用上 CMS 的表現大概率會優于 G1,而 G1 在大內存應用上會比較有優勢,6G 以上的內存可以考慮使用 G1 收集器

2.6、常用的收集器組合

最后我們對以上介紹的垃圾收集器進行一次匯總,同時介紹一下服務器端常用的組合模式,內容如下。

服務器組合

新生代收集器

老年代收集器

備注

組合一

Serial

Serial Old

Serial 是一個使用單線程采用復制算法的新生代收集器;Serial Old 是一個使用單線程采用標記整理算法的老年代收集器,GC 時會暫停所有應用線程,可以使用-XX:+UseSerialGC選項來開啟

組合二

ParNew

Serial Old

ParNew 是一個使用多線程采用復制算法的新生代收集器,GC 時會暫停所有應用線程,可以使用-XX:+UseParNewGC選項來開啟

組合三

Parallel Scavenge

Serial Old

Parallel Scavenge 是一個使用多線程采用復制算法的新生代收集器,GC 時會暫停所有應用線程,可以使用-XX:+UseParallelGC選項來開啟;需要注意的是,在jdk1.7及之前的版本中,這個參數默認采用 Serial Old 作為老年代收集器;在jdk1.8及之后的版本中,默認采用 Parallel Old 作為老年代收集器

組合四

Parallel Scavenge

Parallel Old

Parallel Old是 Serial Old 的多線程版收集器,可以使用-XX:+UseParallelOldGC選項來開啟

組合五

Serial

CMS + Serial Old

CMS 是一個使用多線程采用標記清楚算法的老年代收集器,可以實現 GC 線程和用戶線程并發工作,不需要暫停所有用戶線程;另外,可以將 Serial Old 收集器作為備選,當 CMS 進行 GC 失敗時,會自動使用 Serial Old 進行 GC;可以使用-XX:+UseConcMarkSweepGC選項來開啟

組合六

ParNew

CMS + Serial Old

ParNew 是除了 Serial 以外,唯一一個能搭配 CMS 的新生代收集器;可以使用-XX:+UseConcMarkSweepGC開啟,默認使用 ParNew 作為新生代收集器,也可以通過-XX:+UseParNewGC強制指定 ParNew

組合七

G1

G1

G1 是一個新一代的垃圾收集器,摒棄了原來的物理分區,把整個 Java 堆分成若干個大小相等的獨立區域(Region),針對局部區域使用多線程采用復制算法進行篩選回收,可以使用-XX:+UseG1GC選項來開啟

03、方法區回收

以上介紹的都是對象的回收過程,在之前的 JVM 內存結構的文章中我們介紹到,Java 應用程序運行時,除了堆空間會存在垃圾數據以外,方法區同樣也存在。

雖然虛擬機規范中沒有明確要求方法區一定要實現垃圾回收,主要原因在于這個區域的垃圾回收效率非常低,但是 HotSpot 虛擬機對方法區也會進行回收的,主要回收的是廢棄常量和無用的類兩部分。

如何判斷一個常量是否為“廢棄常量”呢?其實很簡單,只要當前系統中沒有任何一處引用該常量,就會被判定為廢棄常量。

如何判斷一個類是否為“無用的類”呢?條件非常苛刻,需要同時滿足以下三點。

  • 1.該類所有實例都已經被回收,也就是說 Java 堆中不存在該類的任何實例
  • 2.該類對應的java.lang.Class對象沒有在任何地方被引用,無法在任何地方通過反射訪問該類的方法
  • 3.加載該類的 ClassLoader 已經被回收,也就是說這個類的類加載器被卸載回收了

滿足以上三個條件則表示這個類再也無用了,HotSpot 虛擬機會對此類進行回收。例如在大量使用反射、動態代理、CGLib 等 ByteCode 框架,并自定義 ClassLoader 創建的類,為了保證方法區不會溢出,虛擬機會在適當的情況下對無用的類進行回收。

在 JDK1.7 及以前的版本中,用永久代來作為方法區的實現,當永久代的空間不足時會觸發 Full GC。

在 JDK1.8 及之后的版本中,用元空間來作為方法區的實現,元空間的內存空間默認使用的是操作系統的內存空間,它的垃圾回收不再由 Java 來控制,元空間的內存管理由元空間虛擬機來完成。

04、小結

本文主要圍繞對象的垃圾收集器,做了一次知識內容的整理和總結,如果有描述不當的地方,歡迎大家留言指出,不勝感激。

05、參考

1.https://zhuanlan.zhihu.com/p/267223891

2.https://www.cnblogs.com/xrq730/p/4836700.html

3.https://zhuanlan.zhihu.com/p/248709769

4.http://www.ityouknow.com/jvm/2017/09/28/jvm-overview.html

責任編輯:武曉燕 來源: 潘志的研發筆記
相關推薦

2024-12-30 08:03:08

2017-09-21 14:40:06

jvm算法收集器

2022-04-19 11:25:31

JVMZGC垃圾收集器

2023-08-27 21:29:43

JVMFullGC調優

2024-03-14 09:00:00

2025-07-11 02:33:00

JVM垃圾回收

2011-12-20 10:43:21

Java

2011-07-21 14:54:26

java垃圾收集器

2022-07-25 10:15:29

垃圾收集器Java虛擬機

2020-02-25 22:01:36

理解JVM垃圾收集器

2024-08-09 08:41:14

2013-12-19 09:46:04

垃圾收集器

2009-10-30 10:47:48

VB.NET垃圾收集器

2023-11-16 08:00:56

Java11G1

2024-03-15 08:04:30

G1CMSJVM

2024-03-27 10:27:35

延遲垃圾收集器

2021-04-27 11:28:21

React.t事件元素

2024-09-18 13:57:15

2011-05-10 16:04:45

Java垃圾收集器

2010-09-27 12:42:15

JVM1.4.1JVM垃圾收集
點贊
收藏

51CTO技術棧公眾號

亚洲美女在线一区| 久久成人综合网| 亚洲欧美在线免费观看| 久久久久久久少妇| 黄色网页在线播放| 波多野结衣中文字幕一区| 国产97在线观看| 欧美成欧美va| 国内黄色精品| 日韩一级片网站| 久久美女福利视频| 中日韩高清电影网| 国产午夜亚洲精品不卡| 7777精品久久久大香线蕉小说| 黑人一级大毛片| 欧美电影《睫毛膏》| 亚洲韩国日本中文字幕| 中文字幕资源在线观看| 亚洲小少妇裸体bbw| 亚洲欧美综合色| 免费中文日韩| 午夜精品久久久久久久99热黄桃 | 久久天天久久| 香蕉加勒比综合久久| 特级毛片在线免费观看| 黄上黄在线观看| av一区二区久久| 91夜夜未满十八勿入爽爽影院| 国产情侣小视频| 99精品视频免费观看视频| 久久天天躁日日躁| 丁香六月激情综合| 国产中文精品久高清在线不| 亚洲第一网中文字幕| 中文字幕第三区| 欧美性aaa| 在线观看91视频| 日本熟妇人妻xxxxx| bbw在线视频| 亚洲夂夂婷婷色拍ww47| 婷婷视频在线播放| 在线看av的网址| 国产亚洲欧美日韩在线一区| 久热这里只精品99re8久 | 一区二区三区高清国产| 大又大又粗又硬又爽少妇毛片 | 国产亚洲视频中文字幕视频| 国产精品手机在线观看| 99久久免费精品国产72精品九九| 91麻豆精品久久久久蜜臀| 美女网站色免费| yy6080久久伦理一区二区| 91国产丝袜在线播放| 欧美综合在线观看视频| 免费成人直播| 色欧美片视频在线观看| 人妻丰满熟妇av无码区app| 亚洲一二三四| 在线精品视频免费观看| 黑鬼大战白妞高潮喷白浆| 韩国美女久久| 欧美自拍丝袜亚洲| 九九热精品在线播放| 偷拍自拍亚洲| 日韩一区二区三免费高清| 亚洲精品成人无码毛片| 成人在线视频你懂的| 亚洲国产精品推荐| 美女脱光内衣内裤| 日本一区二区高清不卡| 俺去亚洲欧洲欧美日韩| 艳妇荡乳欲伦69影片| 欧美精品播放| 2019av中文字幕| 欧美日韩 一区二区三区| 久久精品国产99久久6| 亚洲一区二区三区在线免费观看| 亚洲精品国产suv一区| 菠萝蜜视频在线观看一区| 欧美黑人xxxxx| 最新真实国产在线视频| 一区二区三区四区精品在线视频 | 日韩精品一区二区三区视频在线观看| 国产精品成人免费一区久久羞羞| 日本一区福利在线| 中文字幕一区二区精品| 国产亚洲欧美精品久久久久久 | 高潮一区二区三区| jazzjazz国产精品久久| 亚洲欧洲xxxx| 好吊色视频在线观看| 在线视频亚洲| 国产在线视频2019最新视频| 秋霞视频一区二区| 国产精品免费丝袜| 你真棒插曲来救救我在线观看| 天天综合网站| 精品久久久久香蕉网| 中文字幕成人动漫| 欧美日韩精品| 国产精品爽爽爽| 天堂资源最新在线| |精品福利一区二区三区| 欧美一级在线看| 99综合久久| 亚洲午夜色婷婷在线| 久久久夜色精品| 免费成人av在线| 国产欧美日韩综合一区在线观看 | 在线日韩一区| 欧美日韩国产成人在线| 中文字幕一区二区三区波野结 | 亚洲色图100p| 国产精品女主播一区二区三区| 国产欧美日韩精品专区| 色视频在线看| 黄色一级免费大片| av网址在线看| 91国产成人在线| 污污免费在线观看| 国产精品久久久久一区二区三区厕所| 97视频在线观看播放| 91成人国产综合久久精品| 99re6这里只有精品视频在线观看| 色中文字幕在线观看| 天天综合网天天| 精品一区精品二区| 激情综合网五月婷婷| 国产乱码精品1区2区3区| 日本福利一区二区三区| 丁香花在线电影| 91精品国产91综合久久蜜臀| 成人黄色免费网址| 免费在线成人| 久久久国产精品一区二区三区| 欧美aaaaaaa| 欧美一区二区成人6969| 久久人妻无码aⅴ毛片a片app| 丝袜亚洲另类欧美| 欧洲高清一区二区| 二区三区不卡| 亚洲免费精彩视频| 91美女免费看| 91在线porny国产在线看| 国产九色porny| 哺乳一区二区三区中文视频 | 欧美日韩高清在线一区| 国产欧洲在线| 亚洲精品永久免费精品| 亚洲不卡在线视频| 久久久蜜桃精品| 亚洲 欧美 日韩系列| 精品日本12videosex| 国产精品久久久av| 成人精品一区二区三区免费 | 国产免费福利视频| 亚洲手机成人高清视频| 久久久久亚洲av片无码v| 亚洲欧美亚洲| 国产精品日韩高清| 国产99在线观看| 亚洲色图第一页| jizz国产在线| 国产精品国产三级国产aⅴ原创 | 国产露脸无套对白在线播放| 亚洲色图第一区| 深夜视频在线观看| 亚洲精品日韩久久| 国内精品一区二区| 欧美国产日韩电影| 久久久精品亚洲| 理论片中文字幕| 欧美性色视频在线| 性色国产成人久久久精品| 国产一区二区三区蝌蚪| 青草视频在线观看视频| 亚州av一区| 国产有码一区二区| 在线h片观看| 精品一区二区亚洲| 国产精品熟女久久久久久| 一区二区成人在线| 蜜臀av一区二区三区有限公司| 日韩国产欧美一区二区三区| 国产免费xxx| 台湾亚洲精品一区二区tv| 国产精品香蕉国产| 国内高清免费在线视频| 亚洲精品一区久久久久久| 国产精品欧美久久久久天天影视 | www.日本在线视频| 国产欧美日韩免费观看| 91在线视频九色| 欧亚在线中文字幕免费| 久久精彩免费视频| 色av男人的天堂免费在线| 欧美高清精品3d| 久久久久久少妇| 亚洲免费在线播放| 一区二区黄色片| 国产99久久久精品| 日本久久久久久久久久久久| 在线观看视频日韩| 在线观看欧美激情| 亚洲桃色综合影院| av免费精品一区二区三区| 激情开心成人网| 欧美极品少妇全裸体| av福利精品| 日韩精品中文字幕有码专区| 国产高清在线免费| 欧美日韩另类一区| 国产免费一区二区三区四区五区| 亚洲国产成人porn| 无码人妻精品一区二区三区夜夜嗨| 久久久久久日产精品| 国产综合内射日韩久| 久久成人免费网| 色悠悠久久综合网| 久久国产日韩| 欧美 日韩 激情| 欧美视频日韩| 97超碰免费观看| 婷婷另类小说| 亚洲午夜精品一区二区| 精品免费av| 日韩亚洲不卡在线| 国产精品美女久久久久久不卡| 古典武侠综合av第一页| 美女日韩一区| 成人综合网网址| 四虎精品一区二区免费| 国产精品99久久久久久久久 | 色婷婷av一区二区| 国产污污视频在线观看| 五月天丁香久久| 久久久久亚洲天堂| 亚洲国产综合色| 国产午夜激情视频| 午夜精品一区在线观看| 国产一级理论片| 亚洲国产综合91精品麻豆| 精品无码av在线| 亚洲国产综合色| 日韩精品成人一区| 精品福利一区二区| 日韩少妇裸体做爰视频| 欧美日韩视频免费播放| 天天综合网久久综合网| 色综合天天综合给合国产| 91在线视频在线观看| 日韩欧美中文第一页| 69视频免费看| 欧美日韩午夜在线视频| 一区二区三区精| 日韩一区二区在线看片| 亚洲大尺度网站| 亚洲另类激情图| 成人免费高清在线播放| 久久香蕉频线观| 免费在线观看av电影| 91精品国产91久久久久久最新| 性感女国产在线| 国产精品视频xxx| 粉嫩一区二区三区在线观看| 99在线免费观看视频| 久久久久97| 麻豆传媒一区| 久久高清精品| 男人的天堂avav| 国产精品人人爽人人做我的可爱| 91av在线免费播放| 国产一区二区在线观看视频| 一级黄色电影片| 久久久精品国产免费观看同学| 最新黄色av网址| 亚洲高清视频的网址| 国内精品福利视频| 制服丝袜亚洲网站| 蜜臀久久99精品久久久| 亚洲区免费影片| a天堂中文在线官网在线| 97国产精品免费视频| 日韩一区二区三区免费视频| 97神马电影| 国内亚洲精品| 久久久久99精品成人片| 日韩精品乱码免费| 91超薄肉色丝袜交足高跟凉鞋| 久久久久久日产精品| 清纯粉嫩极品夜夜嗨av| 欧美综合天天夜夜久久| 囯产精品一品二区三区| 国产视频精品免费播放| 秋霞a级毛片在线看| 91国产高清在线| va天堂va亚洲va影视| 久久人人九九| 国产精品av久久久久久麻豆网| 欧美极品欧美精品欧美图片| 国产精品一区免费在线观看| 免费看污片的网站| 亚洲综合成人网| 亚洲无码精品国产| 亚洲高清久久网| 成人日批视频| 国产精品成人久久久久| 玖玖玖免费嫩草在线影院一区| 一本色道久久综合亚洲精品婷婷| 宅男噜噜噜66国产日韩在线观看| 亚洲一二三不卡| 亚洲国产精品二十页| 日韩乱码一区二区| 日韩视频免费观看高清完整版在线观看| 你懂的在线视频| 97国产精品人人爽人人做| 国产一区二区久久久久| 深夜福利成人| 国产精品尤物| 制服丝袜第一页在线观看| 亚洲人精品午夜| 亚洲香蕉在线视频| 国产一区二区三区视频在线观看| 成人在线黄色电影| 国产精品播放| 国产精品多人| 国产黄色一区二区三区| 亚洲人精品午夜| 一级特黄aaa| 少妇高潮久久久久久潘金莲| 日韩影片中文字幕| 欧美xxxx黑人又粗又长密月 | 一区二区三区蜜桃网| 国产精品欧美久久久久天天影视| 中文字幕av日韩| 日韩漫画puputoon| 亚洲成人a**址| 青草国产精品久久久久久| 91激情视频在线观看| 一本久久a久久免费精品不卡| 四虎成人免费在线| 91高清免费在线观看| 窝窝社区一区二区| 国产欧美高清在线| 久久精品亚洲精品国产欧美| 无码人妻黑人中文字幕| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 欧美日本韩国一区二区三区| 国产精品日韩精品欧美精品| 全黄一级裸体片| 91黄视频在线| 日本在线观看网站| 91久久精品国产91久久| 亚洲精品国产成人影院| 人妻巨大乳一二三区| 亚洲综合成人在线视频| 天天摸天天碰天天爽天天弄| 91av视频在线播放| 精品国产一区二区三区四区 | 不卡一区二区三区四区| 国产精品第9页| 亚洲片在线观看| 日韩福利影视 | 久久五月激情| 999久久久国产| 日韩一区二区电影网| а√在线中文在线新版| 秋霞在线观看一区二区三区 | 黄色av电影网站| 日韩欧美黄色动漫| 欧美成人xxx| 国产亚洲自拍偷拍| 日韩不卡一区二区| 精品无码久久久久成人漫画| 亚洲第一福利网站| 韩国女主播一区二区| www.国产亚洲| www国产精品av| 国产精品午夜福利| 7m精品福利视频导航| 成人在线免费观看91| 女同性αv亚洲女同志| 色综合网站在线| 精产国品自在线www| 国产伦精品一区二区三区高清版| 天堂一区二区在线| 69av.com| 亚洲最新av在线网站| 警花av一区二区三区| 免费日韩中文字幕| 亚洲激情在线播放| 男女网站在线观看| 91久久极品少妇xxxxⅹ软件| 久久亚洲一区| 久久免费播放视频| 中文字幕亚洲一区二区三区| 欧美福利在线播放网址导航| 中文字幕一区二区在线观看视频 | 欧美另类自拍| 99精品国产高清一区二区|