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

JVM 判斷對象已死,實踐驗證GC回收

云計算 虛擬化
在這趟車上有人下、有人上,外在別人給你點評的標簽、留下的烙印,都只是這趟車上的故事。只有個人成長了、積累了、沉淀了,才有機會當自己的司機。

 [[377367]]

本文轉載自微信公眾號「 bugstack蟲洞棧」,作者小傅哥  。轉載本文請聯系 bugstack蟲洞棧公眾號。

目錄

  • 一、前言
  • 二、面試題
  • 三、先動手驗證垃圾回收
  • 四、JVM 垃圾回收知識框架
    • 1. 判斷對象已死
    • 2. 垃圾回收算法
    • 3. 垃圾回收器
  • 五、總結
  • 六、系列推薦

一、前言

提升自身價值有多重要?

經過了風風雨雨,看過了男男女女。時間經過的歲月就沒有永恒不變的!

在這趟車上有人下、有人上,外在別人給你點評的標簽、留下的烙印,都只是這趟車上的故事。只有個人成長了、積累了、沉淀了,才有機會當自己的司機。

可能某個年齡段的你還看不懂,但如果某天你不那么忙了,要思考思考自己的路、自己的腳步。看看這些是不是你想要的,如果都是你想要的,為什么你看起來不開心?

好!加油,走向你想成為的自己!

二、面試題

謝飛機,小記!,中午吃飽了開始發呆,怎么就學不來這些知識呢,它也不進腦子!

「謝飛機」:喂,面試官大哥,我想問個問題。

「面試官」:什么?

「謝飛機」:就是這知識它不進腦子呀!

「面試官」:這....

「謝飛機」:就是看了忘,忘了看的!

「面試官」:是不是沒有實踐?只是看了就覺得會了,收藏了就表示懂了?哪哪都不深入!?

「謝飛機」:好像是!那有什么辦法?

「面試官」:也沒有太好的辦法,學習本身就是一件枯燥的事情。減少碎片化的時間浪費,多用在系統化的學習上會更好一些。哪怕你寫寫博客記錄下,驗證下也是好的。

三、先動手驗證垃圾回收

說是垃圾回收,我不引用了它就回收了?什么時候回收的?咋回收的?

沒有看到實際的例子,往往就很難讓理科生接受這類知識。我自己也一樣,最好是讓我看得見。代碼是對數學邏輯的具體實現,沒有實現過程只看答案是沒有意義的。

「測試代碼」

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

例子來自于《深入理解Java虛擬機》中引用計數算法章節。

例子要說明的結果是,相互引用下卻已經置為null的兩個對象,是否會被GC回收。如果只是按照引用計數器算法來看,那么這兩個對象的計數標識不會為0,也就不能被回收。但到底有沒有被回收呢?

這里我們先采用 jvm 工具指令,jstat來監控。因為監控的過程需要我手敲代碼,比較耗時,所以我們在調用testGC()前,睡眠會 Thread.sleep(55000);。啟動代碼后執行如下指令。

  1. E:\itstack\git\github.com\interview>jps -l 
  2. 10656 
  3. 88464 
  4. 38372 org.itstack.interview.ReferenceCountingGC 
  5. 26552 sun.tools.jps.Jps 
  6. 110056 org.jetbrains.jps.cmdline.Launcher 
  7.  
  8. E:\itstack\git\github.com\interview>jstat -gc 38372 2000 
  9.  S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT 
  10. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  11. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  12. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  13. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  14. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  15. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  16. 10752.0 10752.0  0.0    0.0   65536.0   6561.4   175104.0     0.0     4480.0 770.9  384.0   75.9       0    0.000   0      0.000    0.000 
  17. 10752.0 10752.0  0.0   1288.0 65536.0    0.0     175104.0     8.0     4864.0 3982.6 512.0  440.5       1    0.003   1      0.000    0.003 
  18. 10752.0 10752.0  0.0    0.0   65536.0   437.3    175104.0    1125.5   4864.0 3982.6 512.0  440.5       1    0.003   1      0.012    0.015 
  19. 10752.0 10752.0  0.0    0.0   65536.0   437.3    175104.0    1125.5   4864.0 3982.6 512.0  440.5     
  • S0C、S1C,第一個和第二個幸存區大小
  • S0U、S1U,第一個和第二個幸存區使用大小
  • EC、EU,伊甸園的大小和使用
  • OC、OU,老年代的大小和使用
  • MC、MU,方法區的大小和使用
  • CCSC、CCSU,壓縮類空間大小和使用
  • YGC、YGCT,年輕代垃圾回收次數和耗時
  • FGC、FGCT,老年代垃圾回收次數和耗時
  • GCT,垃圾回收總耗時

「注意」:觀察后面三行,S1U = 1288.0、GCT = 0.003,說明已經在執行垃圾回收。

接下來,我們再換種方式測試。在啟動的程序中,加入GC打印參數,觀察GC變化結果。

  1. -XX:+PrintGCDetails  打印每次gc的回收情況 程序運行結束后打印堆空間內存信息(包含內存溢出的情況) 
  2. -XX:+PrintHeapAtGC  打印每次gc前后的內存情況 
  3. -XX:+PrintGCTimeStamps 打印每次gc的間隔的時間戳 full gc為每次對新生代老年代以及整個空間做統一的回收 系統中應該盡量避免 
  4. -XX:+TraceClassLoading  打印類加載情況 
  5. -XX:+PrintClassHistogram 打印每個類的實例的內存占用情況 
  6. -Xloggc:/Users/xiaofuge/Desktop/logs/log.log  配合上面的使用將上面的日志打印到指定文件 
  7. -XX:HeapDumpOnOutOfMemoryError 發生內存溢出將堆信息轉存起來 以便分析 

這回就可以把睡眠去掉了,并添加參數 -XX:+PrintGCDetails,如下:

「測試結果」

  1. [GC (System.gc()) [PSYoungGen: 9346K->936K(76288K)] 9346K->944K(251392K), 0.0008518 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]  
  2. [Full GC (System.gc()) [PSYoungGen: 936K->0K(76288K)] [ParOldGen: 8K->764K(175104K)] 944K->764K(251392K), [Metaspace: 3405K->3405K(1056768K)], 0.0040034 secs] [Times: user=0.08 sys=0.00, real=0.00 secs]  
  3. Heap 
  4.  PSYoungGen      total 76288K, used 1966K [0x000000076b500000, 0x0000000770a00000, 0x00000007c0000000) 
  5.   eden space 65536K, 3% used [0x000000076b500000,0x000000076b6eb9e0,0x000000076f500000) 
  6.   from space 10752K, 0% used [0x000000076f500000,0x000000076f500000,0x000000076ff80000) 
  7.   to   space 10752K, 0% used [0x000000076ff80000,0x000000076ff80000,0x0000000770a00000) 
  8.  ParOldGen       total 175104K, used 764K [0x00000006c1e00000, 0x00000006cc900000, 0x000000076b500000) 
  9.   object space 175104K, 0% used [0x00000006c1e00000,0x00000006c1ebf100,0x00000006cc900000) 
  10.  Metaspace       used 3449K, capacity 4496K, committed 4864K, reserved 1056768K 
  11.   class space    used 376K, capacity 388K, committed 512K, reserved 1048576K 
  • 從運行結果可以看出內存回收日志,Full GC 進行了回收。
  • 也可以看出JVM并不是依賴引用計數器的方式,判斷對象是否存活。否則他們就不會被回收啦

「有了這個例子,我們再接著看看JVM垃圾回收的知識框架!」

四、JVM 垃圾回收知識框架

垃圾收集(Garbage Collection,簡稱GC),最早于1960年誕生于麻省理工學院的Lisp是第一門開始使用內存動態分配和垃圾收集技術的語言。

垃圾收集器主要做的三件事:哪些內存需要回收、什么時候回收、怎么回收。

而從垃圾收集器的誕生到現在有半個世紀的發展,現在的內存動態分配和內存回收技術已經非常成熟,一切看起來都進入了“自動化”。但在某些時候還是需要我們去監測在高并發的場景下,是否有內存溢出、泄漏、GC時間過程等問題。所以在了解和知曉垃圾收集的相關知識對于高級程序員的成長就非常重要。

垃圾收集器的核心知識項主要包括:判斷對象是否存活、垃圾收集算法、各類垃圾收集器以及垃圾回收過程。如下圖;

圖 27-1 垃圾收集器知識框架

原圖下載鏈接:http://book.bugstack.cn/#s/6jJp2icA

1. 判斷對象已死

1.1 引用計數器

  1. 為每一個對象添加一個引用計數器,統計指向該對象的引用次數。
  2. 當一個對象有相應的引用更新操作時,則對目標對象的引用計數器進行增減。
  3. 一旦當某個對象的引用計數器為0時,則表示此對象已經死亡,可以被垃圾回收。

從實現來看,引用計數器法(Reference Counting)雖然占用了一些額外的內存空間來進行計數,但是它的實現方案簡單,判斷效率高,是一個不錯的算法。

也有一些比較出名的引用案例,比如:微軟COM(Component Object Model) 技術、使用ActionScript 3的FlashPlayer、 Python語言等。

「但是」,在主流的Java虛擬機中并沒有選用引用技術算法來管理內存,主要是因為這個簡單的計數方式在處理一些相互依賴、循環引用等就會非常復雜。可能會存在不再使用但又不能回收的內存,造成內存泄漏

1.2 可達性分析法

Java、C#等主流語言的內存管理子系統,都是通過可達性分析(Reachability Analysis)算法來判定對象是否存活的。

它的算法思路是通過定義一系列稱為 GC Roots 根對象作為起始節點集,從這些節點出發,窮舉該集合引用到的全部對象填充到該集合中(live set)。這個過程教過標記,只標記那些存活的對象 好,那么現在未被標記的對象就是可以被回收的對象了。

GC Roots 包括;

  1. 全局性引用,對方法區的靜態對象、常量對象的引用
  2. 執行上下文,對 Java方法棧幀中的局部對象引用、對 JNI handles 對象引用
  3. 已啟動且未停止的 Java 線程

「兩大問題」

誤報:已死亡對象被標記為存活,垃圾收集不到。多占用一會內存,影響較小。

漏報:引用的對象(正在使用的)沒有被標記為存活,被垃圾回收了。那么直接導致的就是JVM奔潰。(STW可以確保可達性分析法的準確性,避免漏報)

2. 垃圾回收算法

2.1 標記-清除算法(mark-sweep)

標記-清除算法(mark-sweep)

  • 標記無引用的死亡對象所占據的空閑內存,并記錄到空閑列表中(free list)。
  • 當需要創建新對象時,內存管理模塊會從 free list 中尋找空閑內存,分配給新建的對象。
  • 這種清理方式其實非常簡單高效,但是也有一個問題內存碎片化太嚴重了。
  • 「Java 虛擬機的堆中對象」,必須是連續分布的,所以極端的情況下可能即使總剩余內存充足,但尋找連續內存分配效率低,或者嚴重到無法分配內存。重啟湯姆貓!
  • 在CMS中有此類算法的使用,GC暫停時間短,但存在算法缺陷。

2.2 標記-復制算法(mark-copy)

標記-復制算法(mark-copy)

  • 從圖上看這回做完垃圾清理后連續的內存空間就大了。
  • 這種方式是把內存區域分成兩份,分別用兩個指針 from 和 to 維護,并且只使用 from 指針指向的內存區域分配內存。
  • 當發生垃圾回收時,則把存活對象復制到 to 指針指向的內存區域,并交換 from 與 to 指針。
  • 它的好處很明顯,就是解決內存碎片化問題。但也帶來了其他問題,堆空間浪費了一半。

2.3 標記-壓縮算法(mark-compact)

標記-壓縮算法(mark-compact)

  • 1974年,Edward Lueders 提出了標記-壓縮算法,標記的過程和標記清除算法一樣,但在后續對象清理步驟中,先把存活對象都向內存空間一端移動,然后在清理掉其他內存空間。
  • 這種算法能夠解決內存碎片化問題,但壓縮算法的性能開銷也不小。

3. 垃圾回收器

3.1 新生代

1.Serial

算法:標記-復制算法

說明:簡單高效的單核機器,Client模式下默認新生代收集器;

2.Parallel ParNew

算法:標記-復制算法

說明:GC線程并行版本,在單CPU場景效果不突出。常用于Client模式下的JVM

3.Parallel Scavenge

算法:標記-復制算法

說明:目標在于達到可控吞吐量(吞吐量=用戶代碼運行時間/(用戶代碼運行時間+垃圾回收時間));

3.2 老年代

1.Serial Old

算法:標記-壓縮算法

說明:性能一般,單線程版本。1.5之前與Parallel Scavenge配合使用;作為CMS的后備預案。

2.Parallel Old

算法:標記-壓縮算法

說明:GC多線程并行,為了替代Serial Old與Parallel Scavenge配合使用。

3.CMS

算法:標記-清除算法

說明:對CPU資源敏感、停頓時間長。標記-清除算法,會產生內存碎片,可以通過參數開啟碎片的合并整理。基本已被G1取代

3.3 G1

算法:標記-壓縮算法

說明:適用于多核大內存機器、GC多線程并行執行,低停頓、高回收效率。

五、總結

JVM 的關于自動內存管理的知識眾多,包括本文還沒提到的 HotSpot 實現算法細節的相關知識,包括:安全節點、安全區域、卡表、寫屏障等。每一項內容都值得深入學習。

如果不僅僅是為了面試背題,最好的方式是實踐驗證學習。否則這類知識就像3分以下的過電影一樣,很難記住它的內容。

整個的內容也是小傅哥學習整理的一個過程,后續還會不斷的繼續深挖和分享。感興趣的小伙伴可以一起討論學習。

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關推薦

2011-05-11 09:01:29

面向對象技術函數式語言

2021-03-15 08:11:40

JVM回收堆內存

2023-10-08 15:23:12

2013-10-22 11:32:34

2023-12-07 12:21:04

GCJVM垃圾

2011-04-02 09:07:46

OOP

2011-01-07 10:18:28

RSSWeb

2022-09-15 10:44:42

SidecarIstioeBPFizer

2023-02-06 07:37:29

Java編程語言

2012-01-11 11:07:04

JavaJVM

2014-01-06 09:36:53

IT部門BYODBYOA

2012-02-20 10:12:09

Java

2024-09-20 17:08:44

JavaJVM開發

2015-08-31 10:59:22

2011-12-07 10:20:19

Email新聞

2021-01-19 10:58:15

漏洞管理漏洞數據泄露

2010-01-12 09:43:15

Java已死

2013-01-31 17:23:20

RIM黑莓BB10

2021-04-19 08:17:42

MesosKubernetesLinux

2020-02-19 11:35:21

iPhone越獲PP助手
點贊
收藏

51CTO技術棧公眾號

亚洲www啪成人一区二区麻豆| 一级成人黄色片| 国产欧美熟妇另类久久久| silk一区二区三区精品视频| 性欧美暴力猛交另类hd| 欧美久久久久久蜜桃| 国产欧美一区二区视频 | 日韩电影免费观| 激情综合五月婷婷| 亚洲欧美在线x视频| 日韩欧美一区二区三区四区 | 亚洲国产美国国产综合一区二区| 国产精品极品美女在线观看免费| yy1111111| 国产深夜视频在线观看| 日韩一区二区在线免费| 欧亚一区二区三区| 欧美xxxx黑人又粗又长精品| 天天插天天操天天干| 精品少妇一区| 亚洲观看高清完整版在线观看 | www.精品在线| 国产在线高清| 久久久久久久波多野高潮日日| 亚洲а∨天堂久久精品9966| 成年女人18级毛片毛片免费| 精品久久人妻av中文字幕| 一区二区在线| 7777精品伊人久久久大香线蕉经典版下载 | 黄色激情视频在线观看| 精品中文字幕一区二区三区四区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲最大的免费视频网站| 久久久久国产精品免费免费搜索| 91成人精品网站| 一区二区三区少妇| 天堂资源在线| 国产欧美一区二区精品性色超碰| 国产成人激情视频| 中文字幕伦理片| 成人污版视频| 亚洲18色成人| 国产免费xxx| 亚洲女同志亚洲女同女播放| 亚洲大黄网站| 国产婷婷色综合av蜜臀av| 欧美少妇性生活视频| 在线观看免费网站黄| 黄色资源网久久资源365| 国产精品对白刺激| 欧美超碰在线观看| 欧美xxav| 日韩欧美电影在线| 黄色片视频在线免费观看| av资源种子在线观看| 国产在线麻豆精品观看| 久久久久久网址| 午夜一区二区三区免费| 国产精品任我爽爆在线播放| 色婷婷精品大在线视频| 日本黄色播放器| 天天干天天爽天天操| 日本在线不卡一区| 久精品免费视频| 日本xxx在线播放| 日韩一级视频| 欧美日韩视频在线| 在线观看亚洲视频啊啊啊啊| 天堂av2024| 99久久精品费精品国产一区二区| 国产精品免费视频久久久| 久久久久99精品成人片毛片| 深爱激情综合网| 日韩欧美国产小视频| 亚洲成人福利视频| 欧美日韩在线精品一区二区三区激情综合| 亚洲欧美日韩国产另类专区| 欧美激情国产日韩| av网站免费大全| 久久一区激情| 欧美精品videosex极品1| 日本少妇裸体做爰| 午夜在线播放视频欧美| 国产精品久久91| 国产欧美综合视频| 不卡的av电影在线观看| 91在线精品播放| 波多野结衣日韩| 韩日视频一区| 久久精品国产清自在天天线| 人妻少妇无码精品视频区| 国产成人精品福利| 精品亚洲一区二区三区四区五区| 99久久久无码国产精品衣服| 无码日韩精品一区二区免费| 日韩美女视频在线| 玖草视频在线观看| 四季av在线一区二区三区| 欧美激情精品久久久久久变态| 精品在线观看一区| 国内精品伊人久久久| 精品无人区乱码1区2区3区在线| 法国空姐电影在线观看| 欧美日韩国产免费观看| 久久久国产91| 久久精品国产成人av| 亚洲高清av| 国产精品无av码在线观看| 成年人视频免费| 国产一区二区免费看| 久久亚洲一区二区| v天堂福利视频在线观看| 日韩美女久久久| 艳色歌舞团一区二区三区| jizz在线观看中文| 亚洲动漫第一页| 日韩精品视频一二三| 日韩最新在线| 欧美猛交免费看| 瑟瑟视频在线免费观看| 美女免费视频一区| 国产精品免费久久久久久| 亚洲国产精品久久久久爰性色| 国产一区二区不卡在线| 免费亚洲精品视频| 免费污视频在线观看| 亚洲国产精品视频| 中文字幕久久av| 精品一区视频| 日韩中文字幕在线| 人妻少妇精品一区二区三区| 亚洲欧美文学| 992tv在线成人免费观看| 国产精品一区二区人人爽| 国产麻豆精品theporn| 国产精品成人一区二区三区| 天堂在线观看视频| 亚洲精品国产高清久久伦理二区| 成年女人18级毛片毛片免费 | 亚洲欧美文学| 91精品中国老女人| 午夜视频在线免费观看| 中文字幕一区免费在线观看| 天堂а√在线中文在线| av老司机在线观看| 色偷偷一区二区三区| 亚洲av成人片色在线观看高潮| 欧美激情四色| 91亚洲va在线va天堂va国| 欧美极品视频| 亚洲国产成人porn| 野战少妇38p| 国产一区二区电影在线观看| 日本亚洲欧美成人| 国产精品高潮呻吟AV无码| 中文字幕国产一区| 欧美中日韩在线| 日本欧美不卡| 日韩欧美亚洲国产另类| 一起操在线播放| 99伊人成综合| 国产中文字幕91| 色丁香婷婷综合久久| 亚洲第一在线综合网站| 国产黑丝一区二区| 久久中文字幕av一区二区不卡| 国产精品狼人色视频一区| 日本在线免费网| 91精品国产入口在线| 亚洲成人日韩在线| 媚黑女一区二区| 亚洲一区二区三区精品视频 | 亚洲国产片色| 国产精品丝袜高跟| 麻豆av在线导航| 日韩丝袜美女视频| 久久久免费看片| 国产一区二区在线电影| 日本香蕉视频在线观看| 日本欧美三级| 欧美大片在线免费观看| 神马午夜一区二区| 色婷婷久久久综合中文字幕 | 亚洲自拍偷拍av| 亚洲国产日韩欧美在线观看| 99久久99久久精品国产片果冰| 欧美整片在线观看| 你懂的网站在线| 亚洲男人天堂av网| 中文字幕精品视频在线| 日韩精品三区四区| 欧美日韩一区综合| 91久久青草| 2019中文字幕在线免费观看| 色婷婷在线视频| 欧美在线免费播放| 国产污在线观看| 国内视频精品| 视频一区亚洲| 综合毛片免费视频| 日韩av在线免费观看一区| 国产探花在线播放| 99re这里只有精品首页| 日本不卡一区二区在线观看| 99成人在线| 日韩中文在线字幕| 美女久久精品| 日韩av电影手机在线| 污网站在线免费看| 日韩久久精品一区| 中文字幕人妻精品一区| 国产午夜一区二区三区| 久久久久久久激情| 欧美人与拘性视交免费看| 亚洲va男人天堂| 最新超碰在线| 欧美xingq一区二区| 日本一区二区三区免费视频| 国产精品美女一区二区| www.超碰97| 国产成人综合自拍| 国产精品久久久久7777| 欧美电影《睫毛膏》| 欧美日韩亚洲一区二区三区在线观看 | 日韩在线观看| 欧美一区免费视频| 韩国女主播一区二区| 久久久免费av| 免费看黄色一级视频| 欧美电影影音先锋| 伊人22222| 欧美在线free| 欧美男人亚洲天堂| 精品女厕一区二区三区| 久久久久人妻一区精品色欧美| 中文字幕一区二区视频| 国产白丝一区二区三区| 中文字幕不卡在线| 少妇av片在线观看| 国产欧美一区视频| 欧美激情亚洲色图| 国产亚洲福利社区一区| 亚洲欧美色图视频| 久久伊99综合婷婷久久伊| 天堂中文视频在线| 欧美精品色网| 国产一区二区三区播放| 中国成人一区| 99热都是精品| 午夜精品久久久久99热蜜桃导演 | 香蕉视频免费在线播放| 这里只有精品在线播放| hs视频在线观看| 91精品久久久久久蜜臀| 国产露脸91国语对白| 在线播放欧美女士性生活| 国产精品久久久久久免费播放 | 欧美一区二区三区……| h片在线观看下载| 亚洲人高潮女人毛茸茸| 天堂中文在线资| 日韩一级大片在线观看| 国产99999| 亚洲成av人乱码色午夜| 国产精华7777777| 在线免费观看不卡av| 中文字幕一区二区人妻| 欧美顶级少妇做爰| 黄色一级a毛片| 亚洲精品之草原avav久久| 国产一级二级三级在线观看| 最近2019中文字幕一页二页 | 日本成人在线不卡| 黄色成人在线网址| 777久久久精品一区二区三区| 久久一区国产| 91亚洲一区二区| 久久精品天堂| 天天干天天草天天| 国产精品69毛片高清亚洲| 91精品啪在线观看国产| 久久精品人人做| 男人的午夜天堂| 亚洲国产精品ⅴa在线观看| 国产成人精品视频免费| 26uuu亚洲综合色欧美| 亚洲欧美激情一区二区三区| 免费成人小视频| 永久免费看片在线观看| www一区二区| 国产精品夜夜夜爽阿娇| 亚洲午夜电影在线观看| 2018天天弄| 色综合天天天天做夜夜夜夜做| 一卡二卡在线视频| 欧洲av在线精品| 亚洲AV无码一区二区三区少妇| 日韩精品中文字幕在线观看 | 久久久亚洲福利精品午夜| 伊人久久在线| 99在线视频播放| 国产乱码精品一区二区三区亚洲人| 国产精品一区视频| 精品素人av| 天堂社区 天堂综合网 天堂资源最新版| 亚洲国产成人精品女人| 免费成人进口网站| 免费看的黄色欧美网站| 日本黄色www| 欧美国产国产综合| 成人毛片18女人毛片| 黄色精品在线看| 国产美女激情视频| 欧美一区二区三区小说| 成年在线观看免费人视频| 国内精品久久久久久久久| 韩国成人在线| 狠狠色综合色区| 九九综合在线| 成年人午夜视频在线观看| 国产欧美午夜| 国产综合免费视频| 国产成人在线视频免费播放| 一级片视频免费看| 午夜国产不卡在线观看视频| 国产视频一区二区三区四区五区| 亚洲人成亚洲人成在线观看| 国模私拍一区二区国模曼安| 成人国产一区二区| 91精品久久久久久久蜜月 | 久久久久亚洲av片无码下载蜜桃| 欧美在线一二三| 国产精品久久久久久久龚玥菲 | 亚洲国产无码精品| 欧美日韩国产中文字幕 | 国产福利一区二区三区视频在线| 午夜黄色福利视频| 欧美专区亚洲专区| 经典三级在线| 国产成人精品在线| 国产91精品对白在线播放| 六月丁香激情网| 人人狠狠综合久久亚洲| 成人h动漫精品一区| 亚洲成a人片在线不卡一二三区| 性做久久久久久久久久| 久久成人精品一区二区三区| 午夜影院一区| 精品一区二区三区日本| av成人激情| 亚洲一区二区乱码| 富二代精品短视频| 欧美色18zzzzxxxxx| 精品国产视频在线| 成年永久一区二区三区免费视频| 亚洲激情图片| 国产日韩精品视频一区二区三区| 最新日本中文字幕| 亚洲.国产.中文慕字在线| 香蕉久久国产av一区二区| 日韩在线观看免费av| 国产aⅴ精品一区二区四区| 干日本少妇视频| 国产成人精品www牛牛影视| 亚洲第一综合网| 欧美丝袜丝nylons| 国产盗摄在线观看| 国产91一区二区三区| 亚洲免费网址| 国产精品情侣呻吟对白视频| 欧美日韩精品电影| 欧美女优在线| 国产精品日韩av| 亚洲欧美综合国产精品一区| 欧美一区二区免费在线观看| 一本久久精品一区二区| 日本在线免费| 国产伦理一区二区三区| 日韩精品亚洲一区| 久久国产精品国语对白| 亚洲成avwww人| 美女网站视频一区| 国产欧美自拍视频| 91小视频在线免费看| 做爰视频毛片视频| 欧美福利视频在线| 久久av免费看| 色哟哟免费视频| 欧美午夜精品在线| 人妻无码一区二区三区久久99 | av电影一区二区| 国产又黄又爽又无遮挡| 亚洲国产日韩精品在线| 丁香花在线高清完整版视频| 秋霞毛片久久久久久久久| 国产一区二区三区美女| 日本a级c片免费看三区| 欧美精品在线观看91| 久久精品免视看国产成人| 一区二区传媒有限公司|