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

淺談虛擬機內存區

云計算 虛擬化
我們在編寫程序時,經常會遇到OOM(out of Memory)以及內存泄漏等問題。為了避免出現這些問題,我們首先必須對JVM的內存劃分有個具體的認識。JVM將內存主要劃分為:方法區、虛擬機棧、本地方法棧、堆、程序計數器。

 1. Java 虛擬機內存區概述

我們在編寫程序時,經常會遇到OOM(out of Memory)以及內存泄漏等問題。為了避免出現這些問題,我們首先必須對JVM的內存劃分有個具體的認識。JVM將內存主要劃分為:方法區、虛擬機棧、本地方法棧、堆、程序計數器。

2. Java 虛擬機運行時數據區

2.1. 運行時數據區劃分

2.1.1 運行時數據區圖

 

2.1.2 運行時數據區包括

  • 方法區(Method Area)
  • 虛擬機棧(VM Stack)
  • 本地方法棧(Native Method Stack)
  • 堆(Heap)
  • 程序計算器(Program Counter Register)

2.2. 方法區(Method Area)

2.2.1 方法區的概念

方法區又叫靜態區,存放的是已加載的類的基本信息、常量、靜態變量等。它是各個線程共享區域。

比方說我們在寫Java代碼時,每個線程度可以訪問同一個類的靜態變量對象。由于使用反射機制的原因,虛擬機很難推測哪那個類信息不再使用,因此這塊區域的回收很難。

2.2.1.1 靜態塊和非靜態塊有什么區別?

  • 類(Class)和對象(Object)的區別與聯系?
  • 為什么靜態塊中不能使用this、super關鍵字?
  • 為什么java的靜態方法可以直接用類名調用?

2.2.2 方法區的特點

線程間共享區域

2.2.3 方法區的異常

對這塊區域主要是針對常量池回收,值得注意的是JDK1.7已經把常量池轉移到堆里面了。同樣,當方法區無法滿足內存分配需求時,會拋出OutOfMemoryError。制造方法區內存溢出,注意,必須在JDK1.6及之前版本才會導致方法區溢出,原因后面解釋,執行之前,可以把虛擬機的參數-XXpermSize和-XX:MaxPermSize限制方法區大小。

代碼清單如下:

  1. public static void printOOM() { 
  2.  List<String> list = new ArrayList<String>(); 
  3.  int i = 0; 
  4.  while (true) { 
  5.  list.add(String.valueOf(i).intern()); 
  6.  } 

輸出異常結果:

  1. Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
  2.  at java.util.Arrays.copyOf(Arrays.java:2245) 
  3.  at java.util.Arrays.copyOf(Arrays.java:2219) 
  4.  at java.util.ArrayList.grow(ArrayList.java:242) 
  5.  at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216) 
  6.  at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208) 
  7.  at java.util.ArrayList.add(ArrayList.java:440) 
  8.  at com.vprisk.knowledgeshare.MethodAreExample.main(MethodAreExample.java:15) 
  9.  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
  10.  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
  11.  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
  12.  at java.lang.reflect.Method.invoke(Method.java:606) 
  13.  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

備注:網上的例子運行后會拋出java.lang.OutOfMemoryError:PermGen space異常。

2.2.3.1 關于String的intern()函數

intern()的作用:

如果當前的字符串在常量池中不存在,則放入到常量池中。

上面的代碼不斷將字符串添加到常量池,最終肯定會導致內存不足,拋出方法區的OOM。解釋一下,為什么必須將上面的代碼在JDK1.6之前運行。我們前面提到JDK1.7后,把常量池放入到堆空間中,這導致intern()函數的功能不同,代碼清單如下:

  1. public static void testInternMethod(){ 
  2.  String str1 =new StringBuilder("hua").append("chao").toString(); 
  3.  System.out.println(str1.intern()==str1); 
  4.  String str2=new StringBuilder("ja").append("va").toString(); 
  5.  System.out.println(str2.intern()==str2); 

在場景jdk6,輸出結果:

  1. false , false 

在場景jdk7,輸出結果:

  1. true , false 

為什么了?

原因是在JDK1.6中,intern()方法會把***遇到的字符串實例復制到常量池中,返回的也是常量池中的字符串的引用,而StringBuilder創建的字符串實例是在堆上面,所以必然不是同一個引用,返回false。在JDK1.7中,intern方法不再復制實例,常量池中只保存***出現的實例的引用,因此intern()返回的引用和由StringBuilder創建的字符串實例是同一個。為什么對str2比較返回的是false呢?這是因為,JVM中內部在加載類的時候,就已經有”java”這個字符串,不符合“***出現”的原則,因此返回false。

2.2.4 方法區的作用

方法區存放的是類信息、常量、靜態變量等,是各個線程共享區域

2.2.5 方法區的運用

通過過設置虛擬機的參數 -XXpermSize 以及 -XX:MaxPermSize 限制方法區大小

2.2.6 方法區的使用場景

2.3. 虛擬機棧(VM Stack)

2.3.1 虛擬機棧的概念

虛擬機棧描述的是Java方法執行的內存模型:

每個方法被執行的時候都會同時創建一個棧幀 (StackFrame)用于存儲局部變量表、操作棧、動態鏈接、方法出口等信息。每一個方法被調用直至執行完成的過程,就對應著一個棧幀在虛擬機棧中從入棧到出棧的過程

2.3.1.1 局部變量表

局部變量表存放了編譯器克制的各種基本數據類型(boolean、byte、char、short、int、float、long、double)、對象引用(Object reference)和字節碼指令地址(returnAddress類型)。

2.3.1.1 操作棧

操作數棧也常被稱為操作棧,它是一個后入先出(Last In First Out, LIFO)棧。同局部變量表一樣,操作數棧的***深度也在編譯的時候被寫入到Code屬性的max_stacks數據項之中。操作數棧的每一個元素可以是任意的Java數據類型,包括long和double。32位數據類型所占的棧容量為1,64位數據類型所占的棧容量為2。在方法執行的任何時候,操作數棧的深度都不會超過在max_stacks數據項中設定的***值。

當一個方法剛剛開始執行的時候,這個方法的操作數棧是空的,在方法的執行過程中,會有各種字節碼指令向操作數棧中寫入和提取內容,也就是入棧出棧操作。例如,在做算術運算的時候是通過操作數棧來進行的,又或者在調用其他方法的時候是通過操作數棧來進行參數傳遞的。

舉個例子,整數加法的字節碼指令iadd在運行的時候要求操作數棧中最接近棧頂的兩個元素已經存入了兩個int型的數值,當執行這個指令時,會將這兩個int值和并相加,然后將相加的結果入棧。

操作數棧中元素的數據類型必須與字節碼指令的序列嚴格匹配,在編譯程序代碼的時候,編譯器要嚴格保證這一點,在類校驗階段的數據流分析中還要再次驗證這一點。再以上面的iadd指令為例,這個指令用于整型數加法,它在執行時,最接近棧頂的兩個元素的數據類型必須為int型,不能出現一個long和一個float使用iadd命令相加的情況。

2.3.1.1 動態鏈接

每個棧幀都包含一個指向運行時常量池中該棧幀所屬方法的引用,持有這個引用是為了支持方法調用過程中的動態連接。我們知道Class文件的常量池有存有大量的符號引用,字節碼中的方法調用指令就以常量池中指向方法的符號引用為參數。這些符號引用一部分會在類加載階段或***次使用的時候轉化為直接引用,這種轉化稱為靜態解析。另外一部分將在每一次的運行期間轉化為直接引用,這部分稱為動態連接。

2.3.2 虛擬機棧的特點

  • 線程私有
  • 生命周期與線程相同

2.3.3 虛擬機棧的異常

2.3.3.1 一種是StackOverflowError

當前線程如果請求的棧深度大于虛擬機所允許的深度時,則會拋出該異常。例如,將一個函數反復遞歸自己,最終會出現棧溢出錯誤(StackOverflowError)。

代碼清單如下:

  1. public class StackOverflowErrorDemo { 
  2.  public static void main(String []args){ 
  3.  printStackOverflowError(); 
  4.  } 
  5.  public static void printStackOverflowError(){ 
  6.  printStackOverflowError(); 
  7.  } 

輸出異常結果:

  1. Exception in thread "main" java.lang.StackOverflowError 
  2. stack length:9482 
  3.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  4.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  5.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  6.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  7.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  8.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  9.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  10.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 
  11.  at com.itech.jvm.demo.StackOverflowErrorDemo.printStackOverflowError(StackOverflowErrorDemo.java:22) 

需要說明的是,在單個線程環境下,無論是棧幀太大,還是虛擬機棧容量太小,當內存無法分配時,虛擬機都會拋出 StackOverflowError 異常。

2.3.3.2 一種是OOM異常

當虛擬機棧支持動態擴展時,如果無法申請到足夠多的內存時就會拋出OOM異常。代碼清單如下:

  1. public class VMOOMDemo { 
  2.  public static void main(String[] args) throws Throwable { 
  3.  VMOOMDemo demo = new VMOOMDemo(); 
  4.  demo.printVMOOM(); 
  5.  } 
  6.  public void printVMOOM() { 
  7.  while (true) { 
  8.  new Thread() { 
  9.  public void run() { 
  10.  while (true) { 
  11.  } 
  12.  } 
  13.  }.start(); 
  14.  } 
  15.  } 

這個例子慎用...

本例通過不斷地建立線程的方式產生內存溢出異常。但是,這樣產生的內存溢出異常與??臻g是否足夠大并不存在任何聯系,或者準確地說,在這種情況下,給每個線程的棧分配的內存越大,反而越容易產生內存溢出異常。 其原因是操作系統分配給每個進程的內存是有限制的,如32位的Windows限制為2GB。。

2.3.4 虛擬機棧的作用

用于存儲局部變量、操作棧、動態鏈接、方法出口

2.3.5 虛擬機棧的運用

對于32位的jvm,默認大小為256kb, 而64位的jvm, 默認大小為512kb,可以通過-Xss設置虛擬機棧的***值。不過如果設置過大,會影響到可創建的線程數量。

2.3.6 虛擬機棧的使用場景

2.4. 本地方法棧(Native Method Stack)

2.4.1 本地方法棧的概念

本地方法棧與虛擬機棧所發揮的作用很相似,他們的區別在于虛擬機棧為執行Java代碼方法服務,而本地方法棧是為Native方法服務。與虛擬機棧一樣,本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常。

2.4.2 本地方法棧的特點

  • 線程私有
  • 為Native方法服務

2.4.3 本地方法棧的異常

與虛擬機棧一樣,本地方法棧也會拋出StackOverflowError和OutOfMemoryError異常。

2.4.4 本地方法棧的作用

2.4.4.1 與java環境外交互

有時java應用需要與java外面的環境交互。這是本地方法存在的主要原因,你可以想想java需要與一些底層系統如操作系統或某些硬件交換信息時的情況。本地方法正是這樣一種交流機制:它為我們提供了一個非常簡潔的接口,而且我們無需去了解java應用之外的繁瑣的細節。

2.4.4.2 與操作系統交互

JVM支持著java語言本身和運行時庫,它是java程序賴以生存的平臺,它由一個解釋器(解釋字節碼)和一些連接到本地代碼的庫組成。然而不管怎樣,它畢竟不是一個完整的系統,它經常依賴于一些底層(underneath在下面的)系統的支持。這些底層系統常常是強大的操作系統。通過使用本地方法,我們得以用java實現了jre的與底層系統的交互,甚至JVM的一些部分就是用C寫的,還有,如果我們要使用一些java語言本身沒有提供封裝的操作系統的特性時,我們也需要使用本地方法。

Sun's Java Sun的解釋器是用C實現的,這使得它能像一些普通的C一樣與外部交互。jre大部分是用java實現的,它也通過一些本地方法與外界交互。例如:類java.lang.Thread

的 setPriority()方法是用java實現的,但是它實現調用的是該類里的本地方法setPriority0()。這個本地方法是用C實現的,并被植入JVM內部,在Windows 95的平臺上,這個本地方法最終將調用Win32 SetPriority() API。這是一個本地方法的具體實現由JVM直接提供,更多的情況是本地方法由外部的動態鏈接庫(external dynamic link library)提供,然后被JVM調用。

2.4.5 本地方法棧的運用

2.4.6 本地方法棧的使用場景

  • 與java環境外交互
  • 與操作系統交互

2.5. Java堆(Heap)

2.5.1 Java 堆的概念

Java堆可以說是虛擬機中***一塊內存了。它是所有線程所共享的內存區域,幾乎所有的實例對象都是在這塊區域中存放。當然,隨著JIT編譯器的發展,所有對象在堆上分配漸漸變得不那么“絕對”了。

Java堆是垃圾收集器管理的主要區域。由于現在的收集器基本上采用的都是分代收集算法,所有Java堆可以細分為:新生代和老年代。在細致分就是把新生代分為:

  • Eden空間
  • From Survivor
  • To Survivor

根據Java 虛擬機規范的規定:

Java堆可以處于物理上不連續的內存空間中,只要邏輯上是連續的即可,就像我們的磁盤空間一樣。在實現時,既可以實現成固定大小的,也可以是可擴展的,不過當前主流的虛擬機都是按照可擴展來實現的。

2.5.2 Java 堆的特點

線程間共享區域,在虛擬機啟動時創建

是虛擬機中***的一塊內存,幾乎所有的實例對象都是在這塊區域中存放

2.5.3 Java 堆的異常

當堆無法再擴展時,會拋出OutOfMemoryError異常。

2.5.4 Java 堆的作用

唯一目的就是存放對象實例,幾乎所有的對象實例都在java堆中分配內存

2.5.5 Java 堆的運用

通過 -Xmx 和 -Xms 控制

2.5.6 Java 堆的使用場景

2.6. 程序計算器(Program Counter Register)

2.6.1 程序計算器的概念

類似于PC寄存器,程序計數器是線程私有的區域,每個線程都有自己的程序計算器。可以把它看成是當前線程所執行的字節碼的行號指示器。

2.6.2 程序計算器的特點

  • 線程私有
  • 占用的內存空間小
  • 此內存區域是唯一一個在Java虛擬機規范中沒有規定任何OOM(OutOfMemoryError)情況的區域

2.6.3 程序計算器的異常

此內存區域是唯一一個在Java虛擬機規范中沒有規定任何OOM(OutOfMemoryError)情況的區域

2.6.4 程序計算器的作用

  • 信號指示器:多線程間切換時,需恢復每一個線程的當前執行位置,通過程序計數器中的值尋找要執行的指令的字節碼
  • 如果線程在執行Java方法,計數器記錄的是正在執行的虛擬機字節碼指令地址;如果執行的是Native方法,計數器的值為空(Undefined)。

2.6.5 程序計算器的運用

通過 -Xmx 和 -Xms 控制

2.6.6 程序計算器的使用場景

2.7. 直接內存

2.7.1 直接內存的概念

2.7.1.1 什么是直接內存與非直接內存?

根據官方文檔的描述:

A byte buffer is either direct or non-direct. Given a direct byte buffer, the Java virtual machine will make a best effort to perform native I/O operations directly upon it. That is, it will attempt to avoid copying the buffer's content to (or from) an intermediate buffer before (or after) each invocation of one of the underlying operating system's native I/O operations.

byte byffer可以是兩種類型,一種是基于直接內存(也就是非堆內存);另一種是非直接內存(也就是堆內存)。

直接內存(Direct Memory)既不屬于虛擬機運行時數據區的一部分,也不屬于Java虛擬機規范中定義的內存區域,但是這部分內存卻被頻繁地使用,而且還可能導致OutOfMemoryError異常出現。

對于直接內存來說,JVM將會在IO操作上具有更高的性能,因為它直接作用于本地系統的IO操作。而堆內存如果要作IO操作,會先復制到直接內存,再利用本地IO處理。

從數據流的角度,非直接內存的作用鏈:

本地IO-->直接內存-->非直接內存-->直接內存-->本地IO

而直接內存的作用鏈:

本地IO-->直接內存-->本地IO

很明顯,在做IO處理時,比如網絡發送大量數據時,直接內存會具有更高的效率。

A direct byte buffer may be created by invoking the allocateDirect factory method of this class. The buffers returned by this method typically have somewhat higher allocation and deallocation costs than non-direct buffers. The contents of direct buffers may reside outside of the normal garbage-collected heap, and so their impact upon the memory footprint(內存占用) of an application might not be obvious. It is therefore recommended that direct buffers be allocated primarily for large, long-lived buffers that are subject to the underlying system's native I/O operations. In general it is best to allocate direct buffers only when they yield a measureable gain in program performance.

但是由于直接內存使用allocateDirect創建,它比申請普通的堆內存需要耗費更高的性能。不過它不會占用應用的堆內存。所以,當你有大量數據要緩存時,并且它的生命周期又比較長,那么使用直接內存是個不錯的選擇。但如果該選擇不能帶來顯著的性能提升,推薦使用堆內存。在JDK1.4的NIO中,ByteBuffer有個方法是:

  1. public static ByteBuffer allocateDirect(int capacity) { 
  2.  return new DirectByteBuffer(capacity); 
  3. DirectByteBuffer(int cap) { 
  4.  ...... 
  5.  protected static final Unsafe unsafe = Bits.unsafe(); 
  6.  unsafe.allocateMemory(size); 
  7.  ...... 
  8. public final class Unsafe { 
  9.  ...... 
  10.  public native long allocateMemory(long var1); 
  11.  ...... 

另外直接內受限于本機總內存(包括RAM及SWAP區或者分頁文件)的大小及處理器尋址空間的限制。

服務器管理員配置虛擬機參數時,一般會根據實際內存設置-Xmx等參數信息,但經常會忽略掉直接內存,使得各個內存區域的總和大于物理內存限制(包括物理上的和操作系統級的限制),從而導致動態擴展時出現OutOfMemoryError異常。

2.7.2 直接內存的特點

  • 不受Java堆大小的限制
  • 既不是虛擬機運行時數據區的一部分,也不是Java虛擬機規范中定義的內存區域,不會占用應用的內存
  • IO操作上具有更高的性能,因為它直接作用于本地系統的IO操作
  • 它比申請普通的堆內存需要耗費更高的性能。

2.7.3 直接內存的異常

動態擴展時出現OutOfMemoryError異常

2.7.4 直接內存的作用

基于通道(Channel)與緩沖區(Buffer)的I/O方式,它可以使用Native函數庫直接分配堆外內存,然后通過一個存儲在Java堆里面的DirectByteBuffer對象作為這塊內存的引用進行操作。這樣能在一些場景中顯著提高性能,因為避免了在Java堆和Native堆中來回復制數據。

2.7.5 直接內存的運用

XX:MaxDirectMemorySize=10M

2.7.6 直接內存的使用場景

例如在IO處理時,比如網絡發送大量數據時,直接內存會具有更高的效率。

本文基于jdk1.6、1.7

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

2020-03-10 09:30:11

Java內存數據

2009-10-09 09:42:07

虛擬機內存

2010-05-31 16:53:21

Java

2019-11-20 15:02:45

Java虛擬機內存

2010-09-17 15:47:14

TOMCATJVM

2011-05-26 15:41:25

java虛擬機

2009-06-18 13:51:07

Java虛擬機

2018-03-28 14:58:42

虛擬機內核系統

2009-06-17 15:39:00

本機內存硬件限制虛擬內存

2024-04-03 13:49:00

Java虛擬機方法區

2011-12-28 13:38:00

JavaJVM

2018-11-22 12:07:37

Java虛擬機結構

2010-05-14 11:38:24

虛擬機備份

2011-06-28 15:37:34

Qt 內存

2024-03-13 08:03:02

2009-06-04 16:27:39

Java虛擬機JVMGC

2020-07-08 07:50:50

OOM虛擬機Java

2020-03-23 09:17:32

內存操作系統Windows

2011-07-28 10:01:19

IOS 內存優化

2021-09-30 22:40:03

手機內存技術
點贊
收藏

51CTO技術棧公眾號

日本 片 成人 在线| 国产欧美日韩一区| 亚洲欧美精品aaaaaa片| 97久久综合区小说区图片区| 国产精品毛片久久| 日韩三级免费观看| 成人在线免费在线观看| av免费观看网址| 一本色道88久久加勒比精品| 亚洲日韩第一页| 日韩黄色短视频| 国产在线观看免费| 国产乱妇无码大片在线观看| 国语自产在线不卡| 国产亚洲精品精品精品| 日本在线成人| 欧美在线制服丝袜| 人妻激情另类乱人伦人妻| 全色精品综合影院| 国产馆精品极品| 国产精品va在线播放| 久久久精品一区二区涩爱| 久久不卡国产精品一区二区| 日韩精品一区二区三区视频播放| 成人小视频在线看| 国产蜜臀在线| 综合久久一区二区三区| 久久精品午夜一区二区福利| 一级黄色片视频| 亚洲欧美网站| 韩国精品久久久999| 亚洲欧美精品久久| 色老板在线视频一区二区| 国产婷婷色一区二区三区四区| 91久久久在线| 国产高潮流白浆| 成人国产在线| 精品久久久久久久久久ntr影视| 日本成人性视频| 北岛玲一区二区三区| 91亚洲精品一区二区乱码| 亚洲自拍欧美另类| 亚洲一区中文字幕永久在线| 久久精品麻豆| 97av在线影院| 日韩精品一区二区三区国语自制 | 日本成人看片网址| 日本激情一区二区三区| 欧美日本久久| 精品国产一区二区三区四区在线观看| 爱爱的免费视频| 国产ts一区| 精品国产乱码久久久久久免费| 亚洲 国产 图片| 黄色日韩网站| 欧美日韩精品欧美日韩精品 | 国产一级在线视频| 欧美激情麻豆| 久久99热精品这里久久精品| 日本一级特级毛片视频| 婷婷亚洲最大| 欧美不卡视频一区发布| 国产精品久久久精品四季影院| 色综合天天综合网中文字幕| 中文字幕不卡av| a级黄色免费视频| 日韩电影免费网址| www.亚洲人.com| 四虎精品免费视频| 欧美日韩hd| 久久免费福利视频| 日韩av一二三区| 国产精品久久国产愉拍| 热久久免费国产视频| 人妻 日韩精品 中文字幕| 久久精品麻豆| 国产日韩欧美另类| 成人av免费播放| 成人黄页在线观看| 茄子视频成人在线观看| 日本福利专区在线观看| 九一久久久久久| 欧美激情日韩图片| 欧美一级视频免费观看| 久久久久久一区二区| 国产精品av免费在线观看| 亚洲中文字幕在线一区| 国产成人午夜99999| 国产一区在线观| 国产小视频在线| 国产精品久久久久aaaa| 国产成人一二三区| 两个人看的在线视频www| 欧美这里有精品| 九九热视频免费| 台湾佬综合网| 日韩在线欧美在线国产在线| 免费在线视频观看| 久久人人97超碰国产公开结果| 国产美女搞久久| 黄色片视频网站| 日本亚洲视频在线| 99国产在线观看| 嫩草研究院在线| 最新不卡av在线| 成人一对一视频| 国产精品美女午夜爽爽| 亚洲第一色在线| 日本午夜精品视频| 亚洲一级网站| 成人h视频在线| 天堂av电影在线观看| 国产高清精品在线| 欧美精品一区二区视频 | 国产成人精品亚洲线观看| 亚洲视频在线观看网站| 欧美片一区二区| 免费观看在线色综合| 国产嫩草一区二区三区在线观看| 欧美日韩视频精品二区| 一区二区在线观看视频| 999精品视频在线| 哺乳挤奶一区二区三区免费看| 日韩在线视频导航| 无码一区二区三区| www.性欧美| 六月婷婷激情网| 99热播精品免费| 亚洲女同性videos| 国产熟女高潮一区二区三区| 欧美r级电影| 最新日韩中文字幕| www.中文字幕在线观看| 国产精品性做久久久久久| 日韩偷拍一区二区| 欧美少妇网站| 精品免费一区二区三区| 香蕉视频免费网站| 久久365资源| 欧美日韩国产va另类| 伊人22222| 麻豆精品一区二区三区| 日本一区二区在线视频| 捆绑调教日本一区二区三区| 精品国产乱码久久久久久1区2区| 国产精品嫩草影院俄罗斯| 日本不卡高清视频| 欧美一区二区在线| 周于希免费高清在线观看| 亚洲激情视频在线播放| 伊人国产在线观看| 成人av午夜电影| 成人网站免费观看入口| 亚洲小说春色综合另类电影| 美日韩精品视频免费看| av网站免费大全| 亚洲人成精品久久久久| 亚洲欧美天堂在线| 精品三级在线观看视频| 国a精品视频大全| 日韩在线视频免费| 午夜不卡av在线| 国产又大又黄又粗的视频| 偷拍一区二区| 国产97在线|日韩| 高清福利在线观看| 欧美日韩视频一区二区| 美女100%露胸无遮挡| 免费人成精品欧美精品| 一区二区三区四区五区视频| a一区二区三区亚洲| 麻豆乱码国产一区二区三区| www.com国产| 国产伦精品一区二区三区免费迷| 在线视频欧美一区| 精品中文字幕一区二区三区| 欧美刺激性大交免费视频| 后进极品白嫩翘臀在线视频| 大荫蒂欧美视频另类xxxx| 第一次破处视频| 国模无码大尺度一区二区三区| 国产精品福利视频| 成人小说亚洲一区二区三区| 天天色综合天天| 欧美 日韩 成人| 国产麻豆成人精品| 99精品人妻少妇一区二区| 精品国产一区二区三区香蕉沈先生| 国产美女久久精品| 丰满大乳少妇在线观看网站| 亚洲另类图片色| 一级片一区二区三区| 亚洲国产精品一区二区www| 国产精品毛片一区二区| 久久国产剧场电影| 丁香六月激情婷婷| 欧美日韩老妇| 国产精选在线观看91| 在线一区视频观看| 欧美高清一级大片| 国产免费永久在线观看| 日韩欧美在线不卡| 无码人妻丰满熟妇精品| 一二三四区精品视频| 法国空姐电影在线观看| 国产精品一二三区| 欧美伦理片在线看| 中国av一区| 亚洲专区在线视频| 成人精品电影在线| 欧美寡妇偷汉性猛交| 国产高清在线看| 亚洲第一精品久久忘忧草社区| 中文字幕+乱码+中文字幕明步| 亚洲高清不卡在线观看| 性生交大片免费全黄| 久久综合色鬼综合色| 亚洲天堂小视频| 免费在线观看不卡| 欧美日韩中文在线视频| 欧美午夜久久| 在线观看日韩羞羞视频| 亚州综合一区| 俄罗斯精品一区二区| 成人在线视频www| 国产精品久久99久久| 国产亚洲成av人片在线观看| 久热在线中文字幕色999舞| 国产69久久| 亚洲免费精彩视频| 人妻精品一区二区三区| 欧美一级黄色片| 91在线你懂的| 欧美日韩在线播放一区| 亚洲欧美自拍视频| 亚洲成av人影院在线观看网| 强乱中文字幕av一区乱码| 国产精品麻豆久久久| 五月天视频在线观看| 老司机精品久久| 国产午夜伦鲁鲁| 亚洲精品美女91| 欧美日韩一区二| 欧美午夜18电影| 国产区一区二区三区| 一本一道久久a久久| http;//www.99re视频| 国产日韩中文在线中文字幕| 成人精品视频99在线观看免费| 国产极品嫩模在线观看91精品| 国产精品v片在线观看不卡| 爱情电影社保片一区| 久久精品国产久精国产一老狼| 成人高清免费在线播放| 中文字幕亚洲精品| 嫩草在线视频| 欧美成人免费大片| 后进极品白嫩翘臀在线播放| 久久久免费高清电视剧观看| 国产调教在线| 日韩美女免费线视频| 欧美日韩免费观看视频| 日韩免费在线播放| 国内自拍亚洲| 亚洲一区二区少妇| 国产精品网在线观看| 九九九九精品九九九九| 国产在视频线精品视频www666| 天天人人精品| 亚洲乱码精品| 日本不卡高清视频一区| 成人三级视频| 日韩国产精品毛片| 激情久久久久久| 欧美女人性生活视频| 免费在线观看视频一区| 在线播放国产视频| 91在线观看免费视频| 精品一区二区三区蜜桃在线| 亚洲色图都市小说| 日韩毛片在线播放| 欧美日韩夫妻久久| 黄色aaa毛片| 国产亚洲欧美一区| 男插女视频久久久| 国产成人精品一区| 国产精品亚洲一区二区在线观看| 91免费在线观看网站| 日本欧美韩国国产| 久久国产欧美精品| 久久理论电影| 青青草精品视频在线| 久久午夜影视| 爽爽爽在线观看| a在线欧美一区| 丁香六月激情综合| 一区二区三区免费网站| 伊人国产在线观看| 欧美日本一道本在线视频| 亚洲天堂狠狠干| 日韩成人久久久| wwwxxx在线观看| 欧美韩日一区二区| 我爱我色成人网| 91久久大香伊蕉在人线| 国产中文字幕一区二区三区| 一本大道东京热无码aⅴ| 性欧美长视频| 一级黄色片国产| ww亚洲ww在线观看国产| 精品国产aⅴ一区二区三区东京热 久久久久99人妻一区二区三区 | 日韩精品视频免费专区在线播放 | 99久久99久久精品国产片果冻 | 亚洲影院天堂中文av色| wwwjizzjizzcom| 久久一二三区| 亚洲av永久无码精品| 黄色资源网久久资源365| 国产黑丝一区二区| 亚洲激情网站免费观看| 中文字幕一区二区三区四区欧美| 日韩欧美在线不卡| 日本最新在线视频| 日韩av电影免费观看高清| 96视频在线观看欧美| 品久久久久久久久久96高清| 激情综合中文娱乐网| 少妇愉情理伦片bd| 中文字幕高清不卡| 日韩不卡视频在线| 亚洲国产精品va| www免费在线观看| 色综合五月天导航| 精品久久久网| 日韩女优中文字幕| 老司机精品久久| 国产精品久久久免费观看| 亚洲综合精品久久| 亚洲黄色小说网| 精品国产依人香蕉在线精品| 欧美aaaaaa| 亚洲高清在线观看一区| 99久久国产综合精品成人影院| 日本老熟妇毛茸茸| 26uuu精品一区二区 | 高跟丝袜一区二区三区| 可以免费观看的毛片| 久久av.com| 我要色综合中文字幕| 国产内射老熟女aaaa| 国产成人在线免费观看| 91日韩中文字幕| 欧美一区二区观看视频| 国产素人视频在线观看| 久久久国产一区| av在线国产精品| 日本女人高潮视频| 奇米在线7777在线精品| 波兰性xxxxx极品hd| 欧美美女一区二区三区| 久操视频在线| 亚洲一区二区三区成人在线视频精品| 日韩大片在线观看| 中文字幕在线视频一区二区三区| 国产精品进线69影院| 国产男男gay体育生网站| 亚洲成人av片在线观看| 高清免费电影在线观看| 99精品国产一区二区| 午夜电影亚洲| 中文字幕在线观看网址| 色偷偷久久一区二区三区| 精品毛片一区二区三区| 97碰碰碰免费色视频| 美女视频免费精品| 亚洲三级视频网站| **网站欧美大片在线观看| 国产成人无码www免费视频播放| 久久久在线观看| 蜜桃一区二区三区| www.亚洲自拍| 亚洲线精品一区二区三区 | 成人香蕉视频| 一区二区高清视频| 国产成人在线看| 成人黄色免费网| 久久久国产精品免费| 欧美欧美在线| 国产免费成人在线| 国产精品美女www爽爽爽| 搡老岳熟女国产熟妇| 国产99久久精品一区二区永久免费 | 中文字幕精品一区二区精品| 91成人app| 波多野结衣乳巨码无在线| 中文字幕欧美激情一区| 国产黄a三级三级三级| 国产精品99免视看9| 欧美黄色一级视频| 国产三级在线观看完整版|