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

10個經典又容易被人疏忽的JVM面試題

云計算 虛擬化
「對象一定分配在堆中嗎?」 不一定的,JVM通過「逃逸分析」,那些逃不出方法的對象會在棧上分配。

[[353526]]

前言

整理了10個經典又容易被疏忽的JVM面試題,謝謝閱讀,大家加油哈

github地址,感謝每顆star

https://github.com/whx123/JavaHome

1. 對象一定分配在堆中嗎?有沒有了解逃逸分析技術?

「對象一定分配在堆中嗎?」 不一定的,JVM通過「逃逸分析」,那些逃不出方法的對象會在棧上分配。

「什么是逃逸分析?」

逃逸分析(Escape Analysis),是一種可以有效減少Java 程序中同步負載和內存堆分配壓力的跨函數全局數據流分析算法。通過逃逸分析,Java Hotspot編譯器能夠分析出一個新的對象的引用的使用范圍,從而決定是否要將這個對象分配到堆上。

逃逸分析是指分析指針動態范圍的方法,它同編譯器優化原理的指針分析和外形分析相關聯。當變量(或者對象)在方法中分配后,其指針有可能被返回或者被全局引用,這樣就會被其他方法或者線程所引用,這種現象稱作指針(或者引用)的逃逸(Escape)。通俗點講,如果一個對象的指針被多個方法或者線程引用時,那么我們就稱這個對象的指針發生了逃逸。

「一個逃逸分析的例子」

  1. /** 
  2.  *  @author 撿田螺的小男孩 
  3.  */ 
  4. public class EscapeAnalysisTest { 
  5.  
  6.     public static Object object; 
  7.  
  8.     //StringBuilder可能被其他方法改變,逃逸到了方法外部。 
  9.     public StringBuilder  escape(String a, String b) { 
  10.         //公眾號:撿田螺的小男孩 
  11.         StringBuilder str = new StringBuilder(); 
  12.         str.append(a); 
  13.         str.append(b); 
  14.         return str; 
  15.     } 
  16.  
  17.     //不直接返回StringBuffer,不發生逃逸 
  18.     public String notEscape(String a, String b) { 
  19.         //公眾號:撿田螺的小男孩 
  20.         StringBuilder str = new StringBuilder(); 
  21.         str.append(a); 
  22.         str.append(b); 
  23.         return str.toString(); 
  24.     } 
  25.  
  26.     //外部線程可見object,發生逃逸 
  27.     public void objectEscape(){ 
  28.         object = new Object(); 
  29.     } 
  30.  
  31.     //僅方法內部可見,不發生逃逸 
  32.     public void objectNotEscape(){ 
  33.         Object object = new Object(); 
  34.     } 

「逃逸分析的好處」

  • 棧上分配,可以降低垃圾收集器運行的頻率。
  • 同步消除,如果發現某個對象只能從一個線程可訪問,那么在這個對象上的操作可以不需要同步。
  • 標量替換,把對象分解成一個個基本類型,并且內存分配不再是分配在堆上,而是分配在棧上。這樣的好處有,一、減少內存使用,因為不用生成對象頭。二、程序內存回收效率高,并且GC頻率也會減少。

2.虛擬機為什么使用元空間替換了永久代?

「什么是元空間?什么是永久代?為什么用元空間代替永久代?」 我們先回顧一下「方法區」吧,看看虛擬機運行時數據內存圖,如下:

方法區和堆一樣,是各個線程共享的內存區域,它用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯后的代碼等數據。

「什么是永久代?它和方法區有什么關系呢?」

如果在HotSpot虛擬機上開發、部署,很多程序員都把方法區稱作永久代。可以說方法區是規范,永久代是Hotspot針對該規范進行的實現。在Java7及以前的版本,方法區都是永久代實現的。

「什么是元空間?它和方法區有什么關系呢?」

對于Java8,HotSpots取消了永久代,取而代之的是元空間(Metaspace)。換句話說,就是方法區還是在的,只是實現變了,從永久代變為元空間了。

「為什么使用元空間替換了永久代?」

  • 永久代的方法區,和堆使用的物理內存是連續的。

「永久代」是通過以下這兩個參數配置大小的~

  • -XX:PremSize:設置永久代的初始大小
  • -XX:MaxPermSize: 設置永久代的最大值,默認是64M

對于「永久代」,如果動態生成很多class的話,就很可能出現「java.lang.OutOfMemoryError: PermGen space錯誤」,因為永久代空間配置有限嘛。最典型的場景是,在web開發比較多jsp頁面的時候。

  • JDK8之后,方法區存在于元空間(Metaspace)。物理內存不再與堆連續,而是直接存在于本地內存中,理論上機器「內存有多大,元空間就有多大」。

可以通過以下的參數來設置元空間的大小:

  • -XX:MetaspaceSize,初始空間大小,達到該值就會觸發垃圾收集進行類型卸載,同時GC會對該值進行調整:如果釋放了大量的空間,就適當降低該值;如果釋放了很少的空間,那么在不超過MaxMetaspaceSize時,適當提高該值。
  • -XX:MaxMetaspaceSize,最大空間,默認是沒有限制的。
  • -XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空間容量的百分比,減少為分配空間所導致的垃圾收集
  • -XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空間容量的百分比,減少為釋放空間所導致的垃圾收集

「所以,為什么使用元空間替換永久代?」

表面上看是為了避免OOM異常。因為通常使用PermSize和MaxPermSize設置永久代的大小就決定了永久代的上限,但是不是總能知道應該設置為多大合適, 如果使用默認值很容易遇到OOM錯誤。當使用元空間時,可以加載多少類的元數據就不再由MaxPermSize控制, 而由系統的實際可用空間來控制啦。

3.什么是Stop The World ? 什么是OopMap?什么是安全點?

進行垃圾回收的過程中,會涉及對象的移動。為了保證對象引用更新的正確性,必須暫停所有的用戶線程,像這樣的停頓,虛擬機設計者形象描述為「Stop The World」。

在HotSpot中,有個數據結構(映射表)稱為「OopMap」。一旦類加載動作完成的時候,HotSpot就會把對象內什么偏移量上是什么類型的數據計算出來,記錄到OopMap。在即時編譯過程中,也會在「特定的位置」生成 OopMap,記錄下棧上和寄存器里哪些位置是引用。

這些特定的位置主要在:

  • 1.循環的末尾(非 counted 循環)
  • 2.方法臨返回前 / 調用方法的call指令后
  • 3.可能拋異常的位置

這些位置就叫作「安全點(safepoint)。」 用戶程序執行時并非在代碼指令流的任意位置都能夠在停頓下來開始垃圾收集,而是必須是執行到安全點才能夠暫停。

4.說一下JVM 的主要組成部分及其作用?

JVM包含兩個子系統和兩個組件,分別為

  • Class loader(類裝載子系統)
  • Execution engine(執行引擎子系統);
  • Runtime data area(運行時數據區組件)
  • Native Interface(本地接口組件)。
    • 「Class loader(類裝載):」 根據給定的全限定名類名(如:java.lang.Object)來裝載class文件到運行時數據區的方法區中。
    • 「Execution engine(執行引擎)」:執行class的指令。
    • 「Native Interface(本地接口):」 與native lib交互,是其它編程語言交互的接口。
    • 「Runtime data area(運行時數據區域)」:即我們常說的JVM的內存。

首先通過編譯器把 Java源代碼轉換成字節碼,Class loader(類裝載)再把字節碼加載到內存中,將其放在運行時數據區的方法區內,而字節碼文件只是 JVM 的一套指令集規范,并不能直接交給底層操作系統去執行,因此需要特定的命令解析器執行引擎(Execution Engine),將字節碼翻譯成底層系統指令,再交由 CPU 去執行,而這個過程中需要調用其他語言的本地庫接口(Native Interface)來實現整個程序的功能。

5. 守護線程是什么?守護線程和非守護線程的區別是?守護線程的作用是?

「守護線程」是區別于用戶線程哈,「用戶線程」即我們手動創建的線程,而守護線程是程序運行的時候在后臺提供一種「通用服務的線程」。垃圾回收線程就是典型的守護線程。

「守護線程和非守護線程的區別是?」 我們通過例子來看吧~

  1. /** 
  2.      * 關注公眾號:撿田螺的小男孩 
  3.      */ 
  4.    public static void main(String[] args) throws InterruptedException { 
  5.        Thread t1 = new Thread(()-> { 
  6.                while (true) { 
  7.                    try { 
  8.                        Thread.sleep(1000); 
  9.                        System.out.println("我是子線程(用戶線程.I am running"); 
  10.                    } catch (Exception e) { 
  11.                    } 
  12.                } 
  13.        }); 
  14.        //標記為守護線程 
  15.        t1.setDaemon(true); 
  16.        //啟動線程 
  17.        t1.start(); 
  18.  
  19.        Thread.sleep(3000); 
  20.        System.out.println("主線程執行完畢..."); 
  21.    } 

運行結果:

可以發現標記為守護線程后,「主線程銷毀停止,守護線程一起銷毀」。我們再看下,去掉 t1.setDaemon(true)守護標記的效果:

  1. public static void main(String[] args) throws InterruptedException { 
  2.       Thread t1 = new Thread(()-> { 
  3.               while (true) { 
  4.                   try { 
  5.                       Thread.sleep(1000); 
  6.                       System.out.println("我是子線程(用戶線程.I am running"); 
  7.                   } catch (Exception e) { 
  8.                   } 
  9.               } 
  10.       }); 
  11.       //啟動線程 
  12.       t1.start(); 
  13.  
  14.       Thread.sleep(3000); 
  15.       System.out.println("主線程執行完畢..."); 
  16.   } 

所以,當主線程退出時,JVM 也跟著退出運行,守護線程同時也會被回收,即使是死循環。如果是用戶線程,它會一直停在死循環跑。這就是「守護線程和非守護線程的區別」啦。

守護線程擁有「自動結束自己生命周期的特性」,非守護線程卻沒有。如果垃圾回收線程是非守護線程,當JVM 要退出時,由于垃圾回收線程還在運行著,導致程序無法退出,這就很尷尬。這就是「為什么垃圾回收線程需要是守護線程啦」。

6.WeakHashMap了解過嘛?它是怎么工作的?

「WeakHashMap」 類似HashMap ,不同點在WeakHashMap的key是「弱引用」的key。

談到「弱引用」,在這里回顧下四種引用吧

  • 強引用:Object obj=new Object()這種,只要強引用關系還存在,垃圾收集器就永遠不會回收掉被引用的對象。
  • 軟引用: 一般情況不會回收,如果內存不夠要溢出時才會進行回收
  • 弱引用:當垃圾收集器開始工作,無論當前內存是否足夠,都會回收掉只被弱引用關聯的對象。
  • 虛引用:為一個對象設置虛引用的唯一目的只是為了能在這個對象被回收時收到一個系統的通知。

正是因為WeakHashMap使用的是弱引用,「它的對象可能隨時被回收」。WeakHashMap 類的行為部分「取決于垃圾回收器的動作」,調用兩次size()方法返回不同值,調用兩次isEmpty(),一次返回true,一次返回false都是「可能的」。

WeakHashMap「工作原理」回答這兩點:

  1. WeakHashMap具有弱引用的特點:隨時被回收對象。
  2. 發生GC時,WeakHashMap是如何將Entry移除的呢?

WeakHashMap內部的Entry繼承了WeakReference,即弱引用,所以就具有了弱引用的特點,「隨時可能被回收」。看下源碼哈:

  1. private static class Entry<K,V> extends WeakReference<Object> implements Map.Entry<K,V> { 
  2.         V value; 
  3.         final int hash; 
  4.         Entry<K,V> next
  5.  
  6.         /** 
  7.          * Creates new entry. 
  8.          */ 
  9.         Entry(Object key, V value, 
  10.               ReferenceQueue<Object> queue, 
  11.               int hash, Entry<K,V> next) { 
  12.             super(key, queue); 
  13.             this.value = value; 
  14.             this.hash  = hash; 
  15.             this.next  = next
  16.         } 
  17.         ...... 

「WeakHashMap是如何將Entry移除的?」 GC每次清理掉一個對象之后,引用對象會放到ReferenceQueue的,接著呢遍歷queue進行刪除。WeakHashMap的增刪改查操作,就是直接/間接調用expungeStaleEntries()方法,達到及時清除過期entry的目的。可以看下expungeStaleEntries源碼哈:

  1. /** 
  2.    * Expunges stale entries from the table
  3.    */ 
  4.   private void expungeStaleEntries() { 
  5.       for (Object x; (x = queue.poll()) != null; ) { 
  6.           synchronized (queue) { 
  7.               @SuppressWarnings("unchecked"
  8.                   Entry<K,V> e = (Entry<K,V>) x; 
  9.               int i = indexFor(e.hash, table.length); 
  10.  
  11.               Entry<K,V> prev = table[i]; 
  12.               Entry<K,V> p = prev; 
  13.               while (p != null) { 
  14.                   Entry<K,V> next = p.next
  15.                   if (p == e) { 
  16.                       if (prev == e) 
  17.                           table[i] = next
  18.                       else 
  19.                           prev.next = next
  20.                       // Must not null out e.next
  21.                       // stale entries may be in use by a HashIterator 
  22.                       e.value = null; // Help GC 
  23.                       size--; 
  24.                       break; 
  25.                   } 
  26.                   prev = p; 
  27.                   p = next
  28.               } 
  29.           } 
  30.       } 
  31.   } 

7. 是否了解Java語法糖嘛?說下12種Java中常用的語法糖?

語法糖(Syntactic Sugar),也稱糖衣語法,讓程序更加簡潔,有更高的可讀性。Java 中最常用的語法糖主要有泛型、變長參數、條件編譯、自動拆裝箱、內部類等12種。

  • 語法糖一、switch 支持 String 與枚舉
  • 語法糖二、 泛型
  • 語法糖三、 自動裝箱與拆箱
  • 語法糖四 、 方法變長參數
  • 語法糖五 、 枚舉
  • 語法糖六 、 內部類
  • 語法糖七 、條件編譯
  • 語法糖八 、 斷言
  • 語法糖九 、 數值字面量
  • 語法糖十 、 for-each
  • 語法糖十一 、 try-with-resource
  • 語法糖十二、Lambda表達式

8. 什么是指針碰撞?什么是空閑列表?什么是TLAB?

一般情況下,JVM的對象都放在堆內存中(發生逃逸分析除外)。當類加載檢查通過后,Java虛擬機開始為新生對象分配內存。如果Java堆中內存是絕對規整的,所有被使用過的的內存都被放到一邊,空閑的內存放到另外一邊,中間放著一個指針作為分界點的指示器,所分配內存僅僅是把那個指針向空閑空間方向挪動一段與對象大小相等的實例,這種分配方式就是“「指針碰撞」”。

如果Java堆內存中的內存并不是規整的,已被使用的內存和空閑的內存相互交錯在一起,不可以進行指針碰撞啦,虛擬機必須維護一個列表,記錄哪些內存是可用的,在分配的時候從列表找到一塊大的空間分配給對象實例,并更新列表上的記錄,這種分配方式就是“「空閑列表」”

?對象創建在虛擬機中是非常頻繁的行為,可能存在線性安全問題。如果一個線程正在給A對象分配內存,指針還沒有來的及修改,同時另一個為B對象分配內存的線程,仍引用這之前的指針指向,這就出「問題」了。

可以把內存分配的動作按照線程劃分在不同的空間之中進行,每個線程在Java堆中預先分配一小塊內存,這就是「TLAB(Thread Local Allocation Buffer,本地線程分配緩存)」 。虛擬機通過-XX:UseTLAB設定它的。

9.CMS垃圾回收器的工作過程,CMS收集器和G1收集器的區別。

CMS(Concurrent Mark Sweep) 收集器:是一種以獲得最短回收停頓時間為目標的收集器,標記清除算法,運作過程:「初始標記,并發標記,重新標記,并發清除」,收集結束會產生大量空間碎片。如圖(下圖來源互聯網):

「CMS收集器和G1收集器的區別:」

  • CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;
  • G1收集器收集范圍是老年代和新生代,不需要結合其他收集器使用;
  • CMS收集器以最小的停頓時間為目標的收集器;
  • G1收集器可預測垃圾回收的停頓時間
  • CMS收集器是使用“標記-清除”算法進行的垃圾回收,容易產生內存碎片
  • G1收集器使用的是“標記-整理”算法,進行了空間整合,降低了內存空間碎片。

10.JVM 調優

JVM調優其實就是通過調節JVM參數,即對垃圾收集器和內存分配的調優,以達到更高的吞吐和性能。JVM調優主要調節以下參數

「堆棧內存相關」

  • -Xms 設置初始堆的大小
  • -Xmx 設置最大堆的大小
  • -Xmn 設置年輕代大小,相當于同時配置-XX:NewSize和-XX:MaxNewSize為一樣的值
  • -Xss 每個線程的堆棧大小
  • -XX:NewSize 設置年輕代大小(for 1.3/1.4)
  • -XX:MaxNewSize 年輕代最大值(for 1.3/1.4)
  • -XX:NewRatio 年輕代與年老代的比值(除去持久代)
  • -XX:SurvivorRatio Eden區與Survivor區的的比值
  • -XX:PretenureSizeThreshold 當創建的對象超過指定大小時,直接把對象分配在老年代。
  • -XX:MaxTenuringThreshold設定對象在Survivor復制的最大年齡閾值,超過閾值轉移到老年代

「垃圾收集器相關」

  • -XX:+UseParallelGC:選擇垃圾收集器為并行收集器。
  • -XX:ParallelGCThreads=20:配置并行收集器的線程數
  • -XX:+UseConcMarkSweepGC:設置年老代為并發收集。
  • -XX:CMSFullGCsBeforeCompaction=5 由于并發收集器不對內存空間進行壓縮、整理,所以運行一段時間以后會產生“碎片”,使得運行效率降低。此值設置運行5次GC以后對內存空間進行壓縮、整理。
  • -XX:+UseCMSCompactAtFullCollection:打開對年老代的壓縮。可能會影響性能,但是可以消除碎片

「輔助信息相關」

  • -XX:+PrintGCDetails 打印GC詳細信息
  • -XX:+HeapDumpOnOutOfMemoryError讓JVM在發生內存溢出的時候自動生成內存快照,排查問題用
  • -XX:+DisableExplicitGC禁止系統System.gc(),防止手動誤觸發FGC造成問題.
  • -XX:+PrintTLAB 查看TLAB空間的使用情況

參考與感謝

  • [JVM的逃逸分析] (https://segmentfault.com/a/1190000023475016)
  • [面試官 | JVM 為什么使用元空間替換了永久代?] (https://my.oschina.net/u/3471412/blog/4426430)
  • [Metaspace 之一:Metaspace整體介紹(永久代被替換原因、元空間特點、元空間內存查看分析方法)] (https://www.cnblogs.com/duanxz/p/3520829.html)
  • [深入理解WeakHashmap] (https://blog.51cto.com/mikewang/880775)
  • [一文搞懂WeakHashMap工作原理] (https://baijiahao.baidu.com/s?id=1666368292461068600&wfr=spider&for=pc)
  • [談談什么是守護線程及作用] (https://www.cnblogs.com/quanxiaoha/p/10731361.html)
  • [淺析java中的TLAB] (https://www.jianshu.com/p/8be816cbb5ed)
  • 《深入理解Java虛擬機》

本文轉載自微信公眾號「撿田螺的小男孩」,可以通過以下二維碼關注。轉載本文請聯系撿田螺的小男孩公眾號。

 

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2015-08-19 09:35:49

Java main面試題

2014-07-28 14:00:40

linux面試題

2016-05-05 17:45:43

Spring面試題答案

2019-08-09 09:50:38

Java編程語言面試題

2022-02-09 07:40:42

JavaScript前端面試題

2016-03-03 10:07:39

ios內存管理面試總結

2024-04-15 08:34:43

2024-04-28 08:23:18

2025-08-22 10:45:57

Go字符串語言

2015-09-29 09:24:22

Node.js面試題

2019-11-26 10:30:11

CSS前端面試題

2024-07-24 08:38:07

2014-12-02 10:02:30

2021-06-09 07:56:51

JvmJVM面試題Java

2010-04-15 11:54:55

面試

2019-08-05 09:15:39

Java程序員設計

2021-06-27 22:48:28

Redis數據庫內存

2025-06-18 09:01:27

Linux系統啟動系統

2014-09-19 11:17:48

面試題

2020-06-04 14:40:40

面試題Vue前端
點贊
收藏

51CTO技術棧公眾號

欧美福利视频在线| 欧美精品第1页| 欧美日韩一区二| 亚洲无码精品国产| 欧美日韩免费| 亚洲精品在线91| 久久久久久久高清| 国产高潮在线| 久久精品人人爽人人爽| 亚洲xxxxx性| www.国产毛片| 欧美黄污视频| 在线日韩第一页| 波多野吉衣在线视频| 欧美xx视频| 亚洲视频网在线直播| 久久久久久a亚洲欧洲aⅴ| 伊人精品在线视频| 欧美专区18| 欧美激情在线观看视频| 免费一级特黄3大片视频| 1769国产精品视频| 欧美日韩视频在线观看一区二区三区| www污在线观看| 免费人成在线观看播放视频| 91蜜桃婷婷狠狠久久综合9色| 91亚洲人电影| 波多野结衣二区三区| 很黄很黄激情成人| 久久久国产精品视频| 毛片aaaaaa| 国产精品自拍区| 亚洲精品国产成人| 亚洲av无码成人精品区| 99er精品视频| 欧美久久久一区| 久热精品在线观看视频| 伊人久久视频| 黄色成人在线播放| 每日在线观看av| 欧美人与禽猛交乱配| 亚洲丝袜另类动漫二区| 亚洲午夜在线观看| h视频在线免费| 国产日韩高清在线| 欧美性色黄大片人与善| 香蕉久久一区二区三区| 国产99精品在线观看| 99re在线| 精品欧美一区二区精品少妇| 国产一区999| 成人网在线观看| 国产色在线视频| 国产精品一区二区视频| 成人看片人aa| 精品人妻伦一二三区久久| 国产在线播放一区二区三区| 亚洲bt天天射| 性网爆门事件集合av| 国产成+人+日韩+欧美+亚洲| 国产超碰91| 免费看av毛片| 91毛片在线观看| 日本一区二区不卡高清更新| 国产三级视频在线播放线观看| 国产午夜精品久久久久久久| 色涩成人影视在线播放| 国产youjizz在线| 国产精品电影一区二区三区| 亚洲一区二区精品在线| 精产国品自在线www| 亚洲另类一区二区| av网站手机在线观看| 欧美在线极品| 欧美日韩一区国产| 在线观看视频在线观看| 麻豆一区二区麻豆免费观看| 日韩激情av在线播放| 色欲AV无码精品一区二区久久| 国产精品91一区二区三区| 欧美国产极速在线| www.com国产| 久草热8精品视频在线观看| 亚洲va国产va天堂va久久| 日本人妻丰满熟妇久久久久久| 久久久久久综合| 久久久一二三四| 爱情岛亚洲播放路线| 日韩欧美在线国产| 午夜福利123| 天堂99x99es久久精品免费| 国产一级揄自揄精品视频| 91久久国产综合| 鲁大师影院一区二区三区| 国产日韩欧美视频在线| 黄色aaa毛片| 国产精品热久久久久夜色精品三区 | 一区二区三区国产在线观看| 性生交大片免费全黄| 亚洲精品四区| 成人在线播放av| 水莓100国产免费av在线播放| 国产精品麻豆视频| 欧美性大战久久久久xxx| 国产精品日本一区二区不卡视频| 精品在线小视频| 国产精品国产精品88| 久久精品人人做人人爽电影蜜月| 亚洲自拍欧美另类| 3p视频在线观看| 欧美日韩国产丝袜另类| √天堂资源在线| 成人激情诱惑| 欧美一级淫片videoshd| 亚洲第一页综合| 亚洲色图第一区| 一路向西2在线观看| 狼人天天伊人久久| 久热在线中文字幕色999舞| 国产精品suv一区| 国产mv日韩mv欧美| 在线观看一区欧美| 精品免费av在线| 日韩成人网免费视频| 中文字幕影音先锋| 精品一区二区三区在线观看国产| 免费看成人av| 国产不卡123| 精品盗摄一区二区三区| 成年人一级黄色片| 国产一区二区女| 桥本有菜av在线| 成人国产网站| 夜夜嗨av一区二区三区四区 | 在线小视频你懂的| 亚洲精品四区| 黄色99视频| 欧美精品videossex少妇| 欧美一区二区三区免费| 少妇视频一区二区| 久久精品国产亚洲aⅴ| 视频一区二区三区免费观看| 欧美xxx视频| 国产一区二区久久精品| 天天操天天干天天摸| 久久久亚洲高清| 精品99在线视频| 久久99国产成人小视频| 国产成人91久久精品| 国产在线一二三区| 91豆麻精品91久久久久久| 国产精品扒开腿做爽爽| 男人的天堂成人在线| 日韩av电影在线观看| 欧美影视资讯| 日韩在线观看你懂的| 国产又粗又黄视频| 亚洲免费电影在线| 97中文字幕在线观看| 影音先锋久久久| 六月婷婷久久| 成人h在线观看| 精品国产一区二区在线| 国产高清视频免费| 亚洲成人免费电影| 国精产品一区一区三区免费视频| 久久久久国产精品一区二区| 亚洲啪啪av| 亚洲经典视频| 97国产精品久久| 激情小视频在线| 8v天堂国产在线一区二区| 99色这里只有精品| 国产主播性色av福利精品一区| 国模视频一区二区| 天堂av在线7| 欧美视频在线一区| 中文字幕另类日韩欧美亚洲嫩草| 成人永久免费视频| aⅴ在线免费观看| 日韩在线观看电影完整版高清免费悬疑悬疑| 国产中文字幕日韩| 久久大胆人体| 亚洲欧美制服中文字幕| 国产一区二区三区四区视频| 一区二区久久久| 亚洲永久精品ww.7491进入| 老司机精品视频导航| 丁香婷婷综合激情| 欧美精品一二| 成人在线观看网址| 精品日本视频| 欧美激情二区三区| 成年人在线观看视频| 精品久久一区二区| 在线免费观看av片| 红桃视频成人在线观看| 五月天婷婷丁香网| av网站免费线看精品| 天天综合网久久| 一区二区三区精品视频在线观看| 一本久久a久久精品vr综合 | 久久狠狠亚洲综合| 欧美精品99久久| 911精品美国片911久久久| 欧美日韩亚洲在线 | 美腿丝袜亚洲色图| 欧美日韩精品在线一区二区 | 欧美爱爱视频免费看| 婷婷久久国产对白刺激五月99| 久久国产精品一区二区三区| 精品一区二区三区视频在线播放| 日韩av免费在线| 激情网站在线| 久久综合伊人77777蜜臀| 国产精品四虎| 亚洲精品视频在线播放| 免费a级片在线观看| 在线不卡中文字幕播放| 久久精品国产亚洲av麻豆蜜芽| 亚洲.国产.中文慕字在线| 中国一级片在线观看| 国产精品天干天干在观线| 蜜桃传媒一区二区亚洲av| 国产乱理伦片在线观看夜一区| 男人添女人下面免费视频| 久久亚洲电影| 99爱视频在线| 99精品视频网| 蜜臀av色欲a片无码精品一区| 亚洲色图网站| 国产一区一区三区| 国产精品99一区二区三| 先锋影音网一区| av一区二区在线观看| 欧美日韩另类丝袜其他| 亚洲成人一品| 免费成人av网站| 欧美日韩看看2015永久免费 | 91亚洲精品久久久| 亚洲最大的免费视频网站| 国产精品入口免费视| 九色成人搞黄网站| 国产精品亚洲精品| 精品国产黄a∨片高清在线| 国产精品亚洲网站| 日本欧美在线| 91色中文字幕| 国产一区二区三区免费在线| 91精品婷婷国产综合久久蝌蚪| 综合欧美精品| 99久久国产免费免费| 亚洲网一区二区三区| 粉嫩av四季av绯色av第一区| 97久久综合区小说区图片区| 亚洲一区二区中文| av综合网址| 久久精品国产一区二区三区日韩 | 亚洲亚裔videos黑人hd| 春暖花开成人亚洲区| 色琪琪综合男人的天堂aⅴ视频| 老司机在线看片网av| 精品中文字幕在线| 波多野结衣中文在线| 欧美在线精品免播放器视频| 日韩天堂在线| 成人免费直播live| 91午夜精品| 欧美日韩精品免费观看 | 日本中文字幕网址| 久久一区精品| 国产福利精品一区二区三区| 国产黑丝在线一区二区三区| 男人网站在线观看| 国产视频一区在线播放| 亚洲欧美另类日本| 亚洲另类色综合网站| 美日韩一二三区| 欧洲精品视频在线观看| 99热这里只有精品66| 日韩h在线观看| 欧美激情黑人| 午夜精品三级视频福利| 久久久成人av毛片免费观看| 成人免费福利在线| 精品少妇3p| 中国人体摄影一区二区三区| 亚洲大胆av| 日韩av片网站| bt7086福利一区国产| 中国特黄一级片| 偷拍一区二区三区| 国产毛片久久久久| 亚洲欧美日本另类| 在线观看操人| 国产精品高清免费在线观看| 9国产精品午夜| 一区二区三区|亚洲午夜| 亚洲私拍自拍| 五月天视频在线观看| 久久夜色精品国产噜噜av| 超碰在线国产97| 欧洲视频一区二区| 午夜av免费在线观看| 日韩的一区二区| 在线观看电影av| 国产综合视频在线观看| 亚洲综合小说图片| 国产va亚洲va在线va| 国产一区二区三区免费在线观看| 国产精品1000部啪视频| 亚洲一区二区三区自拍| 在线观看免费视频a| 日韩电影免费在线观看中文字幕| 成年人网站在线| 国产精品尤物福利片在线观看| 免费看久久久| 日韩精品在线中文字幕| 国产一区二区三区美女| 欧美一区二区三区粗大| 色综合天天综合网天天狠天天| 丰满肉肉bbwwbbww| 欧美另类高清videos| 高清精品久久| 一区不卡字幕| 美女爽到高潮91| 亚洲AV无码成人精品区明星换面 | 久久久噜噜噜www成人网| 成人免费va视频| 久久黄色免费视频| 日韩欧美激情在线| 在线电影福利片| 91久久精品国产91久久| 99精品一区| 加勒比av中文字幕| 亚洲桃色在线一区| 国产手机视频在线| 免费不卡在线观看av| 国产精品国产三级在线观看| 中文字幕一区二区三区最新 | 91视频在线观看| 国产国语刺激对白av不卡| 亚洲视频分类| aaaaaa亚洲| 久久精品人人做人人综合| 成人小视频在线播放| 亚洲四色影视在线观看| 91伊人久久| 四虎免费在线观看视频| 国产精品一二三| 精品少妇久久久| 亚洲国产中文字幕久久网| 美女视频在线免费| 品久久久久久久久久96高清| 日韩电影免费一区| 懂色av蜜臀av粉嫩av永久| 欧美一区二区三区四区久久 | 香蕉久久一区二区不卡无毒影院| 亚洲精品第五页| 97香蕉超级碰碰久久免费的优势| 小说区图片区色综合区| 天堂社区在线视频| 中文字幕一区二区三| 99er热精品视频| 国内精品久久影院| 久久99国产精一区二区三区| 手机看片一级片| 一区二区三区在线观看国产| 人妻丰满熟妇av无码区hd| 日本久久久久久| 久久精品国产亚洲夜色av网站| 免费不卡av网站| 亚洲成人激情av| 国产永久免费高清在线观看视频| 国产精品一区二区三区久久| 影音先锋成人在线电影| 久久福利小视频| 欧美在线免费播放| 羞羞网站在线免费观看| 久久久综合香蕉尹人综合网 | 亚洲少妇中文字幕| 一本大道久久a久久精二百| 日本中文字幕伦在线观看| 国产精品二区在线观看| 一道本一区二区| 日韩精品一区二区三区在线视频| 亚洲高清色综合| 免费日韩成人| 浮妇高潮喷白浆视频| 亚洲欧美在线观看| 日韩欧美在线番号| 亚洲一区制服诱惑| 久久xxxx精品视频| 男女羞羞免费视频| 亚洲欧洲成视频免费观看| 亚洲成人黄色| 污污视频网站免费观看| 亚洲成人自拍网| 黄页视频在线播放| 日韩欧美视频一区二区三区四区|