久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Java的內(nèi)存模型

瀏覽:92日期:2022-08-11 14:35:20
目錄JVM的內(nèi)存模型Java “一次運(yùn)行,到處編譯” 的真面目JVM的本質(zhì)和位置JVM的內(nèi)存模型總覽線程私有區(qū)域線程共享區(qū)域直接內(nèi)存從例子來理解內(nèi)存模型JVM的內(nèi)存模型Java “一次運(yùn)行,到處編譯” 的真面目

說JVM內(nèi)存模型之前,先聊一個老生常談的問題,為什么Java可以 “一次編譯,到處運(yùn)行”,這個話題最直接的答案就是,因為Java有JVM啊,解釋這個答案之前,我想先回顧一下一個語言被編譯的過程:

一般編程語言的編譯過程大抵就是,編譯——連接——執(zhí)行,這里的編譯就是,把我們寫的源代碼,根據(jù)語義語法進(jìn)行翻譯,形成目標(biāo)代碼,即匯編碼。再由匯編程序翻譯成機(jī)器語言(可以理解為直接運(yùn)行于硬件上的01語言);然后進(jìn)行連接,所謂連接就是將目標(biāo)代碼與函數(shù)庫相連接,并將源程序所用的庫代碼與目標(biāo)代碼合并,并形成最終可執(zhí)行的二進(jìn)制機(jī)器代碼(程序)。

詳解Java的內(nèi)存模型

編譯運(yùn)行的整個流程,有一個前提,那就是到匯編的層面,指令編碼就和處理器的架構(gòu)強(qiáng)關(guān)聯(lián)了,說白點(diǎn)就是和硬件關(guān)聯(lián)了,可以粗暴的理解為,一類硬件機(jī)器只認(rèn)識一種匯編,一種機(jī)器只認(rèn)一種機(jī)器碼。在這個基礎(chǔ)下,很容易就會發(fā)現(xiàn)一個問題,一個編程語言經(jīng)過編譯、連接形成的可運(yùn)行的機(jī)器碼X,可以在硬件環(huán)境1的情況下運(yùn)行,當(dāng)機(jī)器碼X到硬件環(huán)境2,就未必可以運(yùn)行了,或者說運(yùn)行結(jié)果就不是硬件環(huán)境1的結(jié)果了,所以,同一個程序,換臺PC,我們就可能需要重新編譯、打包成可運(yùn)行在當(dāng)前硬件環(huán)境的程序。這樣在工程化運(yùn)用中真的是災(zāi)難。

現(xiàn)在我們回到開篇問題的答案,之所以Java可以“一次編譯,到處運(yùn)行”,是因為有JVM,為了便于理解,我們可以這樣認(rèn)為:JVM就是一個完備的中間環(huán)境,它提供編譯運(yùn)行Java字節(jié)碼的全套環(huán)境,換句話說,它就像一個小隔離空間,我的Java程序只要編譯一次,只要滿足可以跑在JVM中,那它就可以隨便移植在任何硬件環(huán)境中,所以Java的“一次編譯,到處運(yùn)行”的本質(zhì)就是,它處處都要依賴JVM,它其實就是一個運(yùn)行在JVM中的寄生蟲,這也是為什么想要運(yùn)行環(huán)境,你就必須要裝JDK的原因。

詳解Java的內(nèi)存模型

JVM的本質(zhì)和位置

上面的理解只不過是為了更快的入戲,但是上面的理解過于粗暴,下面細(xì)膩一下JVM的性質(zhì)以及它所處的位置:

詳解Java的內(nèi)存模型

通常工作中所接觸的基本是Java庫和應(yīng)用以及Java核心類庫,知道如何使用就可以了,但是歸根結(jié)底代碼都是要編譯成class文件由Java虛擬機(jī)裝載執(zhí)行,所產(chǎn)生的結(jié)果或者現(xiàn)象都可以通過Java虛擬機(jī)的運(yùn)行機(jī)制來解釋。一些相同的代碼會由于虛擬機(jī)的實現(xiàn)不同而產(chǎn)生不同結(jié)果。

然后是我們要介紹的JVM,首先我們要明確一個概念,JVM它并不是某一個具體的產(chǎn)品,也不是一個成品的軟件,更準(zhǔn)確地說JVM是一種理論規(guī)范,對JVM的具體實現(xiàn)要么是軟件,要么是軟件和硬件的組合,JVM可以由不同的廠商來實現(xiàn)成不同的產(chǎn)品。由于廠商的不同必然導(dǎo)致JVM在實現(xiàn)上的一些不同,像國內(nèi)就有著名的TaobaoVM;

在Java平臺的結(jié)構(gòu)中,可以看出,Java虛擬機(jī)(JVM)處在核心的位置,是程序與底層操作系統(tǒng)和硬件無關(guān)的關(guān)鍵。它的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統(tǒng),其中依賴于平臺的部分稱為適配器;JVM通過移植接口在具體的平臺和操作系統(tǒng)上實現(xiàn);在JVM的上方是Java的基本類庫和擴(kuò)展類庫以及它們的API, 利用Java API編寫的應(yīng)用程序(application)和小程序(Java applet)可以在任何Java平臺上運(yùn)行而無需考慮底層平臺,就是因為有Java虛擬機(jī)(JVM)實現(xiàn)了程序與操作系統(tǒng)的分離,從而實現(xiàn)了Java的平臺無關(guān)性。

JVM在它的生存周期中有一個明確的任務(wù),那就是裝載字節(jié)碼文件,一旦字節(jié)碼進(jìn)入虛擬機(jī),它就會被解釋器解釋執(zhí)行,或者是被即時代碼發(fā)生器有選擇的轉(zhuǎn)換成機(jī)器碼執(zhí)行,即Java程序被執(zhí)行。因此當(dāng)Java程序啟動的時候,就產(chǎn)生JVM的一個實例;當(dāng)程序運(yùn)行結(jié)束的時候,該實例也跟著消失了。

JVM的內(nèi)存模型總覽

詳解Java的內(nèi)存模型

總體來講,JVM會將Java進(jìn)程所管理的內(nèi)存劃分為若干不同的數(shù)據(jù)區(qū)域. 這些區(qū)域有各自的用途、創(chuàng)建/銷毀時間。以上這張圖,就是Java的編譯運(yùn)行過程,上半部分(運(yùn)行時區(qū)域)其實就是JVM的內(nèi)存分配,它把從操作系統(tǒng)獲取來的內(nèi)存空間進(jìn)行了獨(dú)立的劃分,分別為方法區(qū)、堆、虛擬機(jī)棧、本地方法棧、程序計數(shù)器。下半部分就是連接——運(yùn)行階段的,JVM將Java語言處理完畢,變成適配與當(dāng)前機(jī)器的機(jī)器碼,然后與本地庫進(jìn)行連接,運(yùn)行。

線程私有區(qū)域

線程私有數(shù)據(jù)區(qū)域生命周期與線程相同, 依賴用戶線程的啟動/結(jié)束而創(chuàng)建/銷毀(在Hotspot VM內(nèi), 每個線程都與操作系統(tǒng)的本地線程直接映射, 因此這部分內(nèi)存區(qū)域的存/否跟隨本地線程的生/死)。

詳解Java的內(nèi)存模型

程序計數(shù)器

一塊較小的內(nèi)存空間, 作用是當(dāng)前線程所執(zhí)行字節(jié)碼的行號指示器(類似于傳統(tǒng)CPU模型中的PC), PC在每次指令執(zhí)行后自增, 維護(hù)下一個將要執(zhí)行指令的地址. 在JVM模型中, 字節(jié)碼解釋器就是通過改變PC值來選取下一條需要執(zhí)行的字節(jié)碼指令,分支、循環(huán)、跳轉(zhuǎn)、異常處理、線程恢復(fù)等基礎(chǔ)功能都需要依賴PC完成(僅限于Java方法, Native方法該計數(shù)器值為undefined).不同于OS以進(jìn)程為單位調(diào)度, JVM中的并發(fā)是通過線程切換并分配時間片執(zhí)行來實現(xiàn)的. 在任何一個時刻, 一個處理器內(nèi)核只會執(zhí)行一條線程中的指令. 因此, 為了線程切換后能恢復(fù)到正確的執(zhí)行位置, 每條線程都需要有一個獨(dú)立的程序計數(shù)器, 這類內(nèi)存被稱為“線程私有”內(nèi)存。

JAVA代碼編譯后的字節(jié)碼在未經(jīng)過JIT(實時編譯器)編譯前,其執(zhí)行方式是通過“字節(jié)碼解釋器”進(jìn)行解釋執(zhí)行。簡單的工作原理為解釋器讀取裝載入內(nèi)存的字節(jié)碼,按照順序讀取字節(jié)碼指令。讀取一個指令后,將該指令“翻譯”成固定的操作,并根據(jù)這些操作進(jìn)行分支、循環(huán)、跳轉(zhuǎn)等流程。

從上面的描述中,可能會產(chǎn)生程序計數(shù)器是否是多余的疑問。因為沿著指令的順序執(zhí)行下去,即使是分支跳轉(zhuǎn)這樣的流程,跳轉(zhuǎn)到指定的指令處按順序繼續(xù)執(zhí)行是完全能夠保證程序的執(zhí)行順序的。假設(shè)程序永遠(yuǎn)只有一個線程,這個疑問沒有任何問題,也就是說并不需要程序計數(shù)器。但實際上程序是通過多個線程協(xié)同合作執(zhí)行的。

首先我們要搞清楚JVM的多線程實現(xiàn)方式。JVM的多線程是通過CPU時間片輪轉(zhuǎn)(即線程輪流切換并分配處理器執(zhí)行時間)算法來實現(xiàn)的。也就是說,某個線程在執(zhí)行過程中可能會因為時間片耗盡而被掛起,而另一個線程獲取到時間片開始執(zhí)行。當(dāng)被掛起的線程重新獲取到時間片的時候,它要想從被掛起的地方繼續(xù)執(zhí)行,就必須知道它上次執(zhí)行到哪個位置,在JVM中,通過程序計數(shù)器來記錄某個線程的字節(jié)碼執(zhí)行位置。因此,程序計數(shù)器是具備線程隔離的特性,也就是說,每個線程工作時都有屬于自己的獨(dú)立計數(shù)器。

程序計數(shù)器的特點(diǎn)

1.線程隔離性,每個線程工作時都有屬于自己的獨(dú)立計數(shù)器。

2.執(zhí)行java方法時,程序計數(shù)器是有值的,且記錄的是正在執(zhí)行的字節(jié)碼指令的地址(參考上一小節(jié)的描述)。

3.執(zhí)行native本地方法時,程序計數(shù)器的值為空(Undefined)。因為native方法是java通過JNI直接調(diào)用本地C/C++庫,可以近似的認(rèn)為native方法相當(dāng)于C/C++暴露給java的一個接口,java通過調(diào)用這個接口從而調(diào)用到C/C++方法。由于該方法是通過C/C++而不是java進(jìn)行實現(xiàn)。那么自然無法產(chǎn)生相應(yīng)的字節(jié)碼,并且C/C++執(zhí)行時的內(nèi)存分配是由自己語言決定的,而不是由JVM決定的。

4.程序計數(shù)器占用內(nèi)存很小,在進(jìn)行JVM內(nèi)存計算時,可以忽略不計。

5.程序計數(shù)器,是唯一一個在java虛擬機(jī)規(guī)范中沒有規(guī)定任何OutOfMemoryError的區(qū)域。

虛擬機(jī)棧

這里的虛擬機(jī)棧主要是針對Java的方法執(zhí)行,我們都知道方法在編程中使用的是棧的數(shù)據(jù)結(jié)構(gòu);每個方法被執(zhí)行時會創(chuàng)建一個棧幀(Stack Frame)用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息. 每個方法被調(diào)用至返回的過程, 就對應(yīng)著一個棧幀在虛擬機(jī)棧中從入棧到出棧的過程(VM提供了-Xss來指定線程的最大棧空間, 該參數(shù)也直接決定了函數(shù)調(diào)用的最大深度)。這里特別說明一下局部變量表,這里的局部變量表,其實就是我們定義的方法內(nèi)部的變量,它基本的范圍包括基本數(shù)據(jù)類型(如boolean、int、double等) 、對象引用(reference : 不等同于對象本身, 可能是一個指向?qū)ο笃鹗嫉刂返闹羔? 也可能指向一個代表對象的句柄或其他與此對象相關(guān)的位置),也就是我們私下常說的‘堆棧’中的‘棧’。

Java虛擬機(jī)使用局部變量表來完成方法調(diào)用時的參數(shù)傳遞。局部變量表的長度在編譯期已經(jīng)決定了并存儲于類和接口的二進(jìn)制表示中,一個局部變量可以保存一個類型為boolean、byte、char、short、float、reference和returnAddress的數(shù)據(jù),兩個局部變量可以保存一個類型為long和double的數(shù)據(jù)。

Java虛擬機(jī)提供一些字節(jié)碼指令來從局部變量表或者對象實例的字段中復(fù)制常量或變量值到操作數(shù)棧中,也提供了一些指令用于從操作數(shù)棧取走數(shù)據(jù)、操作數(shù)據(jù)和把操作結(jié)果重新入棧。在方法調(diào)用的時候,操作數(shù)棧也用來準(zhǔn)備調(diào)用方法的參數(shù)以及接收方法返回結(jié)果。

每個棧幀中都包含一個指向運(yùn)行時常量區(qū)的引用支持當(dāng)前方法的動態(tài)鏈接。在Class文件中,方法調(diào)用和訪問成員變量都是通過符號引用來表示的,動態(tài)鏈接的作用就是將符號引用轉(zhuǎn)化為實際方法的直接引用或者訪問變量的運(yùn)行是內(nèi)存位置的正確偏移量。

總的來說,Java虛擬機(jī)棧是用來存放局部變量和過程結(jié)果的地方。Java虛擬機(jī)棧可能發(fā)生如下異常情況: 如果Java虛擬機(jī)棧被實現(xiàn)為固定大小內(nèi)存,線程請求分配的棧容量超過Java虛擬機(jī)棧允許的最大容量時,Java虛擬機(jī)將會拋出一個StackOverflowError異常。如果Java虛擬機(jī)棧被實現(xiàn)為動態(tài)擴(kuò)展內(nèi)存大小,并且擴(kuò)展的動作已經(jīng)嘗試過,但是目前無法申請到足夠的內(nèi)存去完成擴(kuò)展,或者在建立新的線程時沒有足夠的內(nèi)存去創(chuàng)建對應(yīng)的虛擬機(jī)棧,那Java虛擬機(jī)將會拋出一個OutOfMemoryError異常。

1.符號引用(Symbolic References):

符號引用以一組符號來描述所引用的目標(biāo),符號可以是任何形式的字面量,只要使用時能夠無歧義的定位到目標(biāo)即可。例如,在Class文件中它以CONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info等類型的常量出現(xiàn)。符號引用與虛擬機(jī)的內(nèi)存布局無關(guān),引用的目標(biāo)并不一定加載到內(nèi)存中。在Java中,一個java類將會編譯成一個class文件。在編譯時,java類并不知道所引用的類的實際地址,因此只能使用符號引用來代替。比如org.simple.People類引用了org.simple.Language類,在編譯時People類并不知道Language類的實際內(nèi)存地址,因此只能使用符號org.simple.Language(假設(shè)是這個,當(dāng)然實際中是由類似于CONSTANT_Class_info的常量來表示的)來表示Language類的地址。各種虛擬機(jī)實現(xiàn)的內(nèi)存布局可能有所不同,但是它們能接受的符號引用都是一致的,因為符號引用的字面量形式明確定義在Java虛擬機(jī)規(guī)范的Class文件格式中。

2.直接引用:

直接引用可以是

(1)直接指向目標(biāo)的指針(比如,指向“類型”【Class對象】、類變量、類方法的直接引用可能是指向方法區(qū)的指針)

(2)相對偏移量(比如,指向?qū)嵗兞俊嵗椒ǖ闹苯右枚际瞧屏浚?/p>

(3)一個能間接定位到目標(biāo)的句柄

直接引用是和虛擬機(jī)的布局相關(guān)的,同一個符號引用在不同的虛擬機(jī)實例上翻譯出來的直接引用一般不會相同。如果有了直接引用,那引用的目標(biāo)必定已經(jīng)被加載入內(nèi)存中了。

本地方法棧

本地方法棧其實作用和虛擬機(jī)棧的作用一樣,不同的是,虛擬機(jī)棧是為虛擬機(jī)解析運(yùn)行Java方法,而本地方法棧是為虛擬機(jī)調(diào)用Native方法服務(wù)(Native方法簡單點(diǎn)來說就是一個java調(diào)用非java代碼的接口。一個Native 方法是這樣一個java的方法:該方法的實現(xiàn)由非java語言實現(xiàn))

線程共享區(qū)域

這一區(qū)域的生命周期,同虛擬機(jī)一致,也就是虛擬機(jī)內(nèi)部的公共內(nèi)存區(qū)域,隨虛擬機(jī)的啟動/關(guān)閉而創(chuàng)建/銷毀

詳解Java的內(nèi)存模型

堆區(qū)

這里的堆,是虛擬機(jī)從操作系統(tǒng)那里申請來的的內(nèi)存空間,這塊空間是Java虛擬機(jī)所管理的內(nèi)存中最大的一塊,并且是所有線程共享的一塊內(nèi)存區(qū)域,Java堆在虛擬機(jī)啟動的時候被創(chuàng)建,主要用來為類實例對象和數(shù)組分配內(nèi)存。這塊區(qū)域可以處于物理上不連續(xù)的內(nèi)存空間中,只要邏輯上是連續(xù)的即可,就像我們的磁盤空間一樣,在實現(xiàn)時,既可以實現(xiàn)成固定大小的,也可以是擴(kuò)展的,如果是可擴(kuò)展的,則通過(-Xmx和-Xms控制),如果在隊中沒有內(nèi)存完成實例分配,并且堆也無法再擴(kuò)展時,將會拋出OutOfMemoryError異常。

Java堆是垃圾回收器管理的主要區(qū)域,很多時候也被稱為“GC”堆,在現(xiàn)在的實現(xiàn)上,堆被劃分成兩個不同的區(qū)域:新生代( Young )、老年代( Old );這也就是JVM采用的“分代收集算法”,簡單說,就是針對不同特征的java對象采用不同的 策略實施存放和回收,自然所用分配機(jī)制和回收算法就不一樣。新生代( Young ) 又被劃分為三個區(qū)域:Eden、From Survivor、To Survivor。

方法區(qū)

方法區(qū)和Java堆一樣,是各個線程共享的內(nèi)存區(qū)域,用于存儲已被虛擬機(jī)加載的類信息,常量、靜態(tài)變量,還包括在類、實例、接口初始化時用到的特殊方法。虛擬機(jī)規(guī)范上把方法區(qū)描述為堆的一個邏輯部分,但是它卻有一個別名叫做“非堆”,目的就是與Java的堆區(qū)分開來。

直接內(nèi)存

直接內(nèi)存并不是JVM運(yùn)行時數(shù)據(jù)區(qū)的一部分, 但也會被頻繁的使用: 在JDK 1.4引入的NIO提供了基于Channel與Buffer的IO方式, 它可以使用Native函數(shù)庫直接分配堆外內(nèi)存, 然后使用DirectByteBuffer對象作為這塊內(nèi)存的引用進(jìn)行操作(詳見: Java I/O 擴(kuò)展), 這樣就避免了在Java堆和Native堆中來回復(fù)制數(shù)據(jù), 因此在一些場景中可以顯著提高性能。顯然, 本機(jī)直接內(nèi)存的分配不會受到Java堆大小的限制(即不會遵守-Xms、-Xmx等設(shè)置), 但既然是內(nèi)存, 則肯定還是會受到本機(jī)總內(nèi)存大小及處理器尋址空間的限制, 因此動態(tài)擴(kuò)展時也會出現(xiàn)OutOfMemoryError異常。

從例子來理解內(nèi)存模型

這里我們引入一個比較簡單的程序樣例,從具體的代碼角度去理解Jvm的內(nèi)存

一個person類

public class Persion { private String name; public static String aninmal = 'dog' public Persion(String name){this.name = name } public String getName() {return name; } public void setName(String name) {this.name = name; } }

一個App類

public class App { public static void main( String[] args ) {Persion persion1 = new Persion('張三'); Persion persion2 = new Persion('李四');persoion1.setName('王五'); } }

程序開始運(yùn)行,系統(tǒng)啟動了一個Java虛擬機(jī)進(jìn)程,Java虛擬機(jī)定位到方法區(qū)中App類的main()方法的字節(jié)碼,開始執(zhí)行它的指令。分別去創(chuàng)建Persion1和Persion2(這里我們以persion對象為跟蹤點(diǎn))

詳解Java的內(nèi)存模型

1、程序從main方法開始執(zhí)行,既然提到了方法,根據(jù)上面的知識,我們知道,它首先會在棧區(qū)動工。在JAVA虛擬機(jī)進(jìn)程中,每個線程都會擁有一個方法調(diào)用棧,用來跟蹤線程運(yùn)行中一系列的方法調(diào)用過程,棧中的每一個元素就被稱為棧幀,每當(dāng)線程調(diào)用一個方法的時候就會向方法棧壓入一個新幀。這里的幀用來存儲方法的參數(shù)、局部變量和運(yùn)算過程中的臨時數(shù)據(jù)。這時候執(zhí)行main方法的主線程會在棧區(qū)申請一片區(qū)域。根據(jù)源碼,它會識別出persion1和persion2分別為兩個變量,并且給它們定性是方法內(nèi)局部變量,因此,它被會添加到了執(zhí)行main()方法的主線程的JAVA方法調(diào)用棧中。

2、 接下來就是 “=” 賦值操作了,Java虛擬機(jī)接受運(yùn)行指令,發(fā)現(xiàn)右側(cè)是個對象實例,于是就直奔方法區(qū)而去,試圖找到Persion類的類型信息。首次運(yùn)行,發(fā)現(xiàn)并沒有找到Persion的信息,這時候Java虛擬機(jī)根據(jù)預(yù)設(shè)的規(guī)則,在無法找到類信息的情況下,自行去加載Persion類,把Persion類的類型信息存放在方法區(qū)里。

3、 現(xiàn)在Persion類的信息已經(jīng)被加載到了方法區(qū),這里Persion類中的靜態(tài)變量animal也會被填充上值“dog”存放于方法區(qū),此時Java虛擬機(jī)根據(jù)我們代碼中的兩句new指令,分別去堆中劃出兩塊內(nèi)存區(qū)域,分別用于存放persion實例1和persion實例2,這兩個實例對象分別擁有自己獨(dú)立的內(nèi)存空間, 同時這倆實例持有著指向方法區(qū)的Persion類的類型信息的引用。這里所說的引用,實際上指的是Persion類的類型信息在方法區(qū)中的內(nèi)存地址,其實,就是有點(diǎn)類似于C語言里的指針,而這個地址呢,就存放了在persion實例1、persopn實例2的數(shù)據(jù)區(qū)里。我們也能發(fā)現(xiàn)persion實例1和persion實例2共享animal這個變量,也就是說,無論使用哪一個引用(persion1和persion2)去修改這個animal變量,任何一個Persion對象使用這個變量的時候,都會發(fā)生改變。

4、到此為止已經(jīng)將main方法中的兩個成員變量persion1和persion2分別關(guān)聯(lián)到了堆中的對象。當(dāng)Java虛擬機(jī)執(zhí)行到persion1.setName()的時候,Java虛擬機(jī)根據(jù)main方法棧區(qū)中的persion1變量,定位到堆中的Persion名字為張三的實例(persion實例1),再根據(jù)這個實例所持有的類信息引用(或者說指針),定位到方法區(qū)的Persion類信息,從中獲得setName(String name)方法,然后棧區(qū)再壓入一個新幀,并在其中完成參數(shù)(String name)的復(fù)制,然后根據(jù)指令,將堆中的Persion實例1 空間中的Name變成“王五”,然后結(jié)束

以上就是詳解Java的內(nèi)存模型的詳細(xì)內(nèi)容,更多關(guān)于Java的內(nèi)存模型的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久人人网 | 日韩不卡| 一级大片免费观看 | 欧美日韩国产在线观看 | 国精产品一区二区三区黑人免费看 | 激情视频在线观看 | 91婷婷射| 中文字幕日韩欧美一区二区三区 | 日日日操 | 日本一区二区三区免费观看 | 色噜噜色综合 | 国产人成免费视频 | 亚洲一区二区精品在线观看 | 久久久久成人精品 | 久草高清| 中文字幕在线网址 | www.伊人网| 亚洲精品一区二区三区蜜桃久 | 免费观看av电影 | 精品美女在线观看视频在线观看 | 日韩免费一区二区 | 日韩精品一区二区三区中文在线 | 国产精品一区人伦免视频播放 | 91久久精品一区二区别 | 国产日产精品一区二区三区四区 | av网站观看 | 91xx在线观看 | 少妇看av一二三区 | 久久精品亚洲欧美日韩精品中文字幕 | 国产一区二区三区在线免费 | www.中文字幕在线 | 综合亚洲精品 | 亚洲精品美女久久久 | 美女国产 | 久久精品亚洲 | 成人影院av | 天天综合网网欲色 | 亚洲免费在线视频 | 日韩三级电影免费观看 | 国产欧美日韩综合精品一区二区 | 成人激情视频在线免费观看 | 99热精品久久 | 欧美日韩高清一区 | 色婷婷一区二区三区四区 | 久久精品国产亚洲 | 亚洲欧美日韩另类一区二区 | 国产精品不卡视频 | 狠狠干影院 | 成人免费淫片aa视频免费 | 在线色网站 | www.男人天堂 | 精品99久久久久久 | 日韩av资源站 | 九九香蕉视频 | 嫩草懂你| 国产九九九 | 欧美一区成人 | 免费观看一区二区三区毛片 | 91精品久久久久久久久久入口 | av中文字幕在线 | 免费成人av| 日韩在线免费观看av | 男人的天堂久久 | 国产免费自拍 | 国产视频第一区 | 中文字幕一区二区三区四区不卡 | 性色国产| av中文字幕网 | 福利片中文字幕 | 国产在线不卡 | 国产www | 精品国产乱码一区二区三区 | 韩日中文字幕 | 在线观看污片 | 欧美男人天堂网 | 国产精品欧美久久久久一区二区 | 国产精品一二 | 久久久日韩精品一区二区三区 | 狠狠色狠狠色综合网 | 日本亚洲国产一区二区三区 | 亚洲国产中文字幕 | 亚洲欧美精品一区二区三区 | 国产亚洲欧美在线 | 国产小视频在线 | av电影一区二区 | 亚洲www永久成人夜色 | 国产精品不卡一区 | 午夜tv免费观看 | 久在线草 | 在线免费国产 | 日韩免费一级 | www欧美| 三级色网站 | 免费黄色录像视频 | 国产成人免费视频网站高清观看视频 | caoporn免费 | 国产在线一区二区三区 | 一区二区在线不卡 | 欧美福利在线观看 | 久久久久久网站 | 五月在线视频 | 欧美国产日韩在线 | 激情欧美一区二区三区中文字幕 | 日韩一区二区精品 | 91精品久久久久久久久 | 久久婷婷国产麻豆91天堂 | 国产一区二区三区高清 | 久久久久久成人 | 日韩精品一区二区三区四区视频 | av大片| va在线观看| h视频在线免费观看 | 香蕉久久久久久 | 国产成人午夜精品5599 | 欧美久久久 | 亚洲久久久久 | 日韩欧美中文在线 | 6080yy午夜一二三区久久 | 欧美综合一区二区 | 黄色国产大片 | 国产精品久久国产精品99 gif | 玖草在线视频 | 在线无码 | 欧美福利专区 | 日韩一区二区三区av | 国产99精品 | 国产一级一级国产 | 五月婷婷综合激情网 | 国产成人精品a视频一区www | 久在线视频 | 久久成人精品 | 久久久久久久一区 | 亚洲视频在线看 | 欧美日韩一区二区三区在线观看 | 美国成人在线 | 啪一啪操一操 | 久久久国产一区二区 | 狠狠干av| 激情一区二区三区 | 国产精品久久久久久久9999 | 日韩在线免费电影 | 精品第一区 | 久久久com | 在线观看中文字幕亚洲 | 国产精品综合视频 | chinese中国真实乱对白 | 日本三级黄色录像 | 午夜不卡一区二区 | 国产精品亲子伦av一区二区三区 | 国产亚洲欧美在线 | 在线 亚洲 欧美 | 国产精品无码专区在线观看 | 婷婷天堂 | 先锋av资源网 | 91麻豆精品国产91久久久更新资源速度超快 | 一区二区在线影院 | 日韩高清在线播放 | 日韩国产| 欧美99| 亚洲精品久久久久久久久久久久久 | 免费看黄色一级视频 | 亚洲国产伊人 | 天天宗合网 | 亚洲欧美日韩一区二区 | 一级免费视频 | 日韩电影在线一区 | 一区二区三区欧美 | 激情欧美一区二区 | 亚洲国产精品18久久 | 国产一级特黄aaa大片 | 成人在线观看av | 国产永久免费 | www久久精品 | 日本久久网 | 久久久久国产精品一区二区三区 | 三级av网站 | 日韩av在线不卡 | 亚洲视频三区 | 国产精品一区二区三区在线播放 | 成人免费视频一区二区 | 成人久久久 | 最新国产成人 | 一级片av| 成人二区| 91在线免费看| av片免费看 | 青青久草在线 | 秋霞a级毛片在线看 | 亚洲一区二区视频在线观看 | 久久精品一区二区三区四区 | 永久91嫩草亚洲精品人人 | 精品久久久久久久久久久院品网 | 一区在线看| 久久一区二区三区四区五区 | 91精品中文字幕一区二区三区 | 欧美一区视频 | 免费毛片一区二区三区久久久 | 在线草| 9久久精品 | 亚洲第一中文字幕 | 国产四区 | 一区二区不卡视频 | 久久国产视频一区二区 | 春色av| 亚洲伊人成人 | 欧美日韩在线第一页 | 久久国产精品视频 | 亚洲精品午夜aaa久久久 | 亚洲成人av在线 | 精品网站999www | 久久69精品久久久久久久电影好 | 亚洲精品国产setv | 一级a性色生活片久久毛片波多野 | www.伊人网| 欧美综合在线一区 | 午夜在线电影 | 久草精品在线 | 欧美香蕉| 精品无人乱码一区二区三区 | 国产免费一区二区三区 | 九色在线观看 | 成人在线观看免费视频 | 日韩1 | 欧美性v | 91免费看片网站 | 日韩欧美在线播放 | 国产一级片 | 男女视频免费 | 精品国产91亚洲一区二区三区www | 亚洲人成一区 | 黑人粗黑大躁护士 | 久久国产精品久久久久久电车 | 91精品久久久久久久久久 | 伊人网在线视频免费观看 | 久草福利在线视频 | 国产精品夜夜春夜夜爽久久电影 | 视频一区在线观看 | www.国产精品| 久久久91精品国产一区二区精品 | 亚洲一区精品在线 | 国产精品999 | 91在线精品视频 | 国内外成人在线视频 | 日本久久网 | 2018国产大陆天天弄 | 免费国产网站 | 亚洲精品日韩精品 | 国产一级视频在线播放 | 亚洲伦理在线 | 日本免费三片免费观看 | 欧美精品色网 | 成人在线观看av | 一级片网| 国产目拍亚洲精品99久久精品 | 亚洲欧美在线一区 | 91精品国产乱码久久久久久久久 | 中文字幕久久综合 | 亚洲一区二区三区视频 | 免费av在线网站 | 北条麻妃一区二区三区在线观看 | 男女啪啪无遮挡 | 精品久久久久久久久久久久 | 天天澡天天狠天天天做 | 国产欧美一区二区视频 | 特黄视频 | 亚洲日韩aⅴ在线视频 | 日韩久久成人 | 亚洲www啪成人一区二区 | 在线观看免费av网 | 黄色毛片视频网站 | 干干干操操操 | 日韩一区二区在线观看 | 日韩成人不卡 | 啪啪tv网站免费入口 | 欧美在线视频一区 | 欧美视频网站 | 日韩在线观看视频一区二区 | 欧美一级片在线观看 | 性做久久久 | 亚洲高清一区二区三区 | 国内精品一区二区 | 精品福利在线 | a在线免费观看 | 亚洲精品一区二区三区蜜桃久 | 亚洲免费在线视频 | 国产一区二区三区在线看 | 日韩欧美久久 | 99精品不卡| 五月婷婷色| 亚洲欧美第一页 | 日韩中文字幕电影 | 久草福利 | 国产精品欧美一区二区三区 | av中文字幕在线播放 | 91精品国产人妻国产毛片在线 | 美国黄色毛片女人性生活片 | jizz欧美大片 | 欧美一区二区三区视频 | 国产精品一区二区三区免费 | 亚洲欧美一区二区三区在线 | 能免费看av的网站 | 日韩免费在线 | 国产成人在线播放 | 91高清免费看| 天天看天天操 | 免费黄色在线 | 亚洲精品成人免费 | 亚洲综合一区二区三区 | 国产一区二区在线观看视频 | 亚洲精品乱码久久久久久不卡 | 在线成人av | 香蕉久久一区二区不卡无毒影院 | 国产精品爱久久久久久久 | av网站免费观看 | 九色在线 | 欧美a级在线观看 | 成人av免费在线观看 | 在线观看国产 | 美国黄色毛片女人性生活片 | 亚洲首页 | av在线免费播放 | 欧美视频在线免费 | 欧洲精品| 91免费看电影 | 欧美一区二区三区电影 | 久久99精品久久久久蜜臀 | 欧美日韩精品久久 | 亚洲麻豆精品 | 91av国产在线视频 | 伦理一区| 日韩大尺度电影在线观看 | 国产欧美日韩精品一区二区三区 | 成人在线不卡 | 一级免费视频 | 成人av一区二区三区 | 午夜伦理影院 | 成人免费av | 先锋影音在线观看 | 日本一区二区不卡 | 免费看的毛片 | 亚洲免费a| 亚洲视频免费 | 亚洲精片| 成人福利影院 | 午夜免费剧场 | 成人h动漫在线看 | 亚洲精品国产一区 | 精品国产一区二区三区久久久 | 国产高潮失禁喷水爽网站 | av一区二区三区四区 | 国产精品久久久久久久久久免费看 | av免费在线播放 | 日韩av一区二区三区在线 | jizz欧美大片| a毛片| 日本视频一区二区三区 | 国产精品一二区 | 簧片免费网站 | 亚洲一区二区三区免费在线 | 伊人久久婷婷 | 在线亚州 | 人人爱人人草 | 国产一区日韩欧美 | 久草视| 国产精品久久九九 | 欧洲免费av | 亚洲最新av| 国产在线免费 | 亚洲一区二区三区四区五区午夜 | 免费国产一区二区 | 97超碰在线免费 | 欧美八区| 成人福利在线观看 | 国产成在线观看免费视频 | 国产第一区二区三区 | 亚洲欧美中文字幕 | 国产亚洲精品综合一区91555 | 激情五月婷婷 | 国内外成人在线视频 | 欧美成人精品一区二区三区 | 夜夜久久| 国产99久久精品 | 亚洲精品第一页 | 毛片av片 | 国产色视频在线观看免费 | 欧美在线播放一区 | 四虎影视网址 | 狠狠的干| 国产一区视频网站 | a黄视频| 综合婷婷| 韩国三级中文字幕hd久久精品 | 激情小网站 | 国产精品毛片无码 | 午夜a v电影 | 97精品视频在线 | 性视屏 | 国产伊人99 | 亚洲福利小视频 | 毛片久久| 精品亚洲一区二区三区 | 国产成人午夜视频 | 曰韩毛片| 久久久久黄 | 久热精品视频 | 成人不卡在线 | 久久精品视频亚洲 | 国产一区 | 在线视频二区 | 台湾av在线 | 99热这里有 | 国产全黄| 中文字幕一区二区三区四区不卡 | 人干人人 | www中文字幕在线观看 | 九九九视频精品 | 国产精品网站在线观看 | 精品久久久久久久久久久 | 欧美二区三区 | 国产精品无码永久免费888 | 日韩免费 | 日韩成人影院在线观看 | 婷婷丁香激情网 | 亚洲91| 国产高清视频 | 欧美精品一级二级 | 欧美成人免费在线视频 | 亚洲精久久| 日本视频一区二区三区 | 亚洲v日韩v综合v精品v | 中文字字幕在线 | 国产精品久久久久久av公交车 | 天天干,夜夜操 | 亚洲中午字幕 | 亚洲精品国产电影 | 中文字幕在线网址 | 91社影院在线观看 | 精品国产精品国产偷麻豆 | zzzwww在线观看免 | 国产一区二区在线免费观看 | 欧美精品欧美精品系列 | 日韩久久精品 | 97av在线| 国精品一区二区三区 | 欧美午夜精品久久久久久蜜 | 国产在线网站 | а天堂中文最新一区二区三区 | 国产精品日韩欧美 | 欧美日韩国产一区二区三区不卡 | 婷婷免费在线观看 | 91精品国产91久久综合桃花 | 91麻豆精品国产91久久久资源速度 | 久久久久久久久中文字幕 | 人人射人人草 | 亚洲国产成人在线 | 亚洲人成人一区二区在线观看 | 久久天堂| 日韩成人精品视频在线观看 | 国产视频二区 | www.888www看片| 亚洲区在线| 欧美国产日韩另类 | 久久久久中文字幕 | 欧美黄色大片网站 | 欧美日韩久久久 | 中文字幕在线免费视频 | 99在线视频精品 | 国产高清视频 | 91亚洲精品乱码久久久久久蜜桃 | 日韩电影在线一区 | 日韩欧美一区二区三区免费观看 | 亚洲福利一区 | 一区二区在线免费观看 | 激情久久av一区av二区av三区 | 国产精品亚洲一区二区三区在线 | 国产欧美一区二区三区国产幕精品 | 亚洲国产婷婷香蕉久久久久久99 | 亚洲一区二区精品视频 | 欧美日韩在线一区 | 超碰伊人网 | 99久久精品免费看国产免费粉嫩 | 免费看片一区二区三区 | 精品在线一区二区三区 | 国产精品一二区 | 日韩视频中文字幕在线观看 | 色橹橹欧美在线观看视频高清 | av看片网| 天天艹综合 | 97视频在线免费观看 | 黄色av免费看 | 午夜视频一区二区 | 亚洲国产日韩在线 | 亚洲欧洲无码一区二区三区 | 欧美一区二| 黄色毛片免费看 | 国内自拍视频在线观看 | 国产一区二区日韩 | 福利精品在线观看 | 9999久久久久 | 99爱精品在线 | 欧美成人精品一区二区三区 | 欧美在线免费 | 国产欧美日韩一区 | 毛片一区二区 | 亚洲第一精品在线 | av网站推荐 | 欧美国产精品久久久 | 天天干女人| 成人av影院 | 成年人综合网 | 国产无毛| 99视频只有精品 | 欧美激情国产日韩精品一区18 | 操人网| 九一亚洲精品 | 久久久久久免费视频 | 成人免费高清视频 | 黄色一级网站 | 2020天天操| 成人在线国产 | 久久久久久久久久一区二区 | 黄色片在线免费观看 | 国产精品久久久久久久久 | 成人午夜免费视频 | 日韩小视频网站hq | 天堂一区二区三区 | 欧美日韩中文字幕 | 日韩中文字幕av | 国产亚洲精品一区二区 | 精品中文一区 | 国产欧美精品一区二区三区 | 久久国产视频精品 | 欧美成人一区二区三区片免费 | 91精品中文字幕一区二区三区 | 国产羞羞视频免费在线观看 | 欧洲精品在线观看 | 久久久精品免费观看 | 久久久久久久久久国产精品 | 国产精品视频不卡 | 久久九九精品视频 | 91亚洲精品在线观看 | 精品视频在线观看 | 国产精品一区二区在线观看 | 99久久99 | 亚洲免费在线视频 | 午夜av电影院 | 久久久久久麻豆 | 久久久tv | 久久精品一区二区三区四区 | 久久久久久久久久毛片 | 色综合99| 欧美在线视频网 | 亚洲精品乱码久久久久久蜜桃不卡 | 午夜免费观看网站 | 欧美久久久久久久久久久 | 久久新 | 日韩精品免费在线视频 | 日韩免费视频 | 天天久 | 99热精品国产 | 精品一区二区三区免费视频 | 亚洲特级 | 亚州国产| 夜夜av | 国产欧美一区二区精品久久 | 色鲁97精品国产亚洲 | 国产一级免费视频 | 超碰在线观看97 | 一区二区三区高清不卡 | 亚洲福利精品视频 | 特级淫片日本高清视频免费 | 黄色精品网站 | 国产在线h | 国产精品一区二区久久 | 米奇狠狠狠狠8877 | 国产91在线免费观看 | 国产一区二区视频在线 | 久久免费黄色网址 | 亚洲一级毛片 | 国产欧美日韩一区二区三区 | 91极品在线| 精品视频一区二区三区 | 亚洲在线| 综合网在线 | 久久久久一区二区 | 91精产国品一二三区在线观看 | 精品久久久久久久久久久下田 | 日韩成人免费 | 在线观看日韩精品 | 国产成人精品免高潮在线观看 | 国产精品国产三级国产aⅴ 精品91 | 亚洲夜幕久久日韩精品一区 | 亚洲激情一区二区 | 免费观看视频www | 欧美激情在线播放 | 亚洲精品电影在线观看 | 国产69精品99久久久久久宅男 | 日韩精品一区二 | 久热精品视频 | 精品国产一区二区三区久久久 | 国产精品久久久久久久久久久久久 | 亚洲男人网 | 久久99视频| 国产亚洲成av人片在线观看桃 | 91成人小视频 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 欧美福利在线观看 | 亚洲欧美精品一区二区 | 99久久婷婷国产综合亚洲 | av在线一区二区 | 国产精品一区二区三区在线播放 | 狠狠干天天干 | 欧美激情一区二区三级高清视频 | 亚洲最黄视频 | 日韩在线播放一区 |