精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本三级免费观看| 91香蕉亚洲精品| 精品欧美一区二区久久久| 亚洲深夜视频| 国产精品国产馆在线真实露脸| 成人夜晚看av| 免费黄色网址在线| 亚洲成人av| 亚洲欧美一区二区激情| 欧美一级小视频| 精品极品在线| 日韩理论片一区二区| 精品欧美一区二区久久久伦| 中文字幕乱码视频| 日韩天堂av| 久久久精品影院| 中文字幕国产专区| 成人午夜大片| 51精品秘密在线观看| 美女日批免费视频| av在线麻豆| 中日韩av电影| 激情一区二区三区| 亚洲精品久久久久久久久久| 日本不卡视频在线| 欧美性资源免费| 久久久综合久久| 久久一区二区三区电影| 亚洲国产中文字幕久久网| 最新av免费在线观看| 国产日韩电影| 精品久久久久久久久久国产| 91传媒免费视频| 毛片av在线| 中文字幕免费不卡| 另类欧美小说| 亚洲三级在线观看视频| 中文字幕不卡三区视频| 亚洲午夜精品在线| 青青草免费在线视频观看| 国产69精品久久app免费版| kk眼镜猥琐国模调教系列一区二区| 成人h片在线播放免费网站| 国产精品成人久久久| 国产欧美日韩综合一区在线播放| 麻豆国产va免费精品高清在线| 先锋影音av在线| 精品在线观看入口| 亚洲奶大毛多的老太婆| 免费看黄色aaaaaa 片| 都市激情久久| 精品99一区二区| 国产男女无遮挡猛进猛出| 亚洲午夜国产成人| 欧美久久久影院| 8x8x成人免费视频| 9999精品免费视频| 欧美丰满美乳xxx高潮www| 污网站在线免费| 四虎精品一区二区免费 | www.色小姐com| 国产精品久久天天影视| 俺去亚洲欧洲欧美日韩| 黄色录像一级片| 亚洲mv大片欧洲mv大片| 久久手机免费视频| 欧美卡一卡二卡三| 欧美日韩亚洲一区三区 | 久草视频免费在线播放| 欧美日韩视频| 2018国产精品视频| 91porny九色| 免费国产亚洲视频| 92国产精品视频| 成人激情四射网| 99视频有精品| 日本精品二区| 粗大黑人巨茎大战欧美成人| 一区二区三区在线免费视频| av网站大全免费| 亚洲最大网站| 欧美日韩国产a| 日韩av成人网| 九色成人国产蝌蚪91| 日韩视频免费看| 国产精品2020| 日韩电影在线观看一区| 91在线观看欧美日韩| 日韩在线观看视频网站| 国产三级久久久| 欧美在线观看黄| 制服丝袜专区在线| 欧美人妖巨大在线| a天堂视频在线观看| 国产成人3p视频免费观看| 久久久91精品| 国产成人在线免费视频| 精品一区在线看| 国精产品一区二区| 91欧美在线视频| 亚洲1区2区3区4区| 青青草原国产在线视频| 久久九九热re6这里有精品| 在线精品91av| 国产精品一区二区6| 久久精品国产精品亚洲精品| 国产一区二区三区无遮挡 | 国产精品私人影院| 欧美男女爱爱视频| 2020国产精品小视频| 日韩av有码在线| 免费在线观看黄色小视频| 亚洲欧美日韩国产一区二区| 久久精品国产亚洲精品| 久久久国产精品黄毛片| 七七婷婷婷婷精品国产| 国产日韩在线一区二区三区| www.在线播放| 狠狠躁夜夜躁人人躁婷婷91| 日本中文字幕在线不卡| 国产区精品区| 欧美一区二区三区免费视| 国产黄色免费大片| 国产成人av影院| 亚洲成人一区二区三区| 夜鲁夜鲁夜鲁视频在线播放| 精品三级在线看| 999精品视频在线观看播放| 日韩福利电影在线| 免费一区二区三区| 阿v视频在线观看| 日韩精品一区二区三区四区| 999精品视频在线观看播放| 日本美女一区二区三区| 欧洲亚洲一区二区| 亚洲十八**毛片| 亚洲国产精品大全| 精品无码一区二区三区电影桃花| 精品一区二区三区免费观看| 天堂av一区二区| 欧美日韩大片| 亚洲视频在线观看网站| 亚洲中文字幕无码爆乳av| 91影院在线观看| 免费毛片小视频| 久久成人福利| 欧美亚洲视频在线看网址| 色呦呦免费观看| 午夜精品久久一牛影视| 国产xxxxxxxxx| 国产欧美日韩综合一区在线播放| 精品国产乱码久久久久久丨区2区| 免费毛片在线看片免费丝瓜视频 | 亚洲国产日日夜夜| 国产伦理在线观看| 激情国产一区| 久久国产主播精品| 美女福利一区二区三区| 亚洲图片欧美午夜| 中文字幕免费高清在线观看| 1024成人网色www| 爱情岛论坛亚洲自拍| 一级毛片免费高清中文字幕久久网| 91久久久久久久久久久久久| 最新日本在线观看| 精品国产麻豆免费人成网站| 国产精品人人人人| 国产视频一区在线播放| 亚洲三级在线观看视频| 欧美影视一区| 极品尤物一区二区三区| 都市激情综合| 日韩在线免费视频| 精品国自产在线观看| 亚洲大片精品永久免费| 国产交换配乱淫视频免费| 日韩激情中文字幕| 三级网在线观看| 麻豆国产欧美一区二区三区r| 国产成人avxxxxx在线看| 日韩理伦片在线| 在线成人免费视频| 日本免费一二三区| 国产欧美精品国产国产专区| 婷婷激情小说网| 尹人成人综合网| 午夜精品一区二区在线观看的| 国产精品视频一区视频二区| 97在线看福利| 在线免费观看黄色av| 精品电影一区二区| 精品久久久久久久久久久国产字幕 | 国产精品在线看| 麻豆av在线播放| 一区二区三区www| 亚洲国产欧美另类| 91福利精品视频| 69精品久久久| 国产精品三级av| 黄色一级视频片| 日本黄色精品| 精品在线一区| 成人午夜888| 欧美中文字幕视频| 影院在线观看全集免费观看| 亚洲人成电影网站色| 亚洲av永久纯肉无码精品动漫| 色婷婷久久综合| 国产一国产二国产三| 国产精品精品国产色婷婷| 人妻无码中文久久久久专区| 国内精品视频666| 亚洲黄色a v| 亚洲欧美日本国产专区一区| 97超碰免费观看| 日韩免费看片| 欧美日韩一区在线播放| 一区二区三区四区高清视频| 国产精品视频久久久久| 中文字幕资源网在线观看免费| 欧美成人在线影院| 男人在线资源站| 国产亚洲人成a一在线v站| 亚洲av成人精品毛片| 日韩欧美成人午夜| 国产精品一品二区三区的使用体验| 欧美日韩中文在线| 欧美日韩在线视频免费| 亚洲欧洲精品天堂一级| 精品丰满少妇一区二区三区| 久久女同互慰一区二区三区| 日本不卡视频一区| 丰满岳乱妇一区二区三区| 婷婷激情综合五月天| 精品一区二区三区欧美| 亚洲xxx在线观看| 精品一区二区三区在线观看国产 | 国产91精品精华液一区二区三区 | 久久婷婷综合激情| 特级西西人体wwwww| 成人丝袜18视频在线观看| av电影中文字幕| 粉嫩久久99精品久久久久久夜| 日本少妇激三级做爰在线| 精品亚洲成av人在线观看| 鲁一鲁一鲁一鲁一av| 麻豆精品一区二区三区| 91高清国产视频| 久久 天天综合| 午夜视频在线观| 国产精品一级在线| 曰本三级日本三级日本三级| 国产精品正在播放| 亚洲欧洲国产视频| www.66久久| 久久久久久久久久久久久久久| 久久综合九色欧美综合狠狠| 人人妻人人澡人人爽人人精品| 久久女同互慰一区二区三区| 国产伦精品一区二区三区视频女| 欧美激情中文字幕| 免费成人深夜夜行网站| 亚洲女与黑人做爰| xxxxxx国产| 富二代精品短视频| 高潮无码精品色欲av午夜福利| 欧美三区在线视频| 日本三级视频在线| 精品国产91久久久久久| 亚洲图片在线视频| 精品1区2区3区| www.狠狠干| 亚洲美女av电影| 在线观看国产原创自拍视频| 久久综合色88| 美女av在线免费看| 国产精品一区二区3区| 欧美视频二区欧美影视| 国产自产在线视频一区| 久久不见久久见中文字幕免费| 亚洲精品影院| 好吊一区二区三区| 亚洲男人天堂色| 国产盗摄精品一区二区三区在线| 无码精品一区二区三区在线播放| 久久久久99精品一区| 天堂网avav| 色综合天天综合狠狠| 97精品人妻一区二区三区| 亚洲精品一区二区三区香蕉| 狠狠v欧美ⅴ日韩v亚洲v大胸| 俺去亚洲欧洲欧美日韩| 黄在线观看免费网站ktv| 国产欧美日韩中文字幕| 欧美黄色录像| 青春草在线视频免费观看| 午夜在线精品| 男生和女生一起差差差视频| 久久久久久久综合狠狠综合| 日本老熟俱乐部h0930| 欧美视频国产精品| 国产高清第一页| 伊人青青综合网站| www.51av欧美视频| 91精品视频专区| 免费一区二区三区视频导航| 老司机激情视频| 久久黄色级2电影| 国产男女猛烈无遮挡a片漫画 | 亚洲日本视频在线| 日韩三级电影网站| 亚洲精品九九| 一区二区三区四区毛片| 久久精品夜夜夜夜久久| 久久久久亚洲av无码专区| 欧美高清视频不卡网| 免费理论片在线观看播放老| 欧美激情乱人伦| 亚洲精品777| 亚洲国产日韩美| 美女国产一区| 国精产品一区一区三区免费视频| 亚洲宅男天堂在线观看无病毒| 中文字字幕在线观看| 亚洲天堂成人在线| 人人草在线视频| 国产自产在线视频一区| 亚洲大片av| 久久久无码人妻精品无码| 亚洲欧美国产三级| 一级片视频网站| 日韩中文av在线| 高清亚洲高清| 亚洲午夜精品国产| 日本强好片久久久久久aaa| 久久久久久九九九九九| 精品久久久久久亚洲国产300| 日本成人三级| 五月天久久久久久| 欧美裸体男粗大视频在线观看| 福利视频亚洲| 亚洲成人第一| 久久精品国产亚洲a| 成人午夜免费影院| 欧美人与z0zoxxxx视频| 免费大片黄在线观看视频网站| 国产啪精品视频| 第四色成人网| 日韩va在线观看| 亚洲精品国产无套在线观| www.好吊色| 久久久久久久亚洲精品| 欧美aaaaa级| 黄www在线观看| 国产亚洲欧美一区在线观看| 国内av在线播放| 中文字幕亚洲一区在线观看| 黄色成人小视频| 国产欧美综合一区| 成人小视频免费观看| 91精品国产乱码久久久张津瑜 | 国产剧情久久久久久| 日韩伦理视频| 久久艹这里只有精品| 亚洲国产精品一区二区久久恐怖片| 少妇喷水在线观看| 青青精品视频播放| 日韩精品永久网址| 日日夜夜精品视频免费观看 | 久久精品在线播放| 欧美中文高清| 国产极品尤物在线| 中文一区在线播放| www.色日本| 国产不卡一区二区在线播放| 日韩欧美网址| avtt中文字幕| 色悠久久久久综合欧美99| 欧美激情视频在线播放| 999日本视频| 西西裸体人体做爰大胆久久久| ass极品国模人体欣赏| 日韩视频在线你懂得| 26uuu亚洲电影| 精品一区二区成人免费视频| 99国产精品久久久久久久久久 | 日韩电影免费在线观看中文字幕| 欧美日韩电影免费看| 日本在线视频www色| 91在线国产观看| 国产又粗又长视频| 欧美在线亚洲在线| 91精品国产91久久久久久黑人| 亚洲天堂资源在线| 欧美一区二区在线播放| 一区二区三区四区日本视频| 青青在线免费视频| 久久精品男人的天堂| 午夜精品久久久久久久99热黄桃 | 国内黄色精品|