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

JVM內幕:Java虛擬機詳解

云計算 虛擬化
這篇文章解釋了Java 虛擬機(JVM)的內部架構。下圖顯示了遵守 Java SE 7 規范的典型的 JVM 核心內部組件。

 [[325305]]

這篇文章解釋了Java 虛擬機(JVM)的內部架構。下圖顯示了遵守 Java SE 7 規范的典型的 JVM 核心內部組件。

 

JVM內幕:Java虛擬機詳解

 

上圖顯示的組件分兩個章節解釋。第一章討論針對每個線程創建的組件,第二章節討論了線程無關組件。

  • 線程
  • JVM 系統線程
  • 每個線程相關的
  • 程序計數器
  • 本地棧
  • 棧限制
  • 棧幀
  • 局部變量數組
  • 操作數棧
  • 動態鏈接
  • 線程共享
  • 內存管理
  • 非堆內存
  • 即時編譯
  • 方法區
  • 類文件結構
  • 類加載器
  • 更快的類加載
  • 方法區在哪里
  • 類加載器參考
  • 運行時常量池
  • 異常表
  • 符號表
  • Interned 字符串

線程

這里所說的線程指程序執行過程中的一個線程實體。JVM 允許一個應用并發執行多個線程。Hotspot JVM 中的 Java 線程與原生操作系統線程有直接的映射關系。當線程本地存儲、緩沖區分配、同步對象、棧、程序計數器等準備好以后,就會創建一個操作系統原生線程。Java 線程結束,原生線程隨之被回收。操作系統負責調度所有線程,并把它們分配到任何可用的 CPU 上。當原生線程初始化完畢,就會調用 Java 線程的 run() 方法。run() 返回時,被處理未捕獲異常,原生線程將確認由于它的結束是否要終止 JVM 進程(比如這個線程是最后一個非守護線程)。當線程結束時,會釋放原生線程和 Java 線程的所有資源。

JVM 系統線程

如果使用 jconsole 或者其它調試器,你會看到很多線程在后臺運行。這些后臺線程與觸發 public static void main(String[]) 函數的主線程以及主線程創建的其他線程一起運行。Hotspot JVM 后臺運行的系統線程主要有下面幾個:

 

JVM內幕:Java虛擬機詳解

 

線程相關組件

每個運行的線程都包含下面這些組件:

程序計數器(PC)

PC 指當前指令(或操作碼)的地址,本地指令除外。如果當前方法是 native 方法,那么PC 的值為 undefined。所有的 CPU 都有一個 PC,典型狀態下,每執行一條指令 PC 都會自增,因此 PC 存儲了指向下一條要被執行的指令地址。JVM 用 PC 來跟蹤指令執行的位置,PC 將實際上是指向方法區(Method Area)的一個內存地址。

棧(Stack)

每個線程擁有自己的棧,棧包含每個方法執行的棧幀。棧是一個后進先出(LIFO)的數據結構,因此當前執行的方法在棧的頂部。每次方法調用時,一個新的棧幀創建并壓棧到棧頂。當方法正常返回或拋出未捕獲的異常時,棧幀就會出棧。除了棧幀的壓棧和出棧,棧不能被直接操作。所以可以在堆上分配棧幀,并且不需要連續內存。

Native棧

并非所有的 JVM 實現都支持本地(native)方法,那些提供支持的 JVM 一般都會為每個線程創建本地方法棧。如果 JVM 用 C-linkage 模型實現 JNI(Java Native Invocation),那么本地棧就是一個 C 的棧。在這種情況下,本地方法棧的參數順序、返回值和典型的 C 程序相同。本地方法一般來說可以(依賴 JVM 的實現)反過來調用 JVM 中的 Java 方法。這種 native 方法調用 Java 會發生在棧(一般是 Java 棧)上;線程將離開本地方法棧,并在 Java 棧上開辟一個新的棧幀。

棧的限制

??梢允莿討B分配也可以固定大小。如果線程請求一個超過允許范圍的空間,就會拋出一個StackOverflowError。如果線程需要一個新的棧幀,但是沒有足夠的內存可以分配,就會拋出一個 OutOfMemoryError。

棧幀(Frame)

每次方法調用都會新建一個新的棧幀并把它壓棧到棧頂。當方法正常返回或者調用過程中拋出未捕獲的異常時,棧幀將出棧。更多關于異常處理的細節,可以參考下面的異常信息表章節。

每個棧幀包含:

  • 局部變量數組
  • 返回值
  • 操作數棧
  • 類當前方法的運行時常量池引用

局部變量數組

局部變量數組包含了方法執行過程中的所有變量,包括 this 引用、所有方法參數、其他局部變量。對于類方法(也就是靜態方法),方法參數從下標 0 開始,對于對象方法,位置0保留為 this。

有下面這些局部變量:

  • boolean
  • byte
  • char
  • long
  • short
  • int
  • float
  • double
  • reference
  • returnAddress

除了 long 和 double 類型以外,所有的變量類型都占用局部變量數組的一個位置。long 和 double 需要占用局部變量數組兩個連續的位置,因為它們是 64 位雙精度,其它類型都是 32 位單精度。

操作數棧

操作數棧在執行字節碼指令過程中被用到,這種方式類似于原生 CPU 寄存器。大部分 JVM 字節碼把時間花費在操作數棧的操作上:入棧、出棧、復制、交換、產生消費變量的操作。因此,局部變量數組和操作數棧之間的交換變量指令操作通過字節碼頻繁執行。比如,一個簡單的變量初始化語句將產生兩條跟操作數棧交互的字節碼。

  1. int i; 

被編譯成下面的字節碼:

  1. 0: iconst_0 // Push 0 to top of the operand stack 
  2. 1: istore_1 // Pop value from top of operand stack and store as local variable 1 

更多關于局部變量數組、操作數棧和運行時常量池之間交互的詳細信息,可以在類文件結構部分找到。

動態鏈接

每個棧幀都有一個運行時常量池的引用。這個引用指向棧幀當前運行方法所在類的常量池。通過這個引用支持動態鏈接(dynamic linking)。

C/C++ 代碼一般被編譯成對象文件,然后多個對象文件被鏈接到一起產生可執行文件或者 dll。在鏈接階段,每個對象文件的符號引用被替換成了最終執行文件的相對偏移內存地址。在 Java中,鏈接階段是運行時動態完成的。

當 Java 類文件編譯時,所有變量和方法的引用都被當做符號引用存儲在這個類的常量池中。符號引用是一個邏輯引用,實際上并不指向物理內存地址。JVM 可以選擇符號引用解析的時機,一種是當類文件加載并校驗通過后,這種解析方式被稱為饑餓方式。另外一種是符號引用在第一次使用的時候被解析,這種解析方式稱為惰性方式。無論如何 ,JVM 必須要在第一次使用符號引用時完成解析并拋出可能發生的解析錯誤。綁定是將對象域、方法、類的符號引用替換為直接引用的過程。綁定只會發生一次。一旦綁定,符號引用會被完全替換。如果一個類的符號引用還沒有被解析,那么就會載入這個類。每個直接引用都被存儲為相對于存儲結構(與運行時變量或方法的位置相關聯的)偏移量。

線程間共享

堆被用來在運行時分配類實例、數組。不能在棧上存儲數組和對象。因為棧幀被設計為創建以后無法調整大小。棧幀只存儲指向堆中對象或數組的引用。與局部變量數組(每個棧幀中的)中的原始類型和引用類型不同,對象總是存儲在堆上以便在方法結束時不會被移除。對象只能由垃圾回收器移除。

為了支持垃圾回收機制,堆被分為了下面三個區域:

  • 新生代
  • 經常被分為 Eden 和 Survivor
  • 老年代
  • 永久代

內存管理

對象和數組永遠不會顯式回收,而是由垃圾回收器自動回收。通常,過程是這樣的:

  • 新的對象和數組被創建并放入老年代。
  • Minor垃圾回收將發生在新生代。依舊存活的對象將從 eden 區移到 survivor 區。
  • Major垃圾回收一般會導致應用進程暫停,它將在三個區內移動對象。仍然存活的對象將被從新生代移動到老年代。
  • 每次進行老年代回收時也會進行永久代回收。它們之中任何一個變滿時,都會進行回收。

非堆內存

非堆內存指的是那些邏輯上屬于 JVM 一部分對象,但實際上不在堆上創建。

  • 非堆內存包括:
  • 永久代,包括:
  • 方法區
  • 駐留字符串(interned strings)

代碼緩存(Code Cache):用于編譯和存儲那些被 JIT 編譯器編譯成原生代碼的方法。

即時編譯(JIT)

Java 字節碼是解釋執行的,但是沒有直接在 JVM 宿主執行原生代碼快。為了提高性能,Oracle Hotspot 虛擬機會找到執行最頻繁的字節碼片段并把它們編譯成原生機器碼。編譯出的原生機器碼被存儲在非堆內存的代碼緩存中。通過這種方法,Hotspot 虛擬機將權衡下面兩種時間消耗:將字節碼編譯成本地代碼需要的額外時間和解釋執行字節碼消耗更多的時間。

方法區

方法區存儲了每個類的信息,比如:

  • Classloader 引用
  • 運行時常量池
  • 數值型常量
  • 字段引用
  • 方法引用
  • 屬性
  • 字段數據
  • 字段名
  • 類型
  • 修飾符
  • 屬性(Attribute)
  • 針對每個字段的信息
  • 方法數據
  • 方法名
  • 返回值類型
  • 參數類型(按順序)
  • 修飾符
  • 屬性
  • 每個方法
  • 方法代碼
  • 字節碼
  • 操作數棧大小
  • 局部變量大小
  • 局部變量表
  • 異常表
  • 每個異常處理器
  • 開始點
  • 結束點
  • 異常處理代碼的程序計數器(PC)偏移量
  • 被捕獲的異常類對應的常量池下標
  • 每個方法

所有線程共享同一個方法區,因此訪問方法區數據的和動態鏈接的進程必須線程安全。如果兩個線程試圖訪問一個還未加載的類的字段或方法,必須只加載一次,而且兩個線程必須等它加載完畢才能繼續執行。

類文件結構

一個編譯后的類文件包含下面的結構:

 

JVM內幕:Java虛擬機詳解

 

 

JVM內幕:Java虛擬機詳解

 

可以用 javap 查看編譯后的 java class 文件字節碼。

如果你編譯下面這個簡單的類:

  1. package org.jvminternals; 
  2. public class SimpleClass { 
  3.  public void sayHello() { 
  4.  System.out.println("Hello"); 
  5.  } 

運行下面的命令,就可以得到下面的結果輸出: javap -v -p -s -sysinfo -constants classes/org/jvminternals/SimpleClass.class。

 

JVM內幕:Java虛擬機詳解

 

 

JVM內幕:Java虛擬機詳解

 

這個 class 文件展示了三個主要部分:常量池、構造器方法和 sayHello 方法。

  • 常量池:提供了通常由符號表提供的相同信息,詳細描述見下文。
  • 方法:每一個方法包含四個區域,
  • 簽名和訪問標簽
  • 字節碼
  • LineNumberTable:為調試器提供源碼中的每一行對應的字節碼信息。上面的例子中,Java 源碼里的第 6 行與 sayHello 函數字節碼序號 0 相關,第 7 行與字節碼序號 8 相關。
  • LocalVariableTable:列出了所有棧幀中的局部變量。上面兩個例子中,唯一的局部變量就是 this。

這個 class 文件用到下面這些字節碼操作符:

 

JVM內幕:Java虛擬機詳解

 

跟任何典型的字節碼一樣,操作數與局部變量、操作數棧、運行時常量池的主要交互如下所示。

構造器函數包含兩個指令。首先,this 變量被壓棧到操作數棧,然后父類的構造器函數被調用,而這個構造器會消費 this,之后 this 被彈出操作數棧。

 

JVM內幕:Java虛擬機詳解

 

sayHello() 方法更加復雜,正如之前解釋的那樣,因為它需要用運行時常量池中的指向符號引用的真實引用。第一個操作碼 getstatic 從System類中將out靜態變量壓到操作數棧。下一個操作碼 ldc 把字符串 “Hello” 壓棧到操作數棧。最后 invokevirtual 操作符會調用 System.out 變量的 println 方法,從操作數棧作彈出”Hello” 變量作為 println 的一個參數,并在當前線程開辟一個新棧幀。

 

JVM內幕:Java虛擬機詳解

 

類加載器

JVM 啟動時會用 bootstrap 類加載器加載一個初始化類,然后這個類會在public static void main(String[])調用之前完成鏈接和初始化。執行這個方法會執行加載、鏈接、初始化需要的額外類和接口。

加載(Loading)是這樣一個過程,找到代表這個類的 class 文件或根據特定的名字找到接口類型,然后讀取到一個字節數組中。接著,這些字節會被解析檢驗它們是否代表一個 Class 對象并包含正確的 major、minor 版本信息。直接父類的類和接口也會被加載進來。這些操作一旦完成,類或者接口對象就從二進制表示中創建出來了。

鏈接(Linking)是校驗類或接口并準備類型和父類父接口的過程。鏈接過程包含三步:校驗(verifying)、準備(preparing)、部分解析(optionally resolving)。

校驗會確認類或者接口表示是否結構正確,以及是否遵循 Java 語言和 JVM 的語義要求,比如會進行下面的檢查:

  • 格式一致且格式化正確的符號表
  • final 方法和類沒有被重載
  • 方法遵循訪問控制關鍵詞
  • 方法參數的數量、類型正確
  • 字節碼沒有不當的操作棧數據
  • 變量在讀取之前被初始化過
  • 變量值的類型正確

在驗證階段做這些檢查意味著不需要在運行階段做這些檢查。鏈接階段的檢查減慢了類加載的速度,但是它避免了執行這些字節碼時的多次檢查。

準備過程包括為靜態存儲和 JVM 使用的數據結構(比如方法表)分配內存空間。靜態變量創建并初始化為默認值,但是初始化代碼不在這個階段執行,因為這是初始化過程的一部分。

解析是可選的階段。它包括通過加載引用的類和接口來檢查這些符號引用是否正確。如果不是發生在這個階段,符號引用的解析要等到字節碼指令使用這個引用的時候才會進行。

類或者接口初始化由類或接口初始化方法的執行組成。

 

JVM內幕:Java虛擬機詳解

 

JVM 中有多個類加載器,分飾不同的角色。每個類加載器由它的父加載器加載。bootstrap 加載器除外,它是所有最頂層的類加載器。

  • Bootstrap 加載器一般由本地代碼實現,因為它在 JVM 加載以后的早期階段就被初始化了。bootstrap 加載器負責載入基礎的 Java API,比如包含 rt.jar。它只加載擁有較高信任級別的啟動路徑下找到的類,因此跳過了很多普通類需要做的校驗工作。
  • Extension 加載器加載了標準 Java 擴展 API 中的類,比如 security 的擴展函數。
  • System 加載器是應用的默認類加載器,比如從 classpath 中加載應用類。
  • 用戶自定義類加載器也可以用來加載應用類。使用自定義的類加載器有很多特殊的原因:運行時重新加載類或者把加載的類分隔為不同的組,典型的用法比如 web 服務器 Tomcat。

 

JVM內幕:Java虛擬機詳解

 

加速類加載

共享類數據(CDS)是Hotspot JVM 5.0 的時候引入的新特性。在 JVM 安裝過程中,安裝進程會加載一系列核心 JVM 類(比如 rt.jar)到一個共享的內存映射區域。CDS 減少了加載這些類需要的時間,提高了 JVM 啟動的速度,允許這些類被不同的 JVM 實例共享,同時也減少了內存消耗。

方法區在哪里

The Java Virtual Machine Specification Java SE 7 Edition 中寫得很清楚:“盡管方法區邏輯上屬于堆的一部分,簡單的實現可以選擇不對它進行回收和壓縮。”。Oracle JVM 的 jconsle 顯示方法區和 code cache 區被當做為非堆內存,而 OpenJDK 則顯示 CodeCache 被當做 VM 中對象堆(ObjectHeap)的一個獨立的域。

Classloader 引用

所有的類加載之后都包含一個加載自身的加載器的引用,反過來每個類加載器都包含它們加載的所有類的引用。

運行時常量池

JVM 維護了一個按類型區分的常量池,一個類似于符號表的運行時數據結構。盡管它包含更多數據。Java 字節碼需要數據。這個數據經常因為太大不能直接存儲在字節碼中,取而代之的是存儲在常量池中,字節碼包含這個常量池的引用。運行時常量池被用來上面介紹過的動態鏈接。

常量池中可以存儲多種類型的數據:

  • 數字型
  • 字符串型
  • 類引用型
  • 域引用型
  • 方法引用

示例代碼如下:

  1. Object foo = new Object(); 

寫成字節碼將是下面這樣:

  1. 0: new #2 // Class java/lang/Object 
  2. 1: dup 
  3. 2: invokespecial #3 // Method java/ lang/Object "<init>"( ) V 

new 操作碼的后面緊跟著操作數 #2 。這個操作數是常量池的一個索引,表示它指向常量池的第二個實體。第二個實體是一個類的引用,這個實體反過來引用了另一個在常量池中包含 UTF8 編碼的字符串類名的實體(// Class java/lang/Object)。然后,這個符號引用被用來尋找 java.lang.Object 類。new 操作碼創建一個類實例并初始化變量。新類實例的引用則被添加到操作數棧。dup 操作碼創建一個操作數棧頂元素引用的額外拷貝。最后用 invokespecial 來調用第 2 行的實例初始化方法。操作碼也包含一個指向常量池的引用。初始化方法把操作數棧出棧的頂部引用當做此方法的一個參數。最后這個新對象只有一個引用,這個對象已經完成了創建及初始化。

如果你編譯下面的類:

  1. package org.jvminternals; 
  2. public class SimpleClass { 
  3.   
  4.  public void sayHello() { 
  5.  System.out.println("Hello"); 
  6.  } 
  7.   

生成的類文件常量池將是這個樣子:

 

JVM內幕:Java虛擬機詳解

 

這個常量池包含了下面的類型:

 

JVM內幕:Java虛擬機詳解

 

異常表

異常表像這樣存儲每個異常處理信息:

  • 起始點(Start point)
  • 結束點(End point)
  • 異常處理代碼的 PC 偏移量
  • 被捕獲異常的常量池索引

如果一個方法有定義 try-catch 或者 try-finally 異常處理器,那么就會創建一個異常表。它為每個異常處理器和 finally 代碼塊存儲必要的信息,包括處理器覆蓋的代碼塊區域和處理異常的類型。

當方法拋出異常時,JVM 會尋找匹配的異常處理器。如果沒有找到,那么方法會立即結束并彈出當前棧幀,這個異常會被重新拋到調用這個方法的方法中(在新的棧幀中)。如果所有的棧幀都被彈出還沒有找到匹配的異常處理器,那么這個線程就會終止。如果這個異常在最后一個非守護進程拋出(比如這個線程是主線程),那么也有會導致 JVM 進程終止。

Finally 異常處理器匹配所有的異常類型,且不管什么異常拋出 finally 代碼塊都會執行。在這種情況下,當沒有異常拋出時,finally 代碼塊還是會在方法最后執行。這種靠在代碼 return 之前跳轉到 finally 代碼塊來實現。

符號表

除了按類型來分的運行時常量池,Hotspot JVM 在永久代還包含一個符號表。這個符號表是一個哈希表,保存了符號指針到符號的映射關系(也就是 Hashtable

引用計數被用來控制一個符號從符號表從移除的過程。比如當一個類被卸載時,它擁有的在常量池中所有符號的引用計數將減少。當符號表中的符號引用計數為 0 時,符號表會認為這個符號不再被引用,將從符號表中卸載。符號表和后面介紹的字符串表都被保存在一個規范化的結構中,以便提高效率并保證每個實例只出現一次。

字符串表

Java 語言規范要求相同的(即包含相同序列的 Unicode 指針序列)字符串字面量必須指向相同的 String 實例。除此之外,在一個字符串實例上調用 String.intern() 方法的返回引用必須與字符串是字面量時的一樣。因此,下面的代碼返回 true:

  1. ("j" + "v" + "m").intern() == "jvm" 

Hotspot JVM 中 interned 字符串保存在字符串表中。字符串表是一個哈希表,保存著對象指針到符號的映射關系(也就是Hashtable

當類加載時,字符串字面量被編譯器自動 intern 并加入到符號表。除此之外,String 類的實例可以調用 String.intern() 顯式地 intern。當調用 String.intern() 方法時,如果符號表已經包含了這個字符串,那么就會返回符號表里的這個引用,如果不是,那么這個字符串就被加入到字符串表中同時返回這個引用。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2010-09-17 15:12:57

JVMJava虛擬機

2009-06-04 16:27:39

Java虛擬機JVMGC

2011-06-22 13:35:55

JVM

2018-10-25 09:04:56

Java虛擬機JVM

2010-09-25 15:13:40

JVMJava虛擬機

2020-01-22 16:40:48

Java開發代碼

2011-11-30 14:12:05

JavaJVM虛擬機

2020-01-06 10:58:18

JvmGC機制虛擬機

2010-09-25 16:12:45

JVM虛擬機

2020-07-29 14:52:48

JVM虛擬機內存

2009-12-11 14:00:09

VMware虛擬機

2024-03-29 11:42:21

Java虛擬機

2009-08-07 11:46:57

JAVA虛擬機安裝設置

2015-08-20 11:01:22

Java虛擬機GC算法種類

2024-03-26 07:30:07

Java虛擬機源文件

2010-03-15 14:24:59

StackHeapJVM

2015-03-12 14:06:08

Java虛擬機平臺原理

2020-07-29 14:15:04

JavaJvm算法

2018-02-06 22:18:47

Java虛擬機面試

2012-05-18 10:22:23

點贊
收藏

51CTO技術棧公眾號

麻豆tv在线| 伊人网视频在线| 亚洲电影男人天堂| 在线视频亚洲一区| 日韩最新中文字幕| 日本加勒比一区| 久久精品九九| 超碰97人人做人人爱少妇| 中文字幕第3页| 国产综合色激情| 亚洲图片自拍偷拍| 色噜噜狠狠一区二区三区| 精品国自产拍在线观看| 久久久久国产一区二区| 久久国产精品网站| www.狠狠爱| 国产精品美女在线观看直播| 欧美午夜精品一区二区三区| 日韩精品一区二区免费| h视频在线观看免费| 成人一级视频在线观看| 国产精品三级美女白浆呻吟| 国产五月天婷婷| 99国产精品一区二区| 亚洲精品动漫久久久久| 天堂在线一区二区三区| 电影网一区二区| 亚洲一区二区三区美女| 亚洲一区二区免费视频软件合集 | 日本大香伊一区二区三区| 亚洲 欧洲 日韩| 高清福利在线观看| 99九九99九九九视频精品| 亚洲free性xxxx护士白浆| 欧美另类高清videos的特点| 国产偷自视频区视频一区二区| 久久这里只有精品99| 少妇精品无码一区二区免费视频 | 精品国产a毛片| 亚洲视频一二三四| a成人v在线| 一本到高清视频免费精品| 欧美午夜性视频| 欧美精品videossex少妇| 国产精品久久久久久亚洲毛片| 久久亚洲综合网| 天天插天天干天天操| 国产精品正在播放| 91精品综合久久| 国产美女裸体无遮挡免费视频| 日韩不卡一二三区| 日韩av免费在线播放| 久久一区二区三区视频| 亚洲伦伦在线| 国内揄拍国内精品| 黄网站免费在线| 在线成人亚洲| 7m精品福利视频导航| 日本一级淫片色费放| 伊人久久亚洲美女图片| 国内精品小视频| 日韩免费不卡视频| 国产精品久久久久久模特| 97视频免费看| 福利网址在线观看| 日韩有码一区二区三区| 国产精国产精品| 中文在线字幕免费观| 热久久国产精品| 国产精品一区二区三区久久久| 91成人一区二区三区| 国产一区二区三区黄视频| 亚洲一区中文字幕在线观看| 国产黄a三级三级三级| 高清国产午夜精品久久久久久| 国产精品区一区二区三含羞草| 欧美自拍第一页| 91小视频在线| 性欧美videosex高清少妇| 日本成a人片在线观看| 尤物视频一区二区| 国产午夜大地久久| 欧美黄色三级| 4438x亚洲最大成人网| 一级黄色大片免费看| 精品国产一区二区三区成人影院 | 国产手机精品在线| 欧美69xxxxx| 中文字幕日韩精品一区| 99视频精品全部免费看| 超碰成人av| 欧美性大战久久久久久久蜜臀| 在线看免费毛片| 国产ts一区| 在线播放精品一区二区三区 | 99r国产精品视频| 天天射天天操天天干| 久久精品一区二区三区四区| 异国色恋浪漫潭| 涩涩涩视频在线观看| 欧美日韩大陆一区二区| 亚洲精品激情视频| 欧美在线电影| 久久久亚洲影院你懂的| 中文字幕黄色av| yourporn久久国产精品| 亚洲欧美国产精品桃花| 91九色在线看| 91精品久久久久久久99蜜桃| 亚洲av片不卡无码久久| 一精品久久久| 国产精品嫩草影院久久久| 丁香花免费高清完整在线播放| 国产亚洲精品资源在线26u| 8x8ⅹ国产精品一区二区二区| 男人皇宫亚洲男人2020| 欧美成人女星排行榜| 五月天婷婷丁香网| 午夜一区二区三区不卡视频| 91丝袜脚交足在线播放| av大片在线观看| 欧美性猛交xxxx富婆弯腰| 久久久久久久久久久影视| 精品久久久久久久久久久aⅴ| 久久久久久亚洲精品| 一区二区的视频| 久久人人超碰精品| 欧美亚洲黄色片| 精品视频一区二区三区| 中文日韩电影网站| 天干夜夜爽爽日日日日| av综合在线播放| 人妻无码一区二区三区四区| 成人亚洲精品| 久久精品亚洲国产| 中文字幕+乱码+中文乱码91| 久久久久久久久久电影| 黄色免费福利视频| 国产福利资源一区| 欧美日韩成人网| 99久久久无码国产精品免费| 国产精品毛片久久久久久| 99蜜桃臀久久久欧美精品网站| 第四色中文综合网| 欧美精品videosex牲欧美| 精品国产av一区二区三区| 国产精品久久久久久久久快鸭 | 中文字幕无码精品亚洲35| 日韩亚洲精品在线观看| 久久视频在线视频| 国产熟女一区二区三区四区| 国产精品的网站| 日韩va在线观看| 婷婷综合激情| 亚洲自拍在线观看| 4438x成人网全国最大| 欧美一区二区美女| 久久久国产精品人人片| 成人在线视频首页| 欧美一区二区三区爽大粗免费| 欧美大胆a级| 欧美在线欧美在线| 国产高清免费在线播放| 欧美三片在线视频观看 | 手机在线电影一区| 国产一区二区在线免费| 九色porny在线| 欧美大胆人体bbbb| www.国产高清| 国产精品女主播在线观看| 国产日韩欧美久久| 欧美在线1区| 国产另类第一区| 欧美羞羞视频| www国产精品视频| 亚洲精品18p| 欧美性猛交xxxx| 国产免费嫩草影院| 国产成人午夜精品5599| 欧美成人三级在线视频| 欧美极品在线观看| 成人精品视频久久久久| 麻豆福利在线观看| 亚洲欧美中文字幕| 国产欧美熟妇另类久久久 | 欧美久久久精品| 日韩欧美在线番号| 欧美日韩成人在线| www.99re7.com| 日本一区二区综合亚洲| 佐山爱在线视频| 亚洲在线一区| 欧美xxxx吸乳| 日韩丝袜视频| 91精品视频观看| 精精国产xxx在线视频app| 在线观看国产精品淫| 亚洲国产视频一区二区三区| 色综合av在线| 久久成人在线观看| 久久久久久97三级| 国产老头和老头xxxx×| 六月婷婷一区| 韩日视频在线观看| 色呦哟—国产精品| 精品视频导航| 欧美专区一区| 国产精品免费一区二区三区都可以| 国产精品探花在线| 日韩亚洲第一页| 你懂得网站在线| 精品免费国产二区三区| 中国黄色一级视频| 疯狂欧美牲乱大交777| 婷婷久久综合网| 国产农村妇女精品| 黑丝av在线播放| 国产成人精品一区二区三区四区 | wwwwwxxxx日本| 男人的天堂成人在线| 欧美黄网在线观看| 欧美韩国日本在线观看| 欧美日韩精品免费观看| 超碰成人免费| 91精品久久久久久久久| 日韩高清中文字幕一区二区| 91精品国产一区| 草莓视频丝瓜在线观看丝瓜18| 不卡av在线播放| 国产秀色在线www免费观看| 国产亚洲欧洲黄色| 日本天堂影院在线视频| 亚洲成人精品久久| 午夜久久久久久久久久| 欧美一区二区在线不卡| 88av在线视频| 制服丝袜亚洲色图| 中文字幕一二区| 欧美日韩一级大片网址| 波多野结衣视频在线观看| 欧美日韩加勒比精品一区| 香蕉视频一区二区| 亚洲国产精品一区二区久久恐怖片| 日本黄色片免费观看| 国产精品国产自产拍高清av| 青娱乐国产视频| 欧美国产日本视频| 成人在线手机视频| 国产精品毛片大码女人| 日韩一区二区三区四区视频| 中文子幕无线码一区tr| 综合 欧美 亚洲日本| 国产精品视频看| 小泽玛利亚一区| 亚洲精品国产第一综合99久久| 午夜激情福利网| 一区二区三区四区乱视频| 欧美成人一区二区三区高清| 亚洲伊人伊色伊影伊综合网| 亚洲国产精一区二区三区性色| 亚洲成a人片综合在线| 天天操天天射天天爽| 欧美日韩中文字幕日韩欧美| av毛片在线免费观看| 欧美色男人天堂| 国产富婆一级全黄大片| 亚洲精品一区二区三区在线观看| 天天色棕合合合合合合合| 亚洲色图国产精品| 免费黄色在线网站| 欧美精品在线视频观看| segui88久久综合9999| 秋霞成人午夜鲁丝一区二区三区| 精品欧美日韩精品| 成人在线精品视频| 超碰成人免费| 午夜午夜精品一区二区三区文| 五月天激情综合网| 日本a在线免费观看| 日日夜夜精品视频免费| 日韩av影视大全| 成a人片亚洲日本久久| 中文字幕av网址| 中文字幕亚洲精品在线观看| 国产一级一片免费播放放a| 黑人狂躁日本妞一区二区三区| 中国女人真人一级毛片| 日韩小视频在线观看专区| 亚洲三级黄色片| 久久久www成人免费精品| 免费毛片b在线观看| 国产噜噜噜噜久久久久久久久| 高潮按摩久久久久久av免费| 日本视频一区在线观看| 欧美xxx在线观看| av片中文字幕| 风流少妇一区二区| 国产破处视频在线观看| 亚洲成av人片一区二区三区| 中文字幕在线网址| 亚洲第一网中文字幕| av中文天堂在线| 97在线免费观看| 精品一区二区三区中文字幕视频 | 欧美欧美全黄| 性刺激的欧美三级视频| 北条麻妃一区二区三区| 国产美女高潮视频| 色又黄又爽网站www久久| 亚洲不卡免费视频| 最新国产精品拍自在线播放 | 亚洲国产mv| 国产高清av片| 欧美激情综合在线| 亚洲第一精品在线观看| a篇片在线观看网站| 免费人成精品欧美精品| 亚洲国产精品网站| 午夜免费看视频| 久久精品二区亚洲w码| 你懂得在线视频| 伊人一区二区三区| 一区二区 亚洲| 中文字幕亚洲欧美日韩在线不卡| 国内精彩免费自拍视频在线观看网址 | 性生交大片免费看l| 国产精品丝袜一区| 国产一区二区视频免费| 亚洲精品国产拍免费91在线| 欧美精品videosex| 亚洲一区中文字幕| 91精品国产91久久综合 | 国产高清成人在线| 日本精品久久久久中文| 色婷婷久久一区二区三区麻豆| 色窝窝无码一区二区三区成人网站| 欧美黑人xxxx| 91精品久久久久久综合五月天| 在线观看成人免费| 国产综合久久久久影院| 欧美a级片免费看| 欧美另类z0zxhd电影| www在线免费观看| 国产精品精品视频| 欧美日韩国产免费观看视频| 手机看片福利日韩| 国产日韩高清在线| 波多野结衣视频在线看| 国产一区二区精品丝袜| 日韩高清成人| 亚洲资源在线网| 老鸭窝一区二区久久精品| 自拍偷拍第9页| 欧美一区二区三区视频在线观看 | 亚洲视频中文字幕| 国产一区二区视频免费观看| 日韩中文字幕精品| 只有精品亚洲| 蜜臀av性久久久久蜜臀av| 国产精品一区二区91| 欧美人妻精品一区二区三区| 精品国产亚洲一区二区三区在线观看| 超碰中文在线| 欧美日韩亚洲一区二区三区在线观看 | 天堂中文在线看| 国产成人精品久久亚洲高清不卡| 国产精品日韩精品中文字幕| 中文字幕视频在线免费观看| 1024亚洲合集| 亚洲精品国产手机| 欧美与欧洲交xxxx免费观看 | 日韩中文字幕在线免费观看| 国产一区二区三区免费在线| www.日本三级| 26uuu亚洲| 一区二区不卡视频在线观看| 欧美成人剧情片在线观看| 粉嫩久久久久久久极品| 免费在线观看的毛片| √…a在线天堂一区| 免费看国产片在线观看| 日韩av电影国产| 91精品观看| 真人bbbbbbbbb毛片| 欧美三区在线视频| 国产高清在线a视频大全| 日本不卡久久| 国内精品久久久久影院薰衣草| 日本免费在线播放| 国产亚洲欧美日韩美女| 亚州一区二区| 97公开免费视频| 亚洲韩国精品一区| 高清在线观看av| 国产一区二区在线网站| 全国精品久久少妇| 日本亚洲色大成网站www久久| 最好看的2019的中文字幕视频| 91成人午夜| 制服丝袜综合网|