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

国产麻豆xxxvideo实拍| 奇米成人av国产一区二区三区| 超碰影院在线观看| 欧美女同网站| 日韩和欧美一区二区| 亚洲天堂一区二区三区| 400部精品国偷自产在线观看 | 亚洲国产合集| 色婷婷av一区二区三区软件| 天天人人精品| 91久久国语露脸精品国产高跟| 国产精品久久观看| 日韩丝袜美女视频| 霍思燕三级露全乳照| 青青草免费在线| 蜜桃av一区二区| 精品国产欧美成人夜夜嗨| 潘金莲一级淫片aaaaaaa| av免费在线视| 国产欧美日韩一区二区三区在线观看| 国产精品日韩欧美| 99热精品免费| 日本在线中文字幕一区| 亚洲高清免费视频| 欧美亚洲精品日韩| av网站在线观看免费| 国产欧美一区二区色老头 | 欧美亚洲国产日韩| 日本乱人伦一区| 黄色影视在线观看| 男人天堂网在线观看| 国内精品写真在线观看| 91国产一区在线| 欧美一区二区三区观看| 精品999日本久久久影院| 亚洲成年人网站在线观看| 秋霞毛片久久久久久久久| av天堂一区二区三区| 可以看av的网站久久看| www国产精品com| 97人妻精品一区二区三区免| 伊人久久大香| 欧美日韩国产一区二区| 日本一本草久p| 精品福利视频导航大全| 成人精品国产一区二区4080| 国产在线观看一区二区三区| 久久久久久久久久久久久久久久久| 欧美精美视频| 亚洲国产成人精品久久久国产成人一区 | 欧美激情一区不卡| 国产亚洲欧美一区二区 | 亚洲午夜久久久| 亚洲激情图片| 免费福利在线观看| 不卡在线观看av| 亚洲xxxx在线| 91国产免费视频| 日本女人一区二区三区| 777精品视频| 国产精品成人国产乱| 中文字幕午夜精品一区二区三区| 正在播放欧美视频| 亚洲乱码国产乱码精品精大量 | 91久久偷偷做嫩草影院| 最近中文字幕在线观看| 三级久久三级久久久| 久久久久久亚洲| 久草成人在线视频| 欧美一区精品| 欧美另类极品videosbestfree| 超碰97av在线| 日韩一区亚洲二区| 在线电影中文日韩| 国产综合精品久久久久成人av| 九九视频免费观看视频精品 | 日韩一级片免费看| 高清成人免费视频| 国产不卡一区二区在线观看 | 99视频有精品| 日韩av免费电影| sese一区| 一区二区三区免费观看| 日韩中文字幕在线免费| 成人直播视频| 欧美精品乱人伦久久久久久| 中文字幕第九页| 欧美精品尤物在线观看| 久久国产精品久久久久久久久久| 日本少妇做爰全过程毛片| 久久亚洲一区| 91香蕉亚洲精品| 天堂在线视频免费| 国产精品丝袜一区| 男女裸体影院高潮| 免费福利视频一区二区三区| 欧美精品乱码久久久久久 | 欧美午夜18电影| 在线看日韩av| 日本在线观看中文字幕| 日本不卡一区二区| 风间由美久久久| www日韩tube| 午夜在线成人av| 性欧美videossex精品| 综合久久成人| 最近2019年手机中文字幕 | 久草资源在线观看| 狠狠爱在线视频一区| 五月天开心婷婷| 日韩av黄色在线| 欧美成人免费网| 无码人妻aⅴ一区二区三区有奶水| 国模一区二区三区白浆| 欧美精品与人动性物交免费看| av免费看在线| 欧美亚洲国产一区二区三区| 黄色在线免费播放| 亚洲一区二区三区| 国产精品视频一区二区高潮| 五月婷婷六月激情| 亚洲女同女同女同女同女同69| 无码aⅴ精品一区二区三区浪潮| 91成人精品在线| 久久亚洲精品一区二区| 无码日韩精品一区二区| caoporn国产精品| 欧美日韩dvd| 亚洲色图图片| 色多多国产成人永久免费网站 | 欧美日韩大片一区二区三区| heyzo中文字幕在线| 欧美一区二区在线免费观看| 青青草自拍偷拍| 狂野欧美性猛交xxxx巴西| 激情视频在线观看一区二区三区| 先锋成人av| 日韩欧美在线影院| 一区二区三区四区五区| 九九九久久久精品| 亚洲一区三区在线观看| 91大神在线观看线路一区| 亚洲人成电影网站色xx| 亚洲综合久久网| 久久综合一区二区| 波多野结衣乳巨码无在线| 91麻豆精品国产91久久久久推荐资源| 久久人人爽亚洲精品天堂| 亚洲中文字幕在线观看| 国产精品美女久久久久久| 在线观看的毛片| 欧美一级精品片在线看| 国产精品视频内| 免费黄色电影在线观看| 欧美日本在线观看| 中文字幕五月天| 国产成人在线观看免费网站| 免费视频爱爱太爽了| 亚洲精品不卡在线观看| 欧美精品成人91久久久久久久| 亚洲精品成av人片天堂无码| 亚洲国产综合色| 久久一区二区电影| 久久av一区二区三区| 欧美日韩一区二区三区在线视频| 精品欧美日韩精品| www.美女亚洲精品| 精品人妻一区二区三区日产乱码 | 国产一区二区网| 欧美人妖在线观看| 国产成人精品网站| 男人影院在线观看| 日韩欧美视频在线| 久久久国产精品成人免费| 国产午夜亚洲精品理论片色戒| 久久99爱视频| 欧美日韩精品| 免费看成人午夜电影| 久久亚洲国产精品尤物| 欧美俄罗斯乱妇| 你懂的在线观看视频网站| 欧美日本在线观看| 日韩精品一区二区在线播放 | 91aaa在线观看| 99视频国产精品| 性刺激的欧美三级视频| 在线免费观看日本欧美爱情大片| 成人看片在线| 欧美在线va视频| 久久影院模特热| 三级理论午夜在线观看| 欧美一区永久视频免费观看| 五月婷婷中文字幕| 亚洲欧美另类小说| yjizz视频| 久久国产人妖系列| 男人日女人逼逼| 香蕉国产精品| 欧美13一14另类| 日本精品视频| 国产精品嫩草视频| 超碰在线视屏| 久热精品视频在线观看| 久草在现在线| 精品国偷自产国产一区| 中文在线a天堂| 狠狠久久亚洲欧美专区| 老女人性淫交视频| 欧美国产精品v| 污污内射在线观看一区二区少妇| 九九热在线视频观看这里只有精品| 日韩欧美亚洲天堂| 欧美.www| 一区不卡字幕| 红桃视频在线观看一区二区| 国产欧美一区二区在线播放| 国产专区精品| 国产三级精品网站| 午夜欧美巨大性欧美巨大| 久久久久一本一区二区青青蜜月| 免费黄色网址在线观看| 中文字幕在线亚洲| 三级毛片在线免费看| 亚洲精品在线一区二区| 99久久免费国产精精品| 欧美男女性生活在线直播观看| 久久国产黄色片| 五月激情综合婷婷| 久久久.www| 综合分类小说区另类春色亚洲小说欧美| 亚洲精品国产一区黑色丝袜| 久久嫩草精品久久久精品| 国产不卡一二三| 不卡的av网站| 日韩女优在线视频| 粉嫩嫩av羞羞动漫久久久| 亚洲高清在线不卡| 精彩视频一区二区| 色噜噜狠狠一区二区| 日韩av高清在线观看| www.欧美日本| 视频在线观看一区| 黄色av免费在线播放| 日韩电影一区二区三区四区| 波多野结衣作品集| 日韩黄色小视频| 亚洲免费看av| 精品无人码麻豆乱码1区2区| 999久久久精品视频| 国产一区在线精品| 中文国产在线观看| 国产高清无密码一区二区三区| 日本女人黄色片| 成人午夜免费视频| 超碰caoprom| 91网站最新网址| 天天躁日日躁aaaa视频| 欧美国产欧美综合| 97成人资源站| 亚洲成人一区二区在线观看| 日本一区二区网站| 色婷婷激情久久| 在线观看免费中文字幕| 欧美一级理论片| 丰满熟女一区二区三区| 亚洲精品国产综合区久久久久久久 | 欧美男男tv网站在线播放| 欧美一区在线直播| 97精品国产99久久久久久免费| 成人黄色av网站| 成人盗摄视频| 免费成人看片网址| 日韩精品第一区| 亚洲中文字幕无码一区二区三区| 狠色狠色综合久久| 久久久久狠狠高潮亚洲精品| 青青草国产成人99久久| 97超碰人人看| 91视频观看免费| 最新黄色av网址| 亚洲国产综合在线| 中文字幕91爱爱| 精品国偷自产国产一区| 国产区视频在线| 九九热这里只有在线精品视| 在线能看的av网址| 91精品久久久久久久久青青| 超碰精品在线| 色噜噜色狠狠狠狠狠综合色一| 888久久久| 99草草国产熟女视频在线| 激情av综合网| 欧美特黄一区二区三区| 亚洲男女一区二区三区| 中文字幕第四页| 91精品国产全国免费观看| 天堂中文在线8| 欧美成人全部免费| 免费观看成人性生生活片 | 国产欧美亚洲视频| 国内露脸中年夫妇交换精品| 亚洲日本无吗高清不卡| 亚洲理伦在线| 三区视频在线观看| 久久久蜜桃精品| 久久精品免费av| 欧美精品一二三区| 国产原创av在线| 久久久人成影片一区二区三区| 国产美女久久| 欧美精品二区三区四区免费看视频| 欧美在线亚洲| 97超碰成人在线| 国产拍揄自揄精品视频麻豆| 国产无套在线观看| 日韩欧美国产一区二区在线播放| 成人高潮成人免费观看| 18性欧美xxxⅹ性满足| 日韩成人精品| youjizz.com亚洲| 日韩高清在线不卡| 最新中文字幕视频| 亚洲国产精品一区二区www在线| 国产欧美一区二区三区视频在线观看| 国产亚洲精品久久久| 小h片在线观看| 好吊色欧美一区二区三区四区 | 欧洲av无码放荡人妇网站| 大桥未久av一区二区三区中文| 人妻久久一区二区| 欧美精品777| 免费在线观看av| 国产精品三级在线| 国产真实有声精品录音| 日韩av片在线看| 久久久久免费观看| 亚洲欧美精品一区二区三区| 日韩精品高清在线观看| 国产白浆在线免费观看| 国产一级精品aaaaa看| 在线看片欧美| 欧美一级片黄色| 婷婷国产v国产偷v亚洲高清| 天堂网在线观看视频| 777777777亚洲妇女| 无码日韩精品一区二区免费| 成人综合视频在线| 久久久久国产成人精品亚洲午夜| yjizz国产| 亚洲视频在线观看视频| 99久久精品一区二区成人| 一区二区免费在线观看| 精品一区二区三区不卡| 国产精品视频一区二区三| 欧美一区午夜视频在线观看 | 正在播放日韩欧美一页| 久久久九九九热| 亚洲国产视频直播| 午夜小视频在线播放| 国产成人av在线| 91欧美日韩| 女教师高潮黄又色视频| 亚洲观看高清完整版在线观看| 亚洲AV成人无码一二三区在线| 日韩男女性生活视频| 日韩久久精品网| 欧美高清精品一区二区| 午夜精品视频一区| 经典三级在线| 91精品中国老女人| 伊人精品在线| 黄色aaa视频| 宅男噜噜噜66一区二区66| a'aaa级片在线观看| 欧美性色黄大片人与善| 国内成+人亚洲+欧美+综合在线| 国产第一页第二页| 国产一区二区三区视频| 精品久久亚洲| 岳毛多又紧做起爽| 亚洲欧洲日韩在线| 色呦呦中文字幕| 国产精品视频1区| 精品动漫一区| 青青草自拍偷拍| 亚洲国产精品人人爽夜夜爽| 国产一区二区主播在线| 日本精品久久久久久久久久| 国产欧美一区二区三区鸳鸯浴| va婷婷在线免费观看| 57pao成人永久免费视频| 亚洲草久电影| 99久久人妻无码精品系列| 91精品国产91热久久久做人人| 午夜av不卡| 小泽玛利亚av在线| 国产欧美一区二区精品忘忧草| 亚洲国产精品视频在线| 国产精品视频网| 免费日韩一区二区|