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

17張圖帶你了解,JVM 運行時數(shù)據(jù)區(qū)

原創(chuàng) 精選
開發(fā) 前端
JVM 會把Java的字節(jié)碼加載到運行時數(shù)據(jù)區(qū)內(nèi),這個內(nèi)存區(qū)域分為:方法區(qū)、堆、虛擬機棧、本地方法棧以及程序計數(shù)器。

開篇

眾所周知,Java程序的執(zhí)行需要依賴于JVM(Java 虛擬機)。JVM 會將Java源代碼編譯成字節(jié)碼文件,然后使用類加載器將其加載到運行時數(shù)據(jù)區(qū)中執(zhí)行,垃圾收集器也會針對運行時數(shù)據(jù)區(qū)進行對象回收的工作。今天就來說說JVM的運行時數(shù)據(jù)區(qū)。

運行時數(shù)據(jù)區(qū)概述

在計算機世界中,內(nèi)存是十分重要的系統(tǒng)資源,它承載著操作系統(tǒng)和應(yīng)用程序?qū)崟r運行的責(zé)任。JVM內(nèi)存布局規(guī)定了Java在運行過程中內(nèi)存申請、分配、管理的策略,從而保證了JVM的高效穩(wěn)定運行。

Java虛擬機在執(zhí)行Java程序的過程中,會將涉及到的數(shù)據(jù)劃分到不同的內(nèi)存區(qū)域去管理,在這些數(shù)據(jù)區(qū)域,有些是隨著虛擬機啟動而創(chuàng)建,虛擬機關(guān)閉而銷毀。還有一部分是隨著線程生命周期創(chuàng)建銷毀的。這部分區(qū)域就是接下來要講的Java虛擬機的運行時數(shù)據(jù)區(qū)。

圖1 運行時數(shù)據(jù)區(qū)

如圖1所示,紅色的部分就是運行時數(shù)據(jù)區(qū),它包括:方法區(qū)、堆、虛擬機棧、本地方法棧以及程序計數(shù)器五個部分。

圖1中標(biāo)注為黃色的方法區(qū)和堆是線程間共享的,也就是說它們會隨著虛擬機啟動而創(chuàng)建,隨著虛擬機退出而銷毀。橙色部分為每個線程單獨享有的,即它們與線程是一一對應(yīng)的,會隨著線程開始和結(jié)束而創(chuàng)建和銷毀。在HotSpot JVM中,每個線程都與操作系統(tǒng)的本地線程直接映射,例如:有一個Java線程準(zhǔn)備好執(zhí)行時,就有一個操作系統(tǒng)的本地線程被創(chuàng)建并且與Java 線程對應(yīng),當(dāng)Java線程執(zhí)行終止后,本地線程也會被回收。同時操作系統(tǒng)負責(zé)線程調(diào)度,及分配對應(yīng)的CPU執(zhí)行線程,一旦操作系統(tǒng)的本地線程初始化成功,它就會調(diào)用Java線程中的的run()方法去執(zhí)行Java線程。

褐色部分的執(zhí)行引擎就負責(zé)讀取指令并且交由CPU執(zhí)行,它包括解釋器、JIT(即時編譯器),GC(垃圾回收器)。而另外一個褐色的本地庫接口會提供Java程序調(diào)用的native方法。

另外,運行時數(shù)據(jù)區(qū)的劃分也隨著JDK的發(fā)展不斷變遷,如圖2 所示, JDK 1.6、JDK 1.7、JDK 1.8 的內(nèi)存劃分都會有所不同。

圖2 運行時數(shù)據(jù)區(qū)的變遷

如圖2 所示,在JDK 1.8 中加入了元數(shù)據(jù)區(qū)的概念,將原來保存在方法區(qū)中的運行時常量池和類常量池都包括其中。

虛擬機棧

上面介紹了JVM 運行時數(shù)據(jù)區(qū)的概念和組成,接下來一次介紹每個組成部分,首先從虛擬機棧開始。

每個Java線程都會對應(yīng)一個虛擬機棧,換句話說多個線程就對應(yīng)多個虛擬機棧。上面講過了虛擬機棧是線程私有,虛擬機棧中包含多個棧幀(Stack Frame),每一個棧幀是為方法執(zhí)行而創(chuàng)建的,棧幀中描述的是Java方法執(zhí)行的內(nèi)存模型。每個方法從調(diào)用開始直到完成的全過程都對應(yīng)著一個棧幀。棧幀是用來管理Java程序的運行,并保存方法的局部變量、部分結(jié)果、并參與方法的調(diào)用與返回。在活動線程中,只有一個棧幀是處于活躍狀態(tài)的,也就是說只有位于棧頂?shù)臈攀怯行У模Q為當(dāng)前棧幀,與這個棧幀相關(guān)聯(lián)的方法稱為當(dāng)前方法。執(zhí)行引擎運行的所有字節(jié)碼指令都只針對當(dāng)前棧幀進行操作。

如圖3 所示,每個Java 方法都會對應(yīng)一個棧幀,左邊的四個方法就對應(yīng)了四個棧幀,從下往上依次是方法調(diào)用的順序,最終方法1 會調(diào)用方法4, 此時正在執(zhí)行方法4 ,它對應(yīng)的棧幀4 就是“當(dāng)前棧幀”,就是出于活躍狀態(tài)的,其包含了局部變量表、操作數(shù)棧、動態(tài)鏈接以及返回地址等信息。

圖3 棧幀結(jié)構(gòu)

局部變量表

它定義為數(shù)字?jǐn)?shù)組,主要用于存儲方法參數(shù)和定義在方體內(nèi)的局部變量,包含基本數(shù)據(jù)類型,對象引用,以及returnAddress類型。它建立在線程的棧上,是線程的私有數(shù)據(jù),因此不存在數(shù)據(jù)的安全問題。

局部變量表所需的容量在編譯期間確定,在運行期間是不改變其容量。方法嵌套調(diào)用的次數(shù)由棧的容量來決定,例如圖3就進行了4個方法的嵌套,也就是說棧越大,方法嵌套調(diào)用次數(shù)越多。對一個函數(shù)而言,它的參數(shù)和局部變量越多,對應(yīng)的棧幀就越大。因此,函數(shù)調(diào)用就會占用更多的棧空間。局部變量表中的變量只在當(dāng)前方法調(diào)用中有效。在方法執(zhí)行時,虛擬機通過使用局部變量表完成參數(shù)值到參數(shù)變量列表的傳遞。當(dāng)方法調(diào)用結(jié)束后,隨著方法棧幀的銷毀,局部變量表也會隨之銷毀。

操作數(shù)棧

它是一個后進先出的棧,在方法執(zhí)行的過程中,根據(jù)字節(jié)碼指令、往棧中寫入或取出數(shù)據(jù),即入棧/出棧。字節(jié)碼指令將值壓入操作棧,其余的字節(jié)碼指令將操作數(shù)取出棧,進行操作之后再將結(jié)果壓入棧。操作包括:復(fù)制、交換、求和等。

這樣講比較抽象,來看一個具體的例子。

如圖4 所示,生成一個testAdd 方法,給變量i和j 分別賦值為1 和2 ,然后讓其相加并且把結(jié)果賦值給k。

圖4 操作數(shù)棧代碼

使用jclasslib反編譯上面的代碼得到圖5 的結(jié)果。

圖5 jclasslib反編譯結(jié)果

如圖6 所示,當(dāng)執(zhí)行地址 0 的時候操作指令為bipush,此時程序寄存器的地址顯示為0 ,bipush 命令將 1 壓入到操作數(shù)棧的頂部。

圖6

如圖7 所示,當(dāng)指令地址到2 的時候,程序寄存器顯示為2, 此時執(zhí)行istore_1 的指令,將棧頂?shù)臄?shù)字1 保存到局部變量表中。

圖7

如圖8所示,指令地址執(zhí)行到3 的時候,程序寄存器為3 , bipush指令把2 壓入到操作數(shù)棧的頂部。

圖8

在指令地址為5 的時候,程序寄存器的值為5, istore_2指令將操作數(shù)棧中的2 保存到局部變量表中的2 的位置。

圖9

如圖10所示,指令地址為6 的時候,執(zhí)行iload_1 指令獲取局部變量表中 位置為1 的值,也就是1 并且把它放到操作數(shù)棧的頂部。

圖10

如圖11所示,指令地址為7 的時候,執(zhí)行iload_2 指令,從局部變量表2 的位置取出值2 放到操作數(shù)棧的頂部。

圖11

如圖12 所示,在指令地址為8 時,執(zhí)行iadd 指令,將操作數(shù)棧的兩個數(shù)字1和2 相加結(jié)果為3,并且將其放到操作數(shù)棧的頂部。

圖12

如圖13 所示,接著執(zhí)行指令地址 9 , istore_3 執(zhí)行之后將操作數(shù)棧頂?shù)? 保存到局部變量表3 的位置,完成相加的操作,最后通過指令地址10 中的return指令返回方法。

圖13

動態(tài)鏈接

在介紹動態(tài)鏈接之前先說說靜態(tài)鏈接,即字節(jié)碼文件被裝載進JVM內(nèi)部時,如果被調(diào)用的目標(biāo)方法在編譯期可知,且運行期間保持不變時。這種情況下將調(diào)用方法的符號引用轉(zhuǎn)換為直接引用的過程稱之為靜態(tài)鏈接。但是,如果被調(diào)用方法在編譯期間無法被確定下來,只能在程序運行時將調(diào)用方法的符號引用轉(zhuǎn)換為直接引用,由于這種引用轉(zhuǎn)換的過程具備動態(tài)性,被稱為動態(tài)鏈接。

如圖14所示,上面是反編譯的字節(jié)碼部分,對應(yīng)的#3、#6、#5等等就是符號引用,下面的Constant pool就是常量池。在Java源文件被編譯成字節(jié)碼文件時,所有的變量和方法引用都作為符號引用保存在class文件的常量池中。例如在指令第9行會執(zhí)行invokevirtual的指令,對應(yīng)的符號引用就是#7,所對應(yīng)常量池中的#7 就是Methodref,也就是方法引用,這里對應(yīng)的方法是com.itcast.java.DynamicLinkTest中的methodA方法。

圖14 從字節(jié)碼到常量池中的方法引用

如圖15所示,當(dāng)字節(jié)碼文件被加載后,字節(jié)碼文件中的一些數(shù)據(jù),如類型信息、域信息、方法信息等,就會被放置到方法區(qū)中。而棧幀中的當(dāng)前類常量池引用(Current Class Constant Pool Reference)保存的是方法符號引用,真正的方法引用放在了方法區(qū)(Method Area)中的方法引用(method reference)中了,這個方法引用是為了支持代碼的動態(tài)鏈接。動態(tài)鏈接就是將符號引用轉(zhuǎn)化為直接引用。

圖15 棧幀中的當(dāng)前類常量池引用對應(yīng)方法區(qū)中的方法引用

JVM之所以這么設(shè)計是因為字節(jié)碼文件需要數(shù)據(jù)支持的量會很大,因此不能直接將這些數(shù)據(jù)存放到字節(jié)碼中。針對方法的引用創(chuàng)建符號引用,這個符號引用放在棧幀的常量池引用中,而實際的方法和符號引用的對照表卻放在方法區(qū)的常量池中,這樣字節(jié)碼就可以通過常量池中的對照關(guān)系找到引用的方法,并且也不會增加棧幀的容量。

方法返回地址

當(dāng)一個方法開始執(zhí)行后,可以通過兩種方式退出該方法。第一種是執(zhí)行引擎遇到方法返回的字節(jié)碼指令,此時返回值會傳遞到上層調(diào)用者,這種方式稱為正常完成出口。另外一種退出方式是在方法執(zhí)行中遇到異常,這個異常在方法體內(nèi)沒有得到處理,就會導(dǎo)致方法退出,這種方式稱為異常完成出口。由于是異常退出,就不會給上層調(diào)用者任何返回值。無論采取上面那種退出方式,方法都會到處調(diào)用它的位置,程序才能繼續(xù)執(zhí)行。方法在返回的時候需要在棧幀中保存一些信息,用來恢復(fù)調(diào)用該方法的上層方法的執(zhí)行狀態(tài)。這里可以通過方法調(diào)用者的程序計數(shù)器存放返回地址,如果是正常退出方法,上層方法會從程序計數(shù)器中保存的地址繼續(xù)執(zhí)行接下來的步驟。如果是異常退出的情況,返回地址就需要異常處理器來確定了。

程序計數(shù)器

有了上面虛擬機棧的講解,對于程序計數(shù)器的理解會相對簡單點。記得在虛擬機棧中的操作數(shù)棧的例子中,提到了使用程序計數(shù)器記錄操作指令的地址。程序計數(shù)器就是一塊較小的內(nèi)存空間,它是當(dāng)前線程執(zhí)行的字節(jié)碼的行號(操作指令的地址)指示器。在棧幀中字節(jié)碼解釋器就是通過改變計數(shù)器的值來選去下一條要執(zhí)行的字節(jié)碼指令的,例如:分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等。

上面講虛擬機棧的時候提到過,多個執(zhí)行的Java線程就是多個虛擬機棧,每個棧中存在多個棧幀,在一個時刻只有一個棧幀執(zhí)行,也就是當(dāng)前棧幀。也就是說在一個時刻一個處理只會對一個線程中的一個幀棧執(zhí)行一條指令,而每個棧幀都會維護一個屬于自己的程序計數(shù)器,這個計數(shù)器就是來記錄指令執(zhí)行的地址的。每個線程的計數(shù)器不會相互影響,這也保證了在Java 多線程進行切換的時候,每個線程都能夠保證正確的指令地址被讀取。

如圖 16所示,在invokevirtual的框圖中存在多個線程,每個線程就是一個虛擬機棧,每個線程中包含多個Frame 也就是棧幀,針對每個線程都會維護一個PC Registers也就是程序寄存器,它會記錄指令地址信息,從而讓方法實現(xiàn):跳轉(zhuǎn)、分支、循環(huán)、異常處理和線程恢復(fù)的功能。

圖16 程序計數(shù)器

本地方法棧

本地方法棧與虛擬機棧所發(fā)揮的作用是非常相似的,它們之間的區(qū)別是虛擬機棧為虛擬機執(zhí)行Java方法(也就是字節(jié)碼)服務(wù),而本地方法棧為虛擬機所使用到的Native方法服務(wù)。本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常。

說白了,本地方法(Native Method)就是一個Java調(diào)用非Java代碼的接口。 當(dāng)Java應(yīng)用需要與Java之外的環(huán)境交互時就需要使用本地方法,特別與底層系統(tǒng)、操作系統(tǒng)以及硬件打交道時就會用到本地方法。大家可以把本地方法理解為一種交流機制:它提供了一個對外的簡潔的接口,讓我們無需去了解Java應(yīng)用之外的細節(jié)。

那么JVM是如何使用Native Method的呢?當(dāng)一個類第一次被使用時,類的字節(jié)碼會被加載到內(nèi)存,在字節(jié)碼的入口維持著該類所有方法描述符的list,包括:方法代碼來源,參數(shù),方法描述符(例如:public)等等。

如果方法描述符是native,同時描述符塊將有一個指向該方法實現(xiàn)的指針,而具體實現(xiàn)在DLL文件內(nèi),此時DLL文件會被操作系統(tǒng)加載到Java程序的地址空間里。當(dāng)一個帶有本地方法的類被加載時,其相關(guān)的DLL并未被加載,因此指向方法實現(xiàn)的指針并不會被設(shè)置。當(dāng)本地方法被調(diào)用之前, DLL才會被加載,即通過調(diào)用java.system.loadLibrary()實現(xiàn)的。

堆和方法區(qū)

上面說的虛擬機棧、程序計數(shù)器和本地方法棧都是線程私有的,而接下來說的方法區(qū)和堆是線程共享的。這里把堆和方法區(qū)合起來說。

Java堆是Java虛擬機所管理內(nèi)存中最大的一塊,在虛擬機啟動時創(chuàng)建,被所有線程共享。Java對象實例以及數(shù)組都在堆上分配。堆的大小可以是固定的,也可以根據(jù)計算的需要進行擴展,如果不需要更大的堆,則可以收縮。堆的內(nèi)存不需要是連續(xù)的。Java虛擬機實現(xiàn)可以為程序員或用戶提供對堆初始大小的控制,如果可以動態(tài)擴展或收縮堆,還可以控制堆的最大和最小大小。

Java堆是垃圾收集器管理的主要區(qū)域,所以也被稱為GC堆。從內(nèi)存回收的角度來看,由于現(xiàn)在收集器基本都采用分代收集算法,所以Java堆中還可以細分為:新生代和老年代;新生代再細分就是:Eden空間、From Survivor空間、ToSurvivor空間等。從內(nèi)存分配的角度來看,線程共享的Java堆中可能劃分出多個線程私有的分配緩沖區(qū)(Thread Local Allocation Buffer,TLAB)。不論如何劃分,都與存放內(nèi)容無關(guān),無論哪個區(qū)域,存放的都仍然是對象實例;進一步劃分的目的是為了更好的回收內(nèi)存,或者更快地分配內(nèi)存。

對于堆中垃圾回收的部分這里不展開說明,后面會有文章去介紹。

方法區(qū)

方法區(qū)和堆一樣是線程共享的內(nèi)存區(qū)域,它用來存放被虛擬機加載的類型信息、運行時常量池、靜態(tài)變量、JIT代碼緩存、域信息、方法信息等。方法區(qū)(Method Area)與Java堆一樣,是各個線程共享的內(nèi)存區(qū)域,有如下特點:

  • 方法區(qū)在JVM啟動的時候被創(chuàng)建,并且它的實際的物理內(nèi)存空間和Java堆區(qū)一樣都可以是不連續(xù)的。
  • 方法區(qū)的大小,和堆空間一樣,可以選擇固定大小和可擴展。
  • 方法區(qū)的大小決定了系統(tǒng)可以保存多少個類,如果系統(tǒng)定義了太多的類,導(dǎo)致方法區(qū)溢出,虛擬機就會拋出內(nèi)存溢出錯誤:

java.lang.OutOfMemoryError:PermGenspace或者 java.lang.OutOfMemoryError: Metaspace。

  • 關(guān)閉JVM就會釋放這個區(qū)域的內(nèi)存。

這里把堆、方法區(qū)和虛擬機棧的關(guān)系整理一下。如圖17 所示,在右邊創(chuàng)建了AppMain 類,在運行時JVM 會把AppMain的信息放入到方法區(qū),因為方法區(qū)會存放類型信息。同時main 的方法本身也會放入到方法區(qū)。接下來的new Sample(“測試1”)的語句中Sample的自定義對象會放到堆里面,而對應(yīng)的test1 應(yīng)用會放入到虛擬機棧中,對應(yīng)的test1.printName()方法的執(zhí)行會在虛擬機棧中的棧幀中通過指令執(zhí)行完成。另外下面的class Sample也是放到方法區(qū)中的,聲明的private name,其中name的引用放在虛擬機棧中,name對應(yīng)的對象放在堆中。對應(yīng)的printName方法是放在方法區(qū)中的。

圖17 棧、堆、方法區(qū)關(guān)系

總結(jié)

JVM 會把Java的字節(jié)碼加載到運行時數(shù)據(jù)區(qū)內(nèi),這個內(nèi)存區(qū)域分為:方法區(qū)、堆、虛擬機棧、本地方法棧以及程序計數(shù)器。堆里面放對象,也是垃圾回收器要處理的對象;方法區(qū)放類型、方法描述、方法本體;程序計數(shù)器負責(zé)記錄虛擬機棧中指令執(zhí)行的地址;虛擬機棧對應(yīng)Java執(zhí)行的線程,對象的引用都保存在棧幀中,通過指令地址和指令執(zhí)行方法中的內(nèi)容;本地方法棧用來調(diào)用Java 之外的系統(tǒng)級別的接口。

譯者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗,10年分布式架構(gòu)經(jīng)驗。曾任惠普技術(shù)專家。樂于分享,撰寫了很多熱門技術(shù)文章,閱讀量超過60萬。《分布式架構(gòu)原理與實踐》作者。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2021-07-14 07:21:57

JVM運行數(shù)據(jù)

2018-11-22 12:07:37

Java虛擬機結(jié)構(gòu)

2024-11-26 08:31:36

2022-01-17 22:09:50

JVM方法區(qū)數(shù)據(jù)

2020-06-28 07:39:44

Kafka分布式消息

2021-08-13 08:15:23

JVM 虛擬機Java

2017-12-07 18:02:01

Python新手運行時錯誤

2021-05-07 17:11:19

負載均衡運維服務(wù)

2015-07-20 15:44:46

Swift框架MJExtension反射

2021-09-18 08:02:49

Go程序工具

2024-03-21 09:15:58

JS運行的JavaScrip

2018-10-25 09:04:56

Java虛擬機JVM

2018-12-13 09:27:31

后臺服務(wù)架構(gòu)

2021-03-08 09:52:55

架構(gòu)運維技術(shù)

2021-07-04 22:27:42

存儲BookKeeper系統(tǒng)

2019-07-12 09:30:12

DashboardDockerDNS

2021-09-11 15:38:23

容器運行鏡像開放

2009-07-09 13:52:41

Inside JVM

2021-11-12 08:38:26

一致性哈希算法數(shù)據(jù)結(jié)構(gòu)

2014-10-09 09:43:05

虛擬機遷移
點贊
收藏

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

韩国一区二区在线观看| 西野翔中文久久精品国产| 一区在线播放视频| 都市激情久久久久久久久久久| 黄色激情视频在线观看| 国产一区二区三区四区五区传媒| 在线播放中文一区| 久草资源站在线观看| 麻豆tv入口在线看| 91麻豆精东视频| 亚洲一区二区三区乱码aⅴ| 日韩欧美中文字幕一区二区| 日韩精品免费一区二区在线观看| 精品女同一区二区| 亚洲一区日韩精品| 色黄视频在线观看| 一级精品视频在线观看宜春院 | 大陆极品少妇内射aaaaa| 91视频在线观看| 91在线视频观看| 亚洲精品欧美极品| 超碰在线免费97| 99在线热播精品免费99热| 久久久av亚洲男天堂| 欧美熟妇一区二区| 白白在线精品| 欧美一区二区美女| 在线免费观看视频黄| 五月天av在线| 亚洲国产精品久久人人爱| 日本福利视频导航| 福利片在线看| 久久婷婷久久一区二区三区| 国产伦精品一区| 精品女同一区二区三区| 美女任你摸久久| 国产91热爆ts人妖在线| 精品国产乱码一区二区| 国产专区一区| 欧美精品福利在线| 欧美日韩一级在线观看| 88国产精品视频一区二区三区| 国产亚洲欧美另类中文| xxx在线播放| 一区二区三区日本久久久 | 色婷婷av一区| 亚洲精品国产一区二区三区四区在线| 日韩综合精品| 又紧又大又爽精品一区二区| 亚洲欧洲日本国产| 日本特黄a级片| 色网站免费在线观看| 欧美极品美女视频| 日韩欧美精品在线不卡| 国产一级免费在线观看| 国产欧美一区二区精品性色超碰 | 992tv在线成人免费观看| 精品99久久久久成人网站免费| 911精品美国片911久久久 | 亚洲精品综合精品自拍| 国产成人亚洲精品青草天美| 99久久精品免费看国产免费软件| 国产精品久久久| 国产午夜无码视频在线观看| 久久精品一区| 日韩女优人人人人射在线视频| 国产又黄又爽又色| 深夜视频一区二区| 欧美激情一区二区三区蜜桃视频 | 亚洲精品国产品国语在线app| 在线国产99| 色女人在线视频| 亚洲成av人**亚洲成av**| 91专区在线观看| 亚洲高清黄色| 欧美人妇做爰xxxⅹ性高电影| 91精品999| 51精品国产| 亚洲欧洲在线免费| 日本成人精品视频| 欧美日韩p片| 国产91成人video| 国产日韩久久久| 国产精品一二三四| 激情视频在线观看一区二区三区| 精品久久久久一区二区三区| 亚洲欧洲一区二区在线播放| 成人免费在线网| 亚洲天堂一区二区| 91精品国产一区二区人妖| 挪威xxxx性hd极品| 四虎国产精品成人免费入口| 无码aⅴ精品一区二区三区| 美女日韩在线中文字幕| 国产精品久久久久久久久久尿| 在线视频欧美亚洲| 成人免费视频一区| 日韩精品av一区二区三区| 国产91在线视频蝌蚪| 婷婷久久综合九色国产成人 | 黄页网站在线| 在线日韩国产精品| 日韩av成人网| 日产精品一区二区| 97国产精品免费视频| 伊人网av在线| 黄色污污视频在线观看| 国产日韩在线不卡| 女人色极品影院| 亚洲 欧美 日韩 综合| 鲁鲁在线中文| 在线看不卡av| 国产日韩视频一区| 99精品视频在线观看免费播放| 久久久久久久97| 在线视频 中文字幕| 91麻豆国产精品久久| 国产精品88久久久久久妇女| 播放一区二区| 精品伊人久久97| 久久久久久久久久综合| 麻豆久久久久久| 日本10禁啪啪无遮挡免费一区二区| 欧美精品videossex少妇| 欧美久久久久久久久| 一级性生活毛片| 精品动漫3d一区二区三区免费版 | 久久久视频免费观看| 中文字幕日日夜夜| 国产亚洲成年网址在线观看| 国产不卡一区二区视频| 午夜69成人做爰视频| 久久美女视频| 国产精品白嫩初高中害羞小美女| 色噜噜一区二区三区| 一区二区在线免费观看| 亚洲午夜激情影院| 国产精品久久久久一区二区三区厕所| 国产999在线观看| 玖玖综合伊人| 欧美午夜丰满在线18影院| 亚洲欧美日韩偷拍| 国内精品99| 国产精品初高中精品久久| 超碰免费公开在线| 日韩一区二区三区在线视频| 免费成人深夜夜行网站| 激情综合网最新| 在线视频一二三区| 精品国产一区二区三区性色av| 中日韩美女免费视频网址在线观看 | 成人欧美一区二区三区在线播放| 91日韩视频在线观看| 欧美在线电影| 成人激情春色网| 欧美jizz18性欧美| 欧美一区二区在线不卡| 男人与禽猛交狂配| 丁香六月综合激情| 欧美精品久久久久久久免费| 欧美91在线| 秋霞av国产精品一区| 国产在线网站| 欧美日韩高清一区二区不卡| 艳妇荡乳欲伦69影片| 国产传媒一区在线| 亚洲熟妇国产熟妇肥婆| 欧美男男gaytwinkfreevideos| 国产精品成人播放| 黄色免费网站在线观看| 日韩欧美aaaaaa| 91香蕉在线视频| 久久精品一区二区三区四区| 亚洲精品久久久中文字幕| 亚洲成av人片乱码色午夜| 99视频免费观看| 在线天堂资源| 日韩资源在线观看| 粉嫩小泬无遮挡久久久久久| 欧美日韩亚洲网| 天天色天天综合| av网站免费线看精品| 日本久久精品一区二区| 亚洲无中文字幕| 久久这里精品国产99丫e6| 久久免费影院| 91精品国产电影| 香蕉视频网站在线观看| 精品国产一区二区在线观看| 无码人妻黑人中文字幕| 亚洲婷婷综合色高清在线| 稀缺小u女呦精品呦| 奇米一区二区三区| 日韩精品一区二区免费| 国产精品免费99久久久| 99视频国产精品免费观看| 自拍偷自拍亚洲精品被多人伦好爽| 日韩中文字幕网址| 日本韩国一区| 日韩视频免费观看高清完整版在线观看 | www.色就是色.com| 性欧美精品高清| 日本a在线天堂| av伊人久久| 国产精品一区二区av| 日韩av超清在线观看| 欧美激情一区二区三区久久久| 国产在线视频福利| 亚洲激情 国产| 国产色在线视频| 欧美亚洲一区三区| 亚洲免费在线观看av| 一区二区国产视频| 色哟哟一一国产精品| 久久久不卡网国产精品二区 | 久久欧美中文字幕| 91人人澡人人爽| 精品一区二区三区蜜桃| 黄色一级大片在线观看| 亚洲黄页一区| 少妇大叫太大太粗太爽了a片小说| 日韩欧美一区免费| 欧美日韩视频在线一区二区观看视频| 欧洲大片精品免费永久看nba| 国产欧美一区二区| 日韩经典一区| 国产99在线|中文| 密臀av在线播放| 91精品国产高清自在线| 欧美24videosex性欧美| 久久国产精品99国产精| 黄色免费网站在线| 久久亚洲国产精品成人av秋霞| av在线电影网| 在线亚洲男人天堂| 日本黄色片在线观看| 在线观看久久av| 成人午夜影视| 国产一区二区动漫| yjizz视频网站在线播放| 日韩精品视频免费| 色猫av在线| 亚洲男人天堂网| 欧美色18zzzzxxxxx| 精品伊人久久97| 国产在线播放av| 伊人久久五月天| 97最新国自产拍视频在线完整在线看| 亚洲天堂视频在线观看| 黄色片在线免费看| 一区二区三区国产在线观看| av网站在线免费播放| 在线视频日本亚洲性| 2019中文字幕在线视频| 最新亚洲国产精品| 国产秀色在线www免费观看| 精品国产一区久久久| 污影院在线观看| 午夜美女久久久久爽久久| 国产在线看片免费视频在线观看| 97色在线播放视频| 欧美天堂视频| 国产美女高潮久久白浆| 国产亚洲高清一区| 国产欧美综合精品一区二区| 亚洲精品亚洲人成在线观看| 区一区二区三区中文字幕| av资源久久| 久久久久久久久影视| 亚洲天堂黄色| 欧美 国产 小说 另类| 免费xxxx性欧美18vr| www激情五月| 不卡欧美aaaaa| 国产精品天天干| 亚洲欧洲综合另类| 成人午夜视频精品一区| 日本韩国一区二区三区视频| 亚洲在线观看av| 日韩欧美123| 精品资源在线看| 久久99国产精品自在自在app| 男人av在线播放| 成人av在线天堂| 都市激情亚洲欧美| 日韩av图片| 亚洲天堂成人| 日日干夜夜操s8| 不卡高清视频专区| 妖精视频在线观看免费| 亚洲一级电影视频| 亚洲特级黄色片| 亚洲激情自拍图| 欧美性videos| 91av在线免费观看| 国产一区二区视频在线看| 精品一区二区日本| 91不卡在线观看| 男人的天堂日韩| 懂色av一区二区三区蜜臀| 九九热免费在线| 五月婷婷激情综合网| 91麻豆成人精品国产| 精品无人国产偷自产在线| 亚洲第一图区| 国产成人综合av| 国产图片一区| 99re8这里只有精品| 男人天堂欧美日韩| 永久免费未满蜜桃| 亚洲日本韩国一区| 中文字幕你懂的| 亚洲精品第一页| 色www永久免费视频首页在线| 国产精品免费视频xxxx| 亚洲第一二三区| 美女扒开大腿让男人桶| 精品亚洲欧美一区| 丰满的亚洲女人毛茸茸| 欧美日韩另类字幕中文| 亚洲国产精品成人久久蜜臀| 日韩一区二区精品视频| 日韩a**中文字幕| 久久精品国产一区二区三区不卡| 欧美精选一区| 中文字幕55页| 国产精品进线69影院| 中文在线字幕免费观| 国产亚洲成av人片在线观看桃| 国产在线美女| 韩国成人av| 亚洲精品看片| 在线xxxxx| 亚洲综合激情小说| www久久久com| 美女精品久久久| 日韩一区二区三区高清在线观看| 国产一区一区三区| 国产在线精品不卡| 男人操女人的视频网站| 日韩一级片在线播放| a免费在线观看| 亚洲自拍偷拍色图| 欧美色图首页| 国产清纯白嫩初高中在线观看性色| 亚洲精品国产高清久久伦理二区| 国产乱码久久久久| 欧美激情区在线播放| 北条麻妃在线一区二区免费播放| 日韩在线视频在线| 丁香另类激情小说| 自拍偷拍欧美亚洲| 国产丝袜一区二区三区| 全亚洲第一av番号网站| 欧美日韩亚洲一区二区三区在线观看 | 蜜臀av免费在线观看| 久久免费成人精品视频| 奇米777国产一区国产二区| 香港三级韩国三级日本三级| 99re这里都是精品| 精品久久久久久久久久久久久久久久久久| 亚洲久久久久久久久久| 日本精品另类| 韩国黄色一级大片| 粉嫩13p一区二区三区| 中文字幕第四页| 中文字幕在线精品| 欧美黄色一级| 欧美久久久久久久久久久久久| 久久久久久久久久久电影| 亚洲在线视频播放| 欧美国产高跟鞋裸体秀xxxhd| 老司机aⅴ在线精品导航| 韩国中文字幕av| 亚洲欧美日韩成人高清在线一区| 黄色片一区二区三区| 国产成人高清激情视频在线观看 | 色婷婷综合久久久久中文字幕| 国产精品乱人伦| 性猛交富婆╳xxx乱大交天津| 97人人做人人爱| 久久国产中文字幕| 稀缺呦国内精品呦| 欧美三区免费完整视频在线观看| 超碰最新在线| 免费观看成人在线| 国产一区二区三区高清播放| 91精品国产乱码在线观看| 色吧影院999| 亚洲小说图片| 久久久久久久久久久影视| 日韩欧美国产高清91| av电影免费在线观看| 欧美日韩国产高清视频| 国产在线精品一区二区夜色| 午夜精品三级久久久有码| 久久影院中文字幕| 曰本一区二区三区视频| 韩国三级hd中文字幕有哪些| 欧美在线不卡一区|