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

并發與高并發系列第二集-Java內存區域劃分

開發 后端
我們會把查票信息和查詢電影推薦信息請求放在二個不同的線程池,查詢熱門電影推薦這個請求做成弱依賴,也就是查詢熱門電影推薦失敗或者超時也不會影響到查詢電影票信息。

[[405175]]

本文轉載自微信公眾號「安琪拉的博客」,作者安琪拉。轉載本文請聯系安琪拉的博客公眾號。

面試官:上次我們公司搞了個專場面試,來了一百多候選人,現場很熱鬧,你怎么沒來?

安琪拉: 天氣太熱,你們公司離地鐵站又比較遠,以我的能力,面完肯定是搶不到共享單車的,所以就不湊這個熱鬧了。

面試官:你這是什么意思?

安琪拉: 沒什么意思。。。哎,我等不及了,快開始吧。

面試官:你簡歷上寫熟悉多線程,你能給我講為什么要用多線程嗎?多線程有什么好處?最好能給我舉個你工作中的實際例子。

安琪拉: 比如: 用戶查看在支付寶買的電影票的時候,順便在頁面下半部分推薦給用戶一些最近的熱門電影。

比如安琪拉看自己買的“寂靜之地2”的時候,頁面底部同時推薦給我“速度與激情9”,放個預告片、影片介紹啥的。

面試官: 這就完了? 然后呢,詳細講講怎么用到多線程的?

安琪拉: 如果不使用多線程,支付寶服務端先查詢用戶的購票信息,查詢完之后再查詢熱門電影推薦信息,這樣串行效率很慢。

改成多線程,同時進行二個請求的查詢,查詢完成把結果組裝,展示給用戶。

面試官:那如果查詢熱門電影推薦失敗了,或者查詢推薦信息很慢,豈不是也很影響用戶查看自己買的票,如果這個時候用戶著急看電影,一直出不來,豈不是3.25啦。

安琪拉: 我們會把查票信息和查詢電影推薦信息請求放在二個不同的線程池,查詢熱門電影推薦這個請求做成弱依賴,也就是查詢熱門電影推薦失敗或者超時也不會影響到查詢電影票信息。

面試官:能寫個偽代碼說明下嗎?

安琪拉: 可以,幫我拿張A4紙,順便把你筆借我一下。(下面涉及Future、線程池的代碼看不懂沒關系,后面并發系列介紹完回過頭來看也可以)

  1. //查詢票信息 
  2. Future getTicketFuture = ticketHandlePool.submit(()->{ 
  3.     //查詢票信息 
  4.     doQuery(); 
  5. }); 
  6.  
  7. //查詢推薦電影 
  8. Future recMovieFuture = recMovieHandlePool.submit(()->{ 
  9.     //查詢推薦電影 
  10.     try { 
  11.       doQuery(); 
  12.     } catch (Exception ex) { 
  13.        //異常捕獲記錄 
  14.       logger.warn("信息", ex); 
  15.     } 
  16. }); 
  17. //獲取票查詢結果 
  18. try { 
  19.     recMovieFuture.get(2, TimeUnit.SECONDS); 
  20. } catch (Exception e) { 
  21.   //弱依賴: 超時、中斷等異常只是warn級別記錄,任務取消,不拋出異常 
  22.   logger.warn("信息", e); 
  23.   recMovieFuture.cancel(true); 
  24. //獲取推薦信息查詢結果強依賴 
  25. try { 
  26.     getTicketFuture.get(3, TimeUnit.SECONDS); 
  27. } catch (Exception e) { 
  28.   logger.error("信息", e); 
  29.   recMovieFuture.cancel(true); 
  30.   throw new ***Exception(e, "獲取票信息異常"); 

面試官:那你給我總結一下并發編程的優勢吧。

安琪拉: 【看來實踐環節過了,開始上八股文了。】

嗯,剛才我們也看到了,并發能提升程序執行的效率,充分利用CPU,特別是對于多核,IO密集型(經常需要等待I/O,多線程可以充分利用CPU資源),并發也是一種設計,在某些多任務處理,或者一個大任務需要拆分成很多個子任務的場景,并發一方面能提升執行效率,另一方面能清晰的表達程序設計者的意圖。

【這一波方法論應該能讓面試官抖一抖】

面試官:那并發編程有什么風險呢?

安琪拉: 總的來說有這么幾個:

  • 線程頻繁上下文切換,會有性能損耗;
  • 共享數據多線程訪問,如果不加控制,可能會出現線程安全問題;

面試官:關于線程安全相關的,你能我有幾個問題想問你。

安琪拉: 請出題。

面試官:你給我講講JVM運行時數據區域的劃分嗎?

安琪拉: 【它來了,它終于還是來了】

這個給個小提示,有時候我們會把JVM的運行時數據區域和Java內存模型搞混,面試題二個一般都會問到。

  • JVM的運行時數據區就是堆、棧這些,規定運行時內存(含寄存器) 分成哪幾塊,起什么作用;
  • Java內存模型是為了Java語言的跨平臺表現一致性,屏蔽硬件和操作系統實現提出的規范,例如規定了線程和主內存之間的抽象關系,既然是規范,只會規定概念,具體實現依賴不同平臺的JVM虛擬機的實現。

其實日常寫代碼心里有總體概念就好了,不需要像做研究一樣的深入實現細節,除非面試的是JVM虛擬機開發崗這種。

如下如所示,就是JVM運行時數據區

面試官:那我們來一塊一塊區域的講。你先給我講下什么是虛擬機棧(JVM Stacks)?

安琪拉: 要講虛擬機棧,我們先要知道棧是什么時候創建的?因為棧是線程私有的,棧的生命周期跟線程一致,所以記住棧是跟線程綁定在一起的就好了,棧中存的內容也是線程運行需要用到的,看我們上圖畫的,棧是由一個個棧幀組成的,棧幀里面存放局部變量表、操作棧、動態鏈接、方法返回地址。

面試官:詳細講講這四個玩意唄。

安琪拉: 我得寫段代碼演示一下。

  1. public static void main(String[] args) { 
  2.   String str = dance("angela", 3); 
  3.  
  4. private static String dance(String nameint count) { 
  5.   String result = name + ":" + count
  6.   return result; 

每個方法在執行的同時都會創建一個棧幀(Stack Frame),棧幀是方法運行時的基本數據單元,用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。

每一個方法從調用直至執行完成的過程,就對應著一個棧幀在虛擬機棧中入棧到出棧的過程。

局部變量表

main方法執行,會啟動一個線程,這時候主線程的虛擬棧中會壓入一個棧幀,調用dance 方法時再會壓入一個棧幀,存放name、count 等數據,name、count、result就是存在在局部變量表中,局部變量表是存放方法參數和局部變量的區域。

如果是非靜態方法,則在局部變量表 index[0] 位置上存儲的是方法所屬對象實例的引用,一個引用變量占 4 個字節,隨后存儲的是方法參數和局部變量。

操作數棧

操作數非常有意思,這里要講到程序執行原理,String result = name + ":" + count; 這行代碼分成好幾個步驟,簡化就是:取數、執行、存數。取name壓入操作數棧、取count壓入操作數棧,然后彈棧2次,執行拼接動作,把結果壓棧,存入局部變量表。

所以為什么說JVM 的執行引擎是基于棧的執行引擎,就是這個原因,這里的棧就是操作數棧。

后面的系列講到volatile的時候會介紹load、store等相關指令。

字節碼指令中的 STORE 指令就是將操作棧中計算完成的結果寫回局部變量表的存儲空間內。

再說動態鏈接和方法返回地址。

動態鏈接

每個棧幀中包含一個在常量池中對當前方法的引用, 目的是支持方法調用過程的動態連接。

可能有點繞,這部分深入說要講類的編譯、加載、鏈接的過程,Class 文件中存放了大量的符號引用,字節碼中的方法調用指令就是以常量池中指向方法的符號引用作為參數。這些符號引用一部分會在類加載階段或第一次使用時轉化為直接引用,這種轉化稱為靜態解析。另一部分將在每一次運行期間轉化為直接引用,這部分稱為動態連接,比如反射時invokedynamic 調用的,在運行時常量池存放的當前方法的引用是動態生成的,運行時可以動態鏈接。

方法返回地址

方法執行完,執行彈棧操作,彈出當前棧幀,方法返回地址就是方法執行之后(彈棧之后)下一步要執行的地址。

面試官:那本地方法棧和你說的虛擬機棧什么區別?

安琪拉: 本地方法棧(Native Method Stack)與虛擬機棧很相似,它們之間的區別不過是虛擬機棧為虛擬機執行 Java 方法(也就是字節碼)服務,而本地方法棧則為虛擬機使用到的 Native 方法服務。

比如Thread類的 start0 方法,就是Native方法。

  1. private native void start0(); 

Sun HotSpot 虛擬機直接把本地方法棧和虛擬機棧合二為一。

面試官:那 Java 堆呢?

安琪拉: Java 堆是被所有線程共享的一塊內存區域,在虛擬機啟動時創建,幾乎所有的對象實例都在這里分配內存。

面試官:關于Java堆的內存回收你能講一下嗎?

安琪拉: 堆是垃圾收集器(GC)管理的主要區域,因此很多時候也被稱做“GC堆”(Garbage Collected Heap)。從內存回收的角度來看,由于現在收集器基本都采用分代收集算法,所以 Java 堆中還可以細分為:新生代和老年代;再細致一點的有 Eden 空間、From Survivor 空間、To Survivor 空間等。

面試官:方法區呢?你知道JVM規范中JDK8之前和之后方法區的變化嗎?

安琪拉: 方法區是JVM規范中的說話,具體到不同JVM,有不同的實現,以最流行的Sun Hotspot為例,JDK8 之前,Hotspot 中方法區的實現是永久代(Perm),JDK8 開始使用元空間(Metaspace),以前永久代的字符串常量移至堆內存,其他內容移至元空間,元空間直接在本地內存分配。

面試官:方法區,或者說它的實現元空間是做什么的?

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

其實從底層物理存儲來講,跟堆是都是在內存中,Java 虛擬機規范把方法區描述為堆的一個邏輯部分,但是它卻有一個別名叫做 Non-Heap(非堆),目的應該是與 Java 堆區分開來。

面試官:為什么要使用元空間取代永久代的實現?

安琪拉: 主要有幾點原因:

  • 字符串存在永久代中,容易出現性能問題和內存溢出。由于 PermGen(永久代) 經常會溢出,引發 java.lang.OutOfMemoryError: PermGen 問題,所以 JVM 的開發者希望這一塊內存可以更靈活地被管理,不要再經常出現這樣的 OOM;
  • 移除 PermGen 可以促進 HotSpot JVM 與 JRockit VM 的融合,因為 JRockit 沒有永久代。

面試官:我看你圖中畫了元數據區的常量池,JVM中常量池能詳細講講嗎?

安琪拉: 首先明確一點,JVM中有三種常量池:

  • JVM常量池
  • 運行時常量池

字符串常量池

然后我們分別說下三種的區別和聯系,JVM常量池也叫class文件常量池,是class文件的一部分,用于保存編譯時確定的數據。

最關鍵的是編譯期三個字。

這個我們寫個Java程序,反編譯一下,看字節碼就知道了,如下圖,常量池的符號引用都列出來了。

#1 引用 #5.#25 什么意思呢,我們看#5 是 java/lang/Object, #25 是 #8:#9 // "":()V

其實就是調用初始化方法,引用方法名稱、返回值和繼承的類(任何類都繼承Object類,所以引用了 java/lang/Object)

常量池存了一堆符號引用。

在Class編譯加載后Class常量池加載到運行時常量池,運行時常量池存儲在元空間。JVM在執行某個類的時候,會經過加載、連接、初始化,而連接又包括驗證、準備、解析三個階段。而當類加載到內存中后,jvm就會將class常量池中的內容存放到運行時常量池中。

最后一個就是字符串常量池(String Constant Pool),很多人以為上圖反編譯的Class常量池中的字符串就存儲在字符串常量池,網上很多博客二者也搞混了,Class常量池只在編譯期間起作用,編譯期間確定了一堆引用關系,比如: 類和方法的全限定名、字段的名稱和描述符 、方法的名稱和描述符、文本字符串。

存儲在哪?

字符串常量池存儲在堆上,在JDK6.0及之前版本,字符串常量池是放在Perm Gen區(也就是方法區)中。

怎么存儲?

在HotSpot VM里實現常量池的是一個StringTable類,它是一個Hash表,默認值大小長度是1009;這個StringTable只有一份,被所有的類共享。字符串常量由一個一個字符組成,放在了StringTable上。

存儲什么?

字符串常量池中的字符串只存在一份!

  • 在JDK6.0及之前版本中,字符串常量池(String Pool)里放的都是字符串常量;
  • 在JDK7.0中,字符串常量池(String Pool)中也可以存放放于堆內的字符串對象的引用。

面試官:你說JDK7.0后字符串常量池(String Pool)中也可以存放放于堆內的字符串對象的引用,能舉個例子嗎?

安琪拉: 在JDK 7下,當執行String.intern();時,因為常量池中沒有“like”這個字符串,所以會在常量池中生成一個對堆中的“like”的引用(注意這里是引用 ,就是這個區別于JDK 1.6的地方。在JDK1.6下是生成原字符串的拷貝)

  1. public void stringTest() { 
  2.      String str1 = "follow"
  3.      String str2 = "angela"
  4.      String str3 = new String("like"); 
  5.      str3.intern(); 

如下圖,JDK1.6 String.intern()的操作,生成原字符串“like”的拷貝。

JDK1.7 如下圖:生成一個對堆中的“like”的引用

面試官:那你給我講講前面說的Java內存模型吧,最好能寫點實際工程代碼,說明Java內存模型在實際項目的用處。

安琪拉: 要不還是下次吧,今天有點晚了,你們公司離地鐵遠,我要早點去搶共享單車,這題就留給二面面試官吧。

面試官:也行,那你先回去吧,有消息我通知你。

 

安琪拉: 好嘞,回見。

 

責任編輯:武曉燕 來源: 安琪拉的博客
相關推薦

2021-06-07 17:51:29

并發高并發編程

2013-04-25 14:15:53

Windows PhoWindows PhoWindows Pho

2016-09-26 17:09:28

Java并發編程內存模型

2022-05-13 14:16:05

云計算

2018-03-26 21:31:30

深度學習

2021-07-03 17:44:34

并發高并發原子性

2019-06-28 10:55:04

預熱高并發并發高

2010-04-27 09:17:23

內存屏障JVM

2020-04-21 22:18:20

MESI內存CPU

2025-03-10 10:00:00

Ollama高并發

2020-08-18 13:50:04

Tomcat高并發Java

2021-02-26 13:08:27

Java高并發AQS

2018-12-18 14:08:01

Java內存volatile

2021-11-26 00:00:48

JVM內存區域

2017-02-20 07:47:04

緩存HASH高并發

2018-09-15 04:59:01

2021-05-14 14:52:59

高并發TPSQPS

2023-12-08 18:01:25

Java關鍵字

2010-02-03 14:10:28

C++內存邏輯區域
點贊
收藏

51CTO技術棧公眾號

亚洲不卡在线视频| 污污视频在线免费| 国产区在线视频| 天堂一区二区在线免费观看| 中文字幕亚洲欧美一区二区三区| 五月天婷婷影视| 黄色软件视频在线观看| 久久久久88色偷偷免费| 91精品视频在线看| 国产精品500部| 日韩电影免费网站| 精品久久久久久无| 熟妇人妻无乱码中文字幕真矢织江| 免费黄网站在线播放| 99精品视频一区二区三区| 国产美女精品视频| 国产成人无码精品久久久久| 91综合在线| 亚洲男人天堂2024| 久久久久亚洲av片无码v| 综合在线影院| 午夜精品久久久久久久99水蜜桃 | 少妇精品久久久一区二区| 欧美一级片在线观看| 午夜dv内射一区二区| 2018av在线| 亚洲欧洲综合另类在线| 日韩在线第一区| 婷婷五月综合久久中文字幕| 国产麻豆精品一区二区| 国产精品青草久久久久福利99| 日本熟妇一区二区| 亚洲色图网站| 色老头一区二区三区在线观看| 国产乱了高清露脸对白| 精品伊人久久| 欧美日韩aaaaaa| 亚欧在线免费观看| 女海盗2成人h版中文字幕| 亚洲一二三四久久| 大陆极品少妇内射aaaaaa| 色三级在线观看| 亚洲国产成人一区二区三区| 欧美不卡三区| 欧美孕妇性xxxⅹ精品hd| av资源站一区| 蜜桃av久久久亚洲精品| 天天操天天干天天插| 成人免费va视频| 国产精品日韩欧美一区二区| 亚洲欧美另类视频| 国产成人啪免费观看软件| 亚洲自拍中文字幕| 国产视频在线观看视频| 狠狠色丁香婷婷综合| 成人av在线亚洲| 国产免费av电影| 国产精品香蕉一区二区三区| 成人免费在线视频网站| 国产色综合视频| 国产精品系列在线播放| 91视频8mav| 亚洲第一页在线观看| 国产一区日韩二区欧美三区| 亚洲va欧美va国产综合剧情| 国产免费福利视频| 国产麻豆视频精品| 国产精品国模大尺度私拍| 囯产精品一品二区三区| 99国产欧美久久久精品| 欧美日韩在线一区二区三区| 国产爆初菊在线观看免费视频网站 | 欧美另类69xxxxx| 一区二区三区视频免费在线观看| 成人国产精品久久久网站| 精品国内自产拍在线观看视频| 日韩久久免费视频| 日韩精品无码一区二区三区久久久| 精品一区二区三区的国产在线观看| 中文一区二区视频| 欧美黄色免费看| 妖精视频成人观看www| 日本欧美国产在线| 国产精品自拍电影| 成人免费毛片嘿嘿连载视频| 热re99久久精品国产99热| 香蕉视频免费在线播放| 亚洲一区影音先锋| 免费男同深夜夜行网站| 超碰国产精品一区二页| 亚洲国产日韩一区| 人妻少妇无码精品视频区| 伊人久久大香线| 91成人天堂久久成人| 一级特黄aaa大片在线观看| 国产ts人妖一区二区| 欧美日韩在线不卡一区| 性欧美video高清bbw| 色婷婷综合视频在线观看| 国产精品嫩草影视| 最新精品国偷自产在线| 欧美成人精品一区二区三区| 91video| 国产一区二区三区四区五区美女| 国产主播一区二区三区四区| 午夜激情视频在线观看| 亚洲成av人**亚洲成av**| 超碰在线播放91| 加勒比久久高清| 伦伦影院午夜日韩欧美限制| 综合网在线观看| 国产乱码精品一区二区三| 日韩福利在线| 国产福利片在线观看| 777精品伊人久久久久大香线蕉| 中文字幕免费高清视频| 91精品观看| 国产日韩欧美成人| 你懂的视频在线| 亚洲va在线va天堂| 毛片毛片毛片毛片毛| 日韩中字在线| 日韩av快播网址| 日本高清视频在线| 亚洲另类在线视频| 视色视频在线观看| 九一国产精品| 91精品国产乱码久久久久久久久| 国产男男gay体育生网站| 中文字幕不卡在线| 黄色国产精品视频| 天天躁日日躁狠狠躁欧美巨大小说 | 中文字幕有码在线视频| 欧美日韩一区在线观看| 白丝女仆被免费网站| 亚洲精品男同| 国产欧美日韩伦理| 免费网站在线观看人| 欧美一区二区三区在线电影| 91n在线视频| 精一区二区三区| 久久av秘一区二区三区| 欧美一级网址| 日韩一区二区三区xxxx| 亚洲图片欧美在线| 国产精品狼人久久影院观看方式| 国产又黄又猛又粗又爽的视频| 久久成人高清| 国产精品第100页| 超碰免费在线| 欧美日韩午夜在线视频| 99久久精品久久亚洲精品| 久久国产精品99精品国产 | www.超碰97| 国产亚洲精品自拍| 欧美激情导航| 蜜桃视频成人m3u8| 在线国产精品播放| 中文字幕在线网站| 亚洲视频 欧洲视频| 婷婷激情5月天| 国产精品av久久久久久麻豆网| 97久久人人超碰caoprom欧美| 四虎影视成人| 亚洲精品久久久久中文字幕欢迎你 | 免费黄色在线| 日韩欧美一区二区免费| 欧美黑人一级片| av在线不卡免费看| 成人精品视频一区二区| 欧美超碰在线| 国产传媒欧美日韩| 极品视频在线| 中国china体内裑精亚洲片| 一级黄色大片免费| 一区二区在线观看免费 | 国产精品视频看| 亚洲一区二区福利视频| 亚洲高清不卡| 天堂资源在线亚洲资源| 国产激情精品一区二区三区| 97人人爽人人喊人人模波多| 久草视频在线看| 69av一区二区三区| 日韩av片在线播放| 欧美国产在线观看| 26uuu国产| 久久久久久一区二区| 午夜在线视频免费观看| 伦理一区二区三区| 国产精品揄拍500视频| 欧美hdxxxxx| 中文字幕欧美国内| 日日夜夜精品免费| 欧美日韩免费在线视频| 九热这里只有精品| 国产精品日日摸夜夜摸av| 97精品人妻一区二区三区蜜桃| 免费在线观看不卡| 无码人妻少妇伦在线电影| 欧美亚洲激情| 国产在线精品一区二区三区| 日本成人一区二区| 欧美一级黄色网| 中文在线手机av| 亚洲视频在线看| 午夜精品无码一区二区三区| 91久久精品国产91性色tv| 九九视频免费在线观看| 亚洲国产高清在线观看视频| 国产精品无码在线| 国产一区二区三区综合| 美女网站色免费| 亚洲一区二区三区四区五区午夜| 中文字幕不卡每日更新1区2区| 美女久久久久| 久久99精品久久久久久水蜜桃| 欧美成年网站| 国产在线一区二区三区| 欧美成人h版| 97在线视频国产| 欧美xxxx性xxxxx高清| 久久视频国产精品免费视频在线| 韩国三级在线观看久| 亚洲精品福利在线| 黑人操亚洲女人| 日韩欧美中文一区二区| 一级黄在线观看| 欧美色图片你懂的| 中文字幕精品无| 欧美日韩国产丝袜美女| 久久精品视频日本| 亚洲精品高清在线观看| 999精品在线视频| 亚洲国产高清不卡| 久久日免费视频| 国产日产欧美一区二区视频| 欧美老熟妇乱大交xxxxx| 99精品视频免费在线观看| 91精品啪在线观看国产| 国产福利不卡视频| 亚洲欧美一区二区三区不卡| 狠狠色丁香婷综合久久| 九九久久久久久| 国产精品影音先锋| 无套内谢丰满少妇中文字幕 | 欧美黄色一级视频| av电影一区二区三区| 99久久亚洲精品蜜臀| 中文字幕99| 欧美日韩在线大尺度| 一本色道久久88亚洲精品综合| 五月婷婷六月综合| 超碰在线免费观看97| 91高清一区| www.亚洲成人网| 亚洲精品孕妇| www黄色在线| 日本麻豆一区二区三区视频| 亚欧激情乱码久久久久久久久| 美女久久久精品| 亚洲最大天堂网| 国产一区福利在线| 波多野吉衣在线视频| 成人av在线观| 一级黄色性视频| 亚洲欧洲www| 久久久久久国产精品免费播放| 亚洲国产sm捆绑调教视频 | 欧美蜜桃一区二区三区| 国产精品爽爽久久久久久| 日韩欧美高清一区| 亚州av在线播放| 在线精品91av| 一色桃子av在线| 88国产精品欧美一区二区三区| 日韩三级影视| 成人有码在线视频| 精品国产一区二区三区成人影院| 日本最新一区二区三区视频观看| 91蜜臀精品国产自偷在线| 日韩一级特黄毛片| 欧美亚洲三级| 中文字幕在线视频精品| 成人免费黄色在线| 亚洲精品成人av久久| 夜夜嗨av一区二区三区四季av| 国产欧美日韩另类| 欧美理论片在线| 手机看片福利在线| 中文字幕亚洲一区在线观看| 黄页网站大全在线免费观看| 日本最新高清不卡中文字幕| www.久久久久爱免| 国产在线一区二区三区欧美 | 日韩黄色短视频| 青青草91视频| 中国免费黄色片| 国产精品美女久久久久av爽李琼| 国产成人精品av久久| 欧美男人的天堂一二区| 色播色播色播色播色播在线 | 中文在线免费视频| 国产欧美精品xxxx另类| 日韩高清影视在线观看| 一区二区三区一级片| 久久一区中文字幕| 亚洲少妇一区二区三区| 国产精品久久久久国产精品日日| 日韩av一区二区在线播放| 欧美一区二区三区四区高清| 欧美精品少妇| 91国产美女在线观看| 美女精品久久| 亚洲一区二三| 天堂久久一区二区三区| 中文字幕第3页| 一区二区三区欧美| 在线观看中文字幕码| 亚洲欧美国产精品专区久久| bl视频在线免费观看| 91久久极品少妇xxxxⅹ软件| 手机亚洲手机国产手机日韩| 无码人妻丰满熟妇区五十路百度| 风流少妇一区二区| 国产精品久久久久久久精| 欧美裸体一区二区三区| 成人在线免费观看| 国产成人精品av在线| 蜜臀av一区| 男人日女人逼逼| 成人手机电影网| 国产在线视频你懂的| 日韩欧美亚洲另类制服综合在线| 免费黄色网址在线观看| 成人h视频在线观看播放| 日韩系列欧美系列| 久久久国产欧美| 国产欧美精品在线观看| 五月天婷婷导航| 亚洲欧美日韩中文在线制服| 女厕盗摄一区二区三区| 久久伦理网站| 久久人人超碰| 人人爽人人爽人人片| 色狠狠桃花综合| 成人在线播放视频| 国产精品吴梦梦| 99热国内精品永久免费观看| 亚洲一区二区福利视频| 亚洲免费观看高清完整版在线| 一卡二卡三卡在线| 久久精品99久久久香蕉| 婷婷久久综合九色综合99蜜桃| 亚洲一区二区不卡视频| 精品一区二区三区欧美| 国产黄在线免费观看| 日韩一区二区三| 日本在线视频中文有码| 国产日韩欧美二区| 午夜亚洲性色福利视频| x88av在线| 欧美人动与zoxxxx乱| 超碰免费在线播放| 国产精品免费看一区二区三区| 亚洲成人资源| 日韩一区二区a片免费观看| 欧美色精品在线视频| 黄色成人影院| 国产伦精品一区二区三区高清版| 国产精品美女久久久| 一级特黄曰皮片视频| 欧美精品v国产精品v日韩精品| 自由的xxxx在线视频| 黄色91av| 麻豆精品在线看| 久草资源在线视频| 国产视频精品久久久| 久久久加勒比| 国产在线视频在线| 久久久久久久综合狠狠综合| 一级黄色大片免费| 亚州欧美日韩中文视频| 精品高清在线| 日本wwww色| 色综合天天视频在线观看 | 91爱视频在线| 91精品综合久久久久久久久久久 | 免费国产羞羞网站视频| 国产极品精品在线观看| 亚洲女同一区| 97超碰在线免费观看| 欧美一区二区视频在线观看| 新版的欧美在线视频| 99热一区二区三区| 久久美女艺术照精彩视频福利播放| 一级片在线观看视频| 欧美在线视频免费观看| 亚洲国产精品综合久久久| 成年人网站免费看|