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

Java后端技術(shù):探究Java虛擬機(jī)棧

云計(jì)算 虛擬化
熟悉 Java 的同學(xué)應(yīng)該都知道了,JVM 是基于棧的。但是這個(gè)“棧” 具體指的是什么?難道就是虛擬機(jī)棧?想要回答這個(gè)問題我們先要從虛擬機(jī)棧的結(jié)構(gòu)談起。

熟悉 Java 的同學(xué)應(yīng)該都知道了,JVM 是基于棧的。但是這個(gè)“棧” 具體指的是什么?難道就是虛擬機(jī)棧?想要回答這個(gè)問題我們先要從虛擬機(jī)棧的結(jié)構(gòu)談起。

[[328790]]

虛擬機(jī)棧

何為虛擬機(jī)棧

虛擬機(jī)棧的棧元素是棧幀,當(dāng)有一個(gè)方法被調(diào)用時(shí),代表這個(gè)方法的棧幀入棧;當(dāng)這個(gè)方法返回時(shí),其棧幀出棧。因此,虛擬機(jī)棧中棧幀的入棧順序就是方法調(diào)用順序。什么是棧幀呢?棧幀可以理解為一個(gè)方法的運(yùn)行空間。它主要由兩部分構(gòu)成,一部分是局部變量表,方法中定義的局部變量以及方法的參數(shù)就存放在這張表中;另一部分是操作數(shù)棧,用來存放操作數(shù)。我們知道,Java 程序編譯之后就變成了一條條字節(jié)碼指令,其形式類似匯編,但和匯編有不同之處:匯編指令的操作數(shù)存放在數(shù)據(jù)段和寄存器中,可通過存儲(chǔ)器或寄存器尋址找到需要的操作數(shù);而 Java 字節(jié)碼指令的操作數(shù)存放在操作數(shù)棧中,當(dāng)執(zhí)行某條帶 n 個(gè)操作數(shù)的指令時(shí),就從棧頂取 n 個(gè)操作數(shù),然后把指令的計(jì)算結(jié)果(如果有的話)入棧。因此,當(dāng)我們說 JVM 執(zhí)行引擎是基于棧的時(shí)候,其中的“棧”指的就是操作數(shù)棧。舉個(gè)簡單的例子對(duì)比下匯編指令和 Java 字節(jié)碼指令的執(zhí)行過程,比如計(jì)算 1 + 2,在匯編指令是這樣的:

  1. mov ax, 1 ;把 1 放入寄存器 ax 
  2. add ax, 2 ;用 ax 的內(nèi)容和 2 相加后存入 ax 

而 JVM 的字節(jié)碼指令是這樣的:

  1. iconst_1 //把整數(shù) 1 壓入操作數(shù)棧 
  2. iconst_2 //把整數(shù) 2 壓入操作數(shù)棧 
  3. iadd //棧頂?shù)膬蓚€(gè)數(shù)相加后出棧,結(jié)果入棧 

由于操作數(shù)棧是內(nèi)存空間,所以字節(jié)碼指令不必?fù)?dān)心不同機(jī)器上寄存器以及機(jī)器指令的差別,從而做到了平臺(tái)無關(guān)。

注意,局部變量表中的變量不可直接使用,如需使用必須通過相關(guān)指令將其加載至操作數(shù)棧中作為操作數(shù)使用。比如有一個(gè)方法 void foo(),其中的代碼為:int a = 1 + 2; int b = a + 3;,編譯為字節(jié)碼指令就是這樣的:

  1. iconst_1 //把整數(shù) 1 壓入操作數(shù)棧 
  2. iconst_2 //把整數(shù) 2 壓入操作數(shù)棧 
  3. iadd //棧頂?shù)膬蓚€(gè)數(shù)出棧后相加,結(jié)果入棧;實(shí)際上前三步會(huì)被編譯器優(yōu)化為:iconst_3 
  4. istore_1 //把棧頂?shù)膬?nèi)容放入局部變量表中索引為 1 的 slot 中,也就是 a 對(duì)應(yīng)的空間中 
  5. iload_1 // 把局部變量表索引為 1 的 slot 中存放的變量值(3)加載至操作數(shù)棧 
  6. iconst_3  
  7. iadd //棧頂?shù)膬蓚€(gè)數(shù)出棧后相加,結(jié)果入棧 
  8. istore_2 // 把棧頂?shù)膬?nèi)容放入局部變量表中索引為 2 的 slot 中,也就是 b 對(duì)應(yīng)的空間中 
  9. return // 方法返回指令,回到調(diào)用點(diǎn) 

需要說明的是,局部變量表以及操作數(shù)棧的容量的最大值在編譯時(shí)就已經(jīng)確定了,運(yùn)行時(shí)不會(huì)改變。并且局部變量表的空間是可以復(fù)用的,例如,當(dāng)指令的位置超出了局部變量表中某個(gè)變量 a 的作用域時(shí),如果有新的局部變量 b 要被定義,b 就會(huì)覆蓋 a 在局部變量表的空間。

盜用別人的圖以讓大家對(duì)虛擬機(jī)棧有個(gè)直觀的認(rèn)識(shí)(其中小字體 Stack 指的的是虛擬機(jī)棧,F(xiàn)rame 是棧幀,Local variables 是局部變量表,Operand Stack 是操作數(shù)棧):

 

Java后端精選技術(shù):探究Java虛擬機(jī)棧

 

由虛擬機(jī)棧引出的問題

看完上面的代碼大家可能會(huì)有幾點(diǎn)疑惑:什么是 slot?那些指令是什么意思?為什么 a 對(duì)應(yīng)的 slot 的索引值不是從零開始的,它明明是第一個(gè)定義的變量啊?

對(duì)于這些問題我們一個(gè)個(gè)來解決。

什么是 slot

首先什么是 slot?slot 是局部變量表中的空間單位,虛擬機(jī)規(guī)范中有規(guī)定,對(duì)于 32 位之內(nèi)的數(shù)據(jù),用一個(gè) slot 來存放,如 int,short,float 等;對(duì)于 64 位的數(shù)據(jù)用連續(xù)的兩個(gè) slot 來存放,如 long,double 等。引用類型的變量 JVM 并沒有規(guī)定其長度,它可能是 32 位,也有可能是 64 位的,所以既有可能占一個(gè) slot,也有可能占兩個(gè) slot。

JVM 字節(jié)碼指令

第二個(gè)問題,那些指令是什么意思?

指令格式

首先我們要理解 Java 指令的格式,Java 的指令以字節(jié)為單位,也就是一個(gè)字節(jié)代表一條指令。比如 iconst_1 就是一條指令,它占一個(gè)字節(jié),那么自然 Java 指令不會(huì)超過 256 條。實(shí)際上 Java 指令目前定義了 200 多條。指令雖然是一個(gè)字節(jié),但是它也可以帶自己的操作數(shù)。JVM 中有這樣一條指令 putstatic,其作用是給特定的的靜態(tài)字段賦值。但是給哪個(gè)字段賦值呢?僅僅通過這條指令并不能說明,那么只有通過操作數(shù)來指定了。緊跟在 putstatic 后面的兩個(gè)字節(jié)就是它的操作數(shù),這個(gè)操作數(shù)是一個(gè)索引值,指向運(yùn)行時(shí)常量池中該靜態(tài)字段對(duì)應(yīng)的符號(hào)引用。由于符號(hào)引用包含了該字段的基本信息,如所屬類、簡單名稱以及描述符,因此 putstatic 指令就知道是給哪個(gè)類的哪個(gè)字段賦值了。

指令的操作數(shù)分兩種:一種是嵌入在指令中的,通常是指令字節(jié)后面的若干個(gè)字節(jié);另一種是存放在操作數(shù)棧中的。為了區(qū)別,我們把前者叫做嵌入式操作數(shù),把后者叫做棧內(nèi)操作數(shù)。這兩者的區(qū)別是:嵌入式操作數(shù)是在編譯時(shí)就已經(jīng)確定的,運(yùn)行時(shí)不會(huì)改變,它和指令一樣存放于類文件方法表的 Code 屬性中;而操作數(shù)是運(yùn)行時(shí)確定的,即程序在執(zhí)行過程中動(dòng)態(tài)生成的。拿 putstatic 指令來說,它有一個(gè)嵌入式操作數(shù),該操作數(shù)是一個(gè)索引值(前面已經(jīng)提到),它由兩個(gè)字節(jié)組成,緊跟在 putstatic 對(duì)應(yīng)的字節(jié)之后;同時(shí)它還有一個(gè)棧內(nèi)操作數(shù),位于操作數(shù)棧的棧頂,這個(gè)操作數(shù)就是要賦給靜態(tài)字段的值,其對(duì)應(yīng)的字節(jié)數(shù)根據(jù)靜態(tài)字段的類型決定。如果靜態(tài)字段的類型是 short、int、boolean、char 或者 byte,那么這個(gè)操作數(shù)就必須是 int 類型,即由棧頂?shù)?4 個(gè)字節(jié)組成;如果是 float、double 或者 long 類型,那么操作數(shù)就是相應(yīng)的類型,即由棧頂?shù)?4 個(gè)、8 個(gè) 或者 8 個(gè) 字節(jié)組成;如果靜態(tài)字段是引用類型,那么這個(gè)操作數(shù)的類型也必須是引用類型,即由棧頂?shù)?8 個(gè)字節(jié)組成。

再舉一個(gè)例子。iconst_ 代表了一個(gè)指令族,它的意思是把整數(shù) i 放入操作數(shù)棧中,i 的范圍是(m1, 0, 1, 2, 3, 4, 5),其中 m1 代表的是 -1。注意,這里的 i 并不是指令的操作數(shù)(即非嵌入式操作數(shù),也非棧內(nèi)操作數(shù)),如 iconst_1、iconst_2 和 iconst_3 都是由一個(gè)字節(jié)組成的字節(jié)碼指令。我們可以把 i 可以看作是指令的 “隱含操作數(shù)”,即指令本身就蘊(yùn)含了操作數(shù)。如果整數(shù) i 超過 [-1, 5] 這個(gè)范圍,就不能用 iconst_ 表示了,因?yàn)閮H一個(gè)字節(jié)的字節(jié)碼指令不可能蘊(yùn)含所有的整數(shù)。此時(shí)就需要 bipush 這條指令了,這條指令有一個(gè)嵌入式操作數(shù),由一個(gè)字節(jié)組成,用來表示要放入棧頂?shù)哪莻€(gè)整數(shù),該整數(shù)放入棧頂時(shí)通過擴(kuò)展符號(hào)位變?yōu)?32 位的整型。但是一個(gè)字節(jié)也表示不了所有的整數(shù),如果整數(shù)值超過一個(gè)字節(jié)所能表示的范圍,就只能通過 ldc 這條指令了,這條指令帶有一個(gè)字節(jié)的嵌入式操作數(shù),它代表的是一個(gè)指向運(yùn)行時(shí)常量池中 Constant_Integer_info 類型常量的索引,通過索引的方式引用運(yùn)行時(shí)常量池中的整數(shù),再大的整數(shù)也不怕了。

閱讀指令文檔

授之以魚不如授之以漁,在這里不可能將所有的指令都講解一番,因此我和大家分享一下如何閱讀 oracle 官網(wǎng)關(guān)于字節(jié)碼指令的文檔吧。文檔的地址是:

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html

我們拿 astore 指令來說: 關(guān)于它的文檔描述如下:

 

Java后端精選技術(shù):探究Java虛擬機(jī)棧

 

astore 指令

說明和翻譯:

  • 第一行的粗體字是指令的名稱;
  • Operation 是指令的功能:把引用存入本地變量中;
  • Format 是指令的格式:它的第一個(gè)字節(jié)是指令,名稱為 astore,第二個(gè)字節(jié)是指令的嵌入式操作數(shù),名稱為 index;Forms 指的是指令的十進(jìn)制(十六進(jìn)制)碼,astore 的十進(jìn)制(十六進(jìn)制)碼是 58(0x3a);
  • Operation Stack 是指令執(zhí)行前后的操作數(shù)棧的狀態(tài):第一行代表的是指令執(zhí)行前操作數(shù)的狀態(tài),第二行是指令執(zhí)行后操作數(shù)棧的狀態(tài),箭頭是棧頂方向。astore 執(zhí)行前棧頂是對(duì)象引用 objectRef,它是 astore 的棧內(nèi)操作數(shù),執(zhí)行后 objectRef 被彈出并存入局部變量表中;
  • Description 是對(duì)這條指令的描述:index 是無符號(hào)字節(jié),這個(gè) index 必須指向當(dāng)前棧幀的局部變量表的某個(gè)位置。操作數(shù)棧的棧頂?shù)哪莻€(gè)引用值必須是 returnAddress(方法返回地址)或者是 reference (對(duì)象引用)。這個(gè)引用會(huì)被彈出,其值會(huì)被存入局部變量表中索引為 index 的 slot 中;
  • Notes 是注意事項(xiàng):實(shí)現(xiàn) Java 中的 finally 子句時(shí),astore 指令使用的操作數(shù)類型是一個(gè) returnAddress,與 astore 對(duì)應(yīng)的 aload 指令(將局部變量表的的引用值壓棧)不能將類型為 returnAddress 類型的值加載到操作數(shù)棧,而只能是 reference 類型。aload 和 astore 這種不對(duì)稱的設(shè)計(jì)是有意而為之的。astore 指令可以和 wide 指令配合使用以用無符號(hào)雙字節(jié)類型的索引來獲取局部變量表中的變量。

局部變量表的第一個(gè)變量

從 Java 語言的層面講,靜態(tài)方法和實(shí)例方法的本質(zhì)區(qū)別在于是否是對(duì)象所共享的。而從 JVM 的角度來看,方法(無論靜態(tài)方法還是實(shí)例方法)其實(shí)都是對(duì)象共享的,實(shí)例變量才是對(duì)象私有的。對(duì) JVM 而言,靜態(tài)方法和實(shí)例方法的本質(zhì)區(qū)別在于是否需要和具體對(duì)象關(guān)聯(lián):靜態(tài)方法可以通過類名來調(diào)用,它不需要和具體對(duì)象關(guān)聯(lián);而實(shí)例方法必須通過對(duì)象來進(jìn)行調(diào)用,它需要和具體對(duì)象關(guān)聯(lián)。那么,實(shí)例方法和具體對(duì)象是如何產(chǎn)生關(guān)聯(lián)的呢?其實(shí)很簡單,編譯器在編譯時(shí)會(huì)將方法接收者作為一個(gè)隱含參數(shù)傳入該實(shí)例方法,這個(gè)參數(shù)在方法中有一個(gè)很熟悉的名字,叫做 “this”。之所以實(shí)例方法可以訪問該類的實(shí)例變量和其它實(shí)例方法,正是因?yàn)樗?“this” 這個(gè)隱含參數(shù)。舉個(gè)例子,類 A 中的某個(gè)方法 b 需要訪問實(shí)例變量 x,由于實(shí)例變量是對(duì)象私有的,如果 b 是靜態(tài)方法,由于它沒有具體對(duì)象的引用,它并不知道該訪問哪個(gè)對(duì)象的實(shí)例變量 x;如果 b 是實(shí)例方法,通過隱含參數(shù) this 就能確定要訪問的實(shí)例變量是 this.x。那么,為什么靜態(tài)方法也不能調(diào)用該類的實(shí)例方法呢?本質(zhì)原因也是沒有 this 引用。因?yàn)檎{(diào)用實(shí)例方法的前提是要傳入一個(gè)隱含參數(shù),實(shí)例方法本來就有這個(gè)引用,所以能夠把它作為隱含參數(shù)傳入另一個(gè)實(shí)例方法;靜態(tài)方法沒有 this 引用,無法給實(shí)例方法提供指向方法接收者的隱含參數(shù),因此不能調(diào)用實(shí)例方法。

如果看懂了上面說的那些,第三個(gè)問題也就迎刃而解了。因?yàn)槲覀兌x的方法是 void foo(),它是實(shí)例方法,因此會(huì)有一個(gè)指向具體對(duì)象的隱含參數(shù) this,this 就存放在局部變量表的第一個(gè)位置,即存放在索引為 0 的 slot 中,又由于它的作用域從方法開始一直到方法結(jié)束,因此它在局部變量表中的位置不會(huì)被其他變量覆蓋,從而使得我們?cè)诜椒ㄖ卸x的變量只能放在局部變量表后面的位置中。需要注意的是,如果方法有參數(shù)(非隱含參數(shù)),那么參數(shù)會(huì)按順序緊接著 this 存放在局部變量表中,由于參數(shù)作用域也是整個(gè)方法體,所以方法中定義的局部變量就只能放在參數(shù)后面了。總的來說局部變量表中變量的存放順序?yàn)椋? this(如果是實(shí)例方法)=> 參數(shù)(如果有的話)=> 定義的局部變量(如果有的話)。

關(guān)于虛擬機(jī)棧就講這么多了,Java 虛擬機(jī)是一個(gè)完整的知識(shí)體系,僅僅了解虛擬機(jī)棧是不夠的,這里沒有細(xì)講的關(guān)于虛擬機(jī)的其它知識(shí),如內(nèi)存模型、運(yùn)行時(shí)常量池、類加載模型等,還需讀者自己學(xué)習(xí)掌握。這篇文章權(quán)起激發(fā)大家的學(xué)習(xí) JVM 興趣的作用,同時(shí)也作為個(gè)人的學(xué)習(xí)記錄和知識(shí)總結(jié)。之后可能還會(huì)寫些 JVM 其它方面的總結(jié)性文章和大家分享。

參考書籍 :

《深入理解 Java 虛擬機(jī)》周志明 著

Java 虛擬機(jī)規(guī)范

 

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2024-03-26 07:30:07

Java虛擬機(jī)源文件

2023-07-27 06:59:30

Native線程數(shù)據(jù)結(jié)構(gòu)

2020-06-03 19:07:49

Java虛擬機(jī)JVM

2021-04-14 18:58:01

虛擬機(jī) Java內(nèi)存

2010-09-17 15:12:57

JVMJava虛擬機(jī)

2013-10-14 17:54:51

2018-10-25 09:04:56

Java虛擬機(jī)JVM

2017-03-08 14:46:45

2020-05-08 16:55:48

Java虛擬機(jī)JVM

2011-06-22 13:35:55

JVM

2009-06-12 16:15:42

死鎖Java虛擬機(jī)

2018-06-19 15:39:21

HeapJava虛擬機(jī)

2020-06-03 14:43:26

Java虛擬機(jī)JVM

2009-06-12 15:41:01

Java虛擬機(jī)

2011-12-28 13:24:47

JavaJVM

2012-05-18 10:22:23

2009-06-22 14:04:00

2018-10-17 11:05:00

Java開發(fā)代碼

2017-03-21 15:30:02

虛擬機(jī)DockerHyper

2012-11-14 09:57:46

JavaJava虛擬機(jī)JVM
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产极品在线播放| 一级少妇精品久久久久久久| 蜜桃视频网站在线观看| 国产剧情av麻豆香蕉精品| 欧美日韩国产二区| 欧美色图亚洲激情| 国产精品久久久久久久久久辛辛| 亚洲一线二线三线视频| 蜜桃视频在线观看91| 91国偷自产中文字幕久久| 狠狠噜噜久久| 一本色道久久88亚洲综合88| 人妻少妇偷人精品久久久任期| 成人免费网站观看| 中文字幕一区日韩精品欧美| 国产精品美女诱惑| 老熟妇一区二区三区啪啪| 欧美精品麻豆| 亚洲丝袜在线视频| 无码人妻一区二区三区精品视频 | 欧美日韩国产91| 爱爱免费小视频| 日韩免费精品| 欧美日韩和欧美的一区二区| 人妻少妇精品久久| 老司机精品影院| 97se亚洲国产综合在线| 91久久久久久久久久久| 一级做a爰片久久毛片| 欧美日韩国产综合网| 一区二区三区四区视频| 中文字幕在线播放一区| 欧美黄色一级| 欧美日韩性生活| 黑森林福利视频导航| 日本h片在线| 中文字幕一区二区三区色视频| 国产日本一区二区三区| www香蕉视频| 精品一区二区三区日韩| 国产黑人绿帽在线第一区| 日韩aaaaaa| 激情丁香综合| 欧美国产精品人人做人人爱| 黄色香蕉视频在线观看| 精品久久成人| 亚洲人成自拍网站| 日本丰满少妇裸体自慰| 国产 日韩 欧美 综合 一区| 日韩三区在线观看| 一区二区三区四区毛片| 青草综合视频| 欧美日韩一区二区三区高清 | 欧美日韩在线一二三| 天天色综合久久| 成人av网站在线观看| 成人黄动漫网站免费| 国产v片在线观看| 国产一区二区久久| 91欧美激情另类亚洲| 国产女人18毛片18精品| 国产又粗又猛又爽又黄91精品| 国产日本欧美一区| 91影院在线播放| 看片网站欧美日韩| 成人动漫网站在线观看| 99国产精品99| 福利一区福利二区| 黄色99视频| 欧洲亚洲精品视频| 国产三级精品视频| 亚洲欧美成人一区| 精产国品自在线www| 亚洲日本在线观看| 永久免费网站视频在线观看| 亚洲国产精品精华素| 亚洲亚洲人成综合网络| 日韩精品 欧美| 亚洲国产精品一区二区第一页| 911国产在线| 亚洲电影影音先锋| 欧美激情视频网站| 日韩欧美亚洲一区二区三区| 国产精品主播| 国产精品爽爽爽| 国产jzjzjz丝袜老师水多| 国产东北露脸精品视频| 久久久久久久久久久久久久久久av | 三级电影在线看| 国产亚洲一区| 欧美乱妇高清无乱码| www.日本精品| 麻豆专区一区二区三区四区五区| 亚洲综合精品伊人久久| 午夜在线视频免费| 中文字幕一区二区三区乱码在线| www国产无套内射com| 麻豆网站免费在线观看| 欧美日韩国产影片| 秘密基地免费观看完整版中文| 天堂一区二区三区四区| xxxxx成人.com| 日韩av一区二区在线播放| 日本欧美一区二区在线观看| 91九色蝌蚪成人| 成人高清免费观看mv| 亚洲午夜私人影院| 一本岛在线视频| 国产精品15p| www.亚洲一区| 天天做天天爱夜夜爽| 激情久久五月天| 欧美1o一11sex性hdhd| 在线观看免费视频你懂的| 色综合色狠狠综合色| 国产xxx在线观看| 97精品视频在线看| 欧美在线视频导航| 亚洲精品一区二区三区区别| 国产精品人妖ts系列视频| 免费一级特黄特色毛片久久看| 亚洲影视资源| 亚洲无限av看| 日韩精品在线观看免费| 国产精品亚洲一区二区三区妖精| 视频在线99re| 黑人巨大精品| 亚洲福利在线观看| 亚洲a∨无码无在线观看| 亚洲欧美日本国产专区一区| 国产乱码精品一区二区三区日韩精品| 日本福利在线| 欧美午夜片在线观看| 少妇精品一区二区三区| 亚洲精品123区| 国产精品国产精品国产专区蜜臀ah | 自拍偷拍免费精品| 欧美a∨亚洲欧美亚洲| 成人在线一区二区三区| 日韩不卡视频一区二区| 在线欧美激情| 日韩视频免费在线| 国产精品第6页| 国产亚洲一区二区三区在线观看| 国产成人精品视频免费看| 国内精品麻豆美女在线播放视频 | 国产亚洲精品精品国产亚洲综合| 亚洲欧美一区二区三区情侣bbw| 精品91久久久| 972aa.com艺术欧美| av日韩一区二区三区| 粉嫩的18在线观看极品精品| 欧美精品www在线观看| 亚洲国产一二三区| 亚洲午夜免费福利视频| 99久久久无码国产精品性波多| 国产精品第十页| 成人欧美一区二区三区在线观看| 手机av免费在线| 亚洲精品一区二区三区四区高清| 国产一级视频在线播放| 北条麻妃国产九九精品视频| 国产精品裸体瑜伽视频| 日本午夜精品久久久| 国产97在线亚洲| а√天堂中文在线资源bt在线| 欧美亚洲动漫精品| 青青青视频在线免费观看| 狠狠久久亚洲欧美| 久久久久久久久网| 韩国女主播一区二区三区| 4438全国成人免费| 国产高清在线| 7777女厕盗摄久久久| 欧美日韩免费一区二区| 不卡视频免费播放| 麻豆av免费在线| 久久免费av| 俄罗斯精品一区二区| 国产欧美一区二区三区精品酒店| 中文字幕日韩电影| 99精品视频免费看| 欧美日韩国产丝袜美女| 极品久久久久久久| 国产麻豆视频一区二区| 熟女少妇在线视频播放| 欧美亚洲高清| 91免费看网站| 欧美羞羞视频| 不卡毛片在线看| 三级做a全过程在线观看| 欧美日韩一区二区在线观看| 麻豆疯狂做受xxxx高潮视频| 91在线云播放| 99精品视频免费版的特色功能| 亚洲伦伦在线| 亚洲视频小说| 群体交乱之放荡娇妻一区二区| 国产精品欧美日韩| h片在线观看| 日韩在线视频免费观看高清中文| 成人爽a毛片一区二区| 日韩欧美在线视频观看| 国产稀缺精品盗摄盗拍| 久久人人爽爽爽人久久久| 中文字幕在线视频一区二区三区| 先锋影音国产一区| 成人免费看片视频在线观看| 蜜臀91精品国产高清在线观看| 91精品中国老女人| 成人性生交大片免费观看网站| 精品国产一区二区三区久久久狼| 深夜福利在线观看直播| 日韩一区二区免费在线电影| 亚洲av无码精品一区二区| 亚洲制服丝袜在线| 天堂网中文在线观看| wwww国产精品欧美| 黑人无套内谢中国美女| 免费高清成人在线| 大肉大捧一进一出好爽视频| 欧美三区视频| 欧美爱爱视频网站| 欧美午夜精品一区二区三区电影| 久久精品magnetxturnbtih| 精品亚洲a∨一区二区三区18| 国产精品白丝jk喷水视频一区| h片在线观看下载| 久久久999精品免费| 在线观看精品一区二区三区| 亚洲欧美中文日韩v在线观看| 成人久久久精品国产乱码一区二区 | 亚洲欧洲日产国码二区| 亚洲精品国产一区黑色丝袜| 91丨九色丨国产丨porny| 久草视频福利在线| 东方aⅴ免费观看久久av| 日本黄色一级网站| 国产一区在线不卡| 日本77777| 久久99国产精品尤物| 精品日韩久久久| 日韩国产在线观看一区| 久久久久久久少妇| 三级欧美韩日大片在线看| 亚洲精品无码久久久久久| 国产欧美一级| 狠狠爱免费视频| 性xx色xx综合久久久xx| 每日在线更新av| 国产精品资源| 欧美日韩在线免费播放| 日韩电影在线看| 亚洲色图38p| 日本麻豆一区二区三区视频| 999精品视频在线| 另类欧美日韩国产在线| 91av视频免费观看| 激情欧美日韩一区二区| 国产成人精品综合久久久久99| 国产精品亚洲视频| 欧美肉大捧一进一出免费视频| av一区二区不卡| 亚洲最大成人网站| 日本一区二区三区免费乱视频| 免费91在线观看| 亚洲另类春色国产| 日本中文字幕免费| 一本色道久久综合精品竹菊| 欧美 亚洲 另类 激情 另类| 欧美喷水一区二区| 亚洲精品成人电影| 亚洲国产精品成人va在线观看| 青青草视频在线观看| 最近2019中文字幕一页二页| 先锋成人av| 欧美综合在线观看| 日本久久久久| 国产经品一区二区| 国产欧美日韩视频在线| 在线视频欧美一区| 韩日欧美一区| av无码精品一区二区三区| 久久超碰97中文字幕| 亚洲欧美高清在线| 日本一区二区三区四区| 久久久久亚洲天堂| 在线欧美日韩精品| 国内精品偷拍视频| 亚洲人成电影网站| 1区2区3区在线视频| 欧美一区二区三区图| 国产精一区二区| 久久国产精品亚洲va麻豆| 欧美高清视频手机在在线| 久久av综合网| 毛片av中文字幕一区二区| 国产黑丝一区二区| 国产精品成人免费在线| 黄色一级片免费看| 91超碰这里只有精品国产| 午夜福利理论片在线观看| 久久精品2019中文字幕| 欧美久久天堂| 亚洲曰本av电影| 欧美日韩第一| 玩弄中年熟妇正在播放| 激情久久五月天| 日本精品在线观看视频| 亚洲成人免费观看| 91一区二区视频| 日韩成人av网址| 肉肉视频在线观看| 国产精品人成电影| 特黄特色欧美大片| 欧美中文字幕在线观看视频| 美美哒免费高清在线观看视频一区二区 | 国内自拍亚洲| 欧美日韩精品久久| 樱桃成人精品视频在线播放| 8x8x成人免费视频| 日本一区二区三区在线不卡 | 国产毛片一区| 国产精品19p| 最新不卡av在线| 亚洲精品国产精品国自产网站按摩| 亚洲国产精彩中文乱码av| yellow91字幕网在线| 国产精自产拍久久久久久蜜 | 尤物国产精品| 日韩福利电影在线| 精品无码国产污污污免费网站| 午夜精品久久久久久久| 性做久久久久久久久久| 久久精品国产一区二区电影| 国产精品亚洲成在人线| 日韩久久不卡| 水野朝阳av一区二区三区| 黄色a一级视频| 精品国产精品自拍| 日日夜夜精品免费| 久久久久久久久中文字幕| 永久免费精品视频| 日韩精品一区二区免费| 精东粉嫩av免费一区二区三区| 日本免费网站视频| 欧美日韩一区二区不卡| 午夜在线小视频| 成人av电影天堂| 外国成人激情视频| 久久精品一卡二卡| 一区二区三区免费在线观看| 国产黄色一区二区| 久久99亚洲热视| 极品尤物一区| 久久久免费视频网站| 欧美国产一区视频在线观看| 中文亚洲av片在线观看| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 亚州欧美一区三区三区在线| 毛片基地黄久久久久久天堂| 日本中文字幕免费在线观看| 欧美mv日韩mv国产网站| 国产色播av在线| 日韩av一级大片| 久热成人在线视频| 欧美日韩在线视频免费| 欧美v亚洲v综合ⅴ国产v| 高潮在线视频| 日韩激情久久| 久久99国产精品免费网站| 国产一级生活片| 国产亚洲精品美女久久久久| 久久99久久久精品欧美| 国产精品一二三在线观看| 99re视频这里只有精品| 国产一级片一区二区| 欧美超级乱淫片喷水| 麻豆精品av| 亚洲成人天堂网| 亚洲一区二区精品久久av| 日韩a在线观看| 成人在线精品视频| 亚洲精品孕妇| 国产农村妇女精品一区| 精品少妇一区二区三区在线视频| 色老头在线一区二区三区| 一区不卡视频| 99久久伊人精品| 伊人成人在线观看| 久久久久久久久久久网站| 日韩欧美综合| 欧美精品欧美极品欧美激情| 欧美日韩精品三区| 123区在线| 亚洲人成77777| 91在线国产福利| 99久久精品国产色欲| 日韩av免费在线播放| 黄色成人av网站|