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

理解Android虛擬機體系結構

移動開發 Android
Dalvik作為面向Linux、為嵌入式操作系統設計的虛擬機,主要負責完成對象生命周期管理、堆棧管理、線程管理、安全和異常管理,以及垃圾回收等。Dalvik充分利用Linux進程管理的特定,對其進行了面向對象的設計,使得可以同時運行多個進程,而傳統的Java程序通常只能運行一個進程,這也是為什么Android不采用JVM的原因。

1. 什么是Dalvik虛擬機

Dalvik是Google公司自己設計用于Android平臺的Java虛擬機,它是Android平臺的重要組成部分,支持dex格式(Dalvik Executable)的Java應用程序的運行。dex格式是專門為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。Google對其進行了特定的優化,使得Dalvik具有高效、簡潔、節省資源的特點。從Android系統架構圖知,Dalvik虛擬機運行在Android的運行時庫層。

2. Dalvik虛擬機的功能

Dalvik作為面向Linux、為嵌入式操作系統設計的虛擬機,主要負責完成對象生命周期管理、堆棧管理、線程管理、安全和異常管理,以及垃圾回收等。Dalvik充分利用Linux進程管理的特定,對其進行了面向對象的設計,使得可以同時運行多個進程,而傳統的Java程序通常只能運行一個進程,這也是為什么Android不采用JVM的原因。Dalvik為了達到優化的目的,底層的操作大多和系統內核相關,或者直接調用內核接口。另外,Dalvik早期并沒有JIT編譯器,直到Android2.2才加入了對JIT的技術支持。

3. Dalvik虛擬機和Java虛擬機的區別

本質上,Dalvik也是一個Java虛擬機。但它特別之處在于沒有使用JVM規范。大多數Java虛擬機都是基于棧的結構(詳情請參考:理解Java虛擬機體系結構),而Dalvik虛擬機則是基于寄存器。基于棧的指令很緊湊,例如,Java虛擬機使用的指令只占一個字節,因而稱為字節碼。基于寄存器的指令由于需要指定源地址和目標地址,因此需要占用更多的指令空間。Dalvik虛擬機的某些指令需要占用兩個字節。基于棧和基于寄存器的指令集各有優劣,一般而言,執行同樣的功能,前者需要更多的指令(主要是load和store指令),而后者需要更多的指令空間。需要更多指令意味著要多占用CPU時間,而需要更多指令空間意味著數據緩沖(d-cache)更易失效。更多討論,虛擬機隨談(一):解釋器,樹遍歷解釋器,基于棧與基于寄存器,大雜燴 給出了非常詳細的參考。

Java虛擬機運行的是Java字節碼,而Dalvik虛擬機運行的是專有文件格式dex。在Java程序中,Java類會被編譯成一個或多個class文件,然后打包到jar文件中,接著Java虛擬機會從相應的class文件和jar文件中獲取對應的字節碼。Android應用雖然也使用Java語言,但是在編譯成class文件后,還會通過DEX工具將所有的class文件轉換成一個dex文件,Dalvik虛擬機再從中讀取指令和數據。dex文件除了減少整體的文件尺寸和I/O操作次數,也提高了類的查找速度。 

 

 

 

由下圖可以看到,jar和apk文件的組成結構,以及class文件和dex文件的差異。dex格式文件使用共享的、特定類型的常量池機制來節省內存。常量池存儲類中的所有字面常量,它包括字符串常量、字段常量等值。 

 

 

 

總的來說,Dalvik虛擬機具有以下特點:

  • 使用dex格式的字節碼,不兼容Java字節碼格式
  • 代碼密度小,運行效率高,節省資源
  • 常量池只使用32位的索引
  • 有內存限制
  • 默認棧大小是12KB(3個頁,每頁4KB)
  • 堆默認啟動大小為2MB,默認***值為16MB
  • 堆支持的最小啟動大小為1MB,支持的***值為1024MB
  • 堆和棧參數可以通過-Xms和-Xmx修改

4. Dalvik系統結構

實際上,Dalvik是基于Apache Harmony(Apache軟件基金會的Java SE項目)的部分實現,提供了自己的一套庫,即上層Java應用程序編寫所使用的API。 

 

 

 

以上圖示來自tech-insider。Apache Harmony大體上分為三個層:操作系統、Java虛擬機、Java類庫。它的特點在于虛擬機和類庫內部被高度模塊化,每一個模塊都有一定的接口定義。操作系統層與虛擬機層之間的接口由Portability Layer定義,它封裝了不同操作系統的差異,為虛擬機和類庫的本地代碼提供了一套統一的API訪問底層系統調用。虛擬機與類庫之間的接口除了Java規范定義的JNI、JVMITI外,還加入了一層虛擬機接口,由內核類和本地代碼組成。實現了虛擬機接口的虛擬機都可以使用Harmony的類庫實現,并且可以被Harmony提供的同一個Java啟動程序啟動。

下面是Dalvik虛擬機的結構圖: 

 

 

 

一個應用首先經過DX工具將class文件轉換成Dalvik虛擬機可以執行的dex文件,然后由類加載器加載原生類和Java類,接著由解釋器根據指令集對Dalvik字節碼進行解釋、執行。***,根據dvm_arch參數選擇編譯的目標機體系結構。

4.1 dex文件結構

dex文件結構和class文件結構差異的地方很多,但從攜帶的信息上看,dex和class文件是一致的。 

 

 

 

  • header:存儲了各個數據類型的起始地址、偏移量等信息。
  • proto_ids:描述函數原型信息,包括返回值,參數信息。比如“test:()V”
  • methods_ids:函數信息,包括所屬類及對應的proto信息。

更多dex格式的內容,Android安全–Dex文件格式詳解 這篇文章進行了非常詳細的介紹。雖然dex文件的結構很緊湊,但想要運行時的性能得到進一步提升,還需要對dex文件進行進一步優化。優化主要針對以下幾個方面:

  • 調整所有字段的字節序和對齊結構中的每一個域
  • 驗證dex文件中的所有類
  • 對一些特定的類進行優化,對方法里的操作碼進行優化

dex文件經過優化后文件大小會膨脹,大約增加到原來的1~4倍。對于內置應用,一般在系統編譯后,便會生成優化文件(odex: Optimized dex)。一個Android應用程序,需要經過以下過程才可以在Dalvik虛擬機上運行:

  • 把Java源文件編譯成class文件
  • 使用DX工具把class文件轉換成dex文件
  • 使用aapt工具把dex文件、資源文件以及AndroidManifest.xml文件(二進制格式)組合成APK
  • 將APK安裝到Android設備運行 

 

 

 

上圖(來自網絡)詳盡地展示了最終簽名后的APK是怎么來的。

4.2 Dalvik類加載器

一個dex文件需要類加載器加載原生類和Java類,然后通過解釋器根據指令集對Dalvik字節碼進行解釋和執行。Dalvik類加載器使用mmap函數,將dex文件映射到內存中,通過普通的內存讀取操作即可訪問dex文件,然后解析dex文件內容并加載其中的類到哈希表中。

4.2.1 解析dex

總的來說,dex文件可以抽象為三個部分:頭部、索引、數據。通過頭部可以知道索引的位置和數目,以及數據區的起始位置。將dex文件映射到內存后,Dalvik會調用dexFileParse函數對其進行分析,分析的結果放到DexFile數據結構中。DexFile中的baseAddr指向映射區的起始位置,pClassDefs指向class索引的起始位置。為了加快class的查找速度,還創建一個哈希表,對class名字進行哈希并生成索引。

4.2.2 加載class

解析工作完成后就進行class的加載,加載的類需要用ClassObject數據結構來存儲。

  1. typedef struct Object { 
  2.  
  3.     ClassObject* clazz;  // 類型對象 
  4.  
  5.     Lock lock;           // 鎖對象 
  6.  
  7. } Object;  

其中clazz指向ClassObject對象,還包含一個Lock對象。如果其它線程想要獲取它的鎖,只有等這個線程釋放。Dalvik每加載一個class都會對應一個ClassObject對象,加載過程會在內存中分配幾個區域,分別存放directMethod, virtualMethod, sfield, ifield。這些信息從dex文件的數據區中讀取。字段Field的定義如下:

  1. struct Field { 
  2.  
  3.     ClassObject* clazz;    //所屬類型 
  4.  
  5.     const charname;      // 變量名稱 
  6.  
  7.     const char* signature; // 如“Landroid/os/Debug;” 
  8.  
  9.     u4 accessFlags;        // 訪問標記 
  10.  
  11.   
  12.  
  13.     #ifdef PROFILE_FIELD_ACCESS 
  14.  
  15.         u4 gets; 
  16.  
  17.         u4 puts; 
  18.  
  19.     #endif 
  20.  
  21. };  

待得到class索引后,實際的加載由loadClassFromDex來完成。首先它會讀取class的具體數據,分別加載directMethod, virtualMethod, ifield和sfield,然后為ClassObject數據結構分配內存,并讀取dex文件的相關信息。加載完成后,將加載的class通過dvmAddClassToHash函數放入哈希表,以方便下次查找;***,通過dvmLinkClass查找該類的超類,如果有接口類則加載相應的接口類。

4.3 Dalvik解釋器

對于任何虛擬機來說,解釋器無疑是核心的部分,所有的Java字節碼都經過解釋器解釋執行。由于Dalvik解釋器的效率很重要,Android分別實現了C語言版和各種匯編語言版的解釋器。解釋器通常是循環執行,需要一個入口函數調用處理程序執行***條指令,而后每條指令執行時引出下一條指令,通過函數指針調用處理程序。

4.4 內存管理

垃圾收集是Dalvik虛擬機內存管理的核心。此處只介紹Dalvik虛擬機的垃圾收集功能。垃圾收集的性能在很大程度上影響了一個Java程序內存使用的效率。Dalvik虛擬機使用常用的Mark-Sweep算法,該算法分Mark階段(標記出活動對象)、Sweep階段(回收垃圾內存)和可選的Compact階段(減少堆中的碎片)。Android內存管理原理 這篇文章講解得很詳細。

垃圾收集的***步是標記出活動對象,因為沒有辦法識別那些不可訪問的對象,這樣所有未被標記的對象就是可以回收的垃圾。當進行垃圾收集時,需要停止Dalvik虛擬機的運行(除垃圾收集外),因此垃圾收集又被稱作STW(stop-the-world)。Dalvik虛擬機在運行過程中要維護一些狀態信息,這些信息包括:每個線程所保存的寄存器、Java類中的靜態字段、局部和全局的JNI引用,JVM中的所有函數調用會對應一個相應C的棧幀。每一個棧幀里可能包含對對象的引用,比如包含對象引用的局部變量和參數。所有這些引用信息被加入到一個根集合中,然后從根集合開始,遞歸查找可以從根集合出發訪問的對象。因此,Mark過程又叫做追蹤,追蹤所有可被訪問的對象。

垃圾收集的第二步就是回收內存。在Mark階段通過markBits位圖可以得到所有可訪問的對象集合,而liveBits位圖表示所有已經分配的對象集合。通過比較liveBits位圖和markBits位圖的差異就是所有可回收的對象集合。Sweep階段調用free來釋放這些內存給堆。

在底層內存實現上,Android系統使用的是msspace,這是一個輕量級的malloc實現。除了創建和初始化用于存儲普通Java對象的內存堆,Android還創建三個額外的內存堆:

  • “livebits”(用來存放堆上內存被占用情況的位圖索引)
  • “markbits”(在GC時用于標注存活對象的位圖索引)
  • “markstack”(在GC中遍歷存活對象引用的標注棧)

虛擬機通過一個名為gHs的全局HeapSource變量來操控GC內存堆,而HeapSource里通過heaps數組可以管理多個堆(Heap),以滿足動態調整GC內存堆大小的要求。另外HeapSource里還維護一個名為”livebits”的位圖索引,以跟蹤各個堆(Heap)的內存使用情況。剩下兩個數據結構”markstack”和”markbits”都是用在垃圾回收階段。 

 

 

 

上圖中”livebits”維護堆上已用的內存信息,而”markbits”這個位圖索引則指向存活的對象。 A、C、F、G、H對象需要保留,因此”markbits”分別指向他們(***的H對象尚在標注過程中,因此沒有指針指向它)。而”markstack”就是在標注過程中跟蹤當前需要處理的對象要用到的標志棧,此時其保存了正在處理的對象F、G和H。

4.5 Dalvik的啟動流程

Dalvik進程管理是依賴于linux的進程體系結構的,如要為應用程序創建一個進程,它會使用linux的fork機制來復制一個進程。Zygote是一個虛擬機進程,同時也是一個虛擬機實例的孵化器,它通過init進程啟動。之前的文章有對此過程有詳細介紹:Android系統啟動分析(Init->Zygote->SystemServer->Home activity)。此處分析Dalvik虛擬機啟動的相關過程。 

 

 

 

AndroidRuntime類主要做了以下幾件事情:

  • 調用startVM創建一個Dalvik虛擬機,JNI_CreateJavaVM真正創建并初始化虛擬機實例
  • 調用startReg注冊Android核心類的JNI方法
  • 通過Zygote進程進入Java層

在JNI中,dvmCreateJNIEnv為當前線程創建和初始化一個JNI環境,即一個JNIEnvExt對象。***調用dvmStartup來初始化前面創建的Dalvik虛擬機實例。函數dvmInitZygote調用了系統的setpgid來設置當前進程,即Zygote進程的進程組ID。這一步完成后,Dalvik虛擬機的創建和初始化工作就完成了。

5. Android的啟動

  • 啟動電源,加載引導程序到RAM
  • BootLoader引導
  • Linux Kernel啟動
  • Init進程創建
  • Init fork出Zygote進程,Zygote進程創建虛擬機;創建系統服務
  • Android Home Launcher啟動 

 

 

 

參考:

  • 《Android技術內幕》
  • Dalvik虛擬機簡要介紹和學習計劃

(http://blog.csdn.net/luoshengyang/article/details/8852432)

  • 深入理解Android(二):Java虛擬機Dalvik

(http://www.infoq.com/cn/articles/android-in-depth-dalvik)

  • dalvik虛擬內存管理之二——垃圾收集

(http://www.miui.com/thread-75028-1-1.html)

  • Dalvik虛擬機的啟動過程分析

(http://blog.csdn.net/luoshengyang/article/details/8885792) 

責任編輯:龐桂玉 來源: 安卓開發精選
相關推薦

2010-09-16 14:36:43

Java虛擬機

2011-12-28 13:24:47

JavaJVM

2016-03-02 15:09:57

Java虛擬機體系結構

2011-11-30 14:12:05

JavaJVM虛擬機

2009-06-12 21:39:48

Java虛擬機體系結構Java虛擬機

2014-07-23 09:33:52

2010-01-26 16:54:09

核心交換機

2010-01-18 10:23:04

核心交換機

2010-01-25 15:01:36

交換機體系結構

2009-07-02 15:50:36

JSP體系結構

2010-02-06 16:44:59

三層交換機

2010-01-04 10:33:38

核心交換機

2022-01-26 09:53:23

計算機體系結構

2009-07-15 13:46:26

Swing體系結構

2012-02-06 17:22:44

MySQL

2009-09-11 10:38:03

LINQ體系結構

2009-06-26 15:58:28

EJB

2009-09-08 14:34:42

Linq to SQL

2009-07-10 16:07:10

TikeSwing創建MVC體系結構

2010-04-23 09:13:05

Oracle體系結構
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕综合| 久久精品视频8| 九九99久久精品在免费线bt| 亚洲黄色尤物视频| 欧美日韩精品综合| 99久久夜色精品国产亚洲| av成人毛片| 日韩视频一区在线| 中文字幕5566| 国产成人视屏| 91久久精品日日躁夜夜躁欧美| 国产一区一区三区| 日本大臀精品| 国产成人在线视频网站| 国产精品999999| 国产精品2020| 亚洲综合婷婷| 国产亚洲欧洲在线| 波多野结衣加勒比| 国产午夜久久av| 欧洲视频一区二区| 日韩中文字幕在线免费| 秋霞a级毛片在线看| 成人听书哪个软件好| 国产色综合天天综合网| 99精品在线播放| 国产精品mm| 久久九九有精品国产23| 欧美性猛交xxxx乱| 美女av一区| 欧美成人高清电影在线| 亚洲免费黄色网| 欧美亚洲大片| 日韩欧美成人区| 免费 成 人 黄 色| 色av手机在线| 亚洲麻豆国产自偷在线| 日本免费在线视频观看| 2021av在线| 中文字幕巨乱亚洲| 日韩欧美在线一区二区| 欧美一区二区三区少妇| a在线欧美一区| 国产一级精品aaaaa看| 国产黄色高清视频| 国产成人午夜视频| 99精彩视频在线观看免费| 99国产揄拍国产精品| 国产在线视视频有精品| 91欧美激情另类亚洲| 国产青青草视频| 国产精品影音先锋| 97se亚洲综合| 性网爆门事件集合av| 成人深夜福利app| 国产精品免费在线 | 全国精品久久少妇| 国产精品观看在线亚洲人成网| 香蕉影院在线观看| 久久这里只有| 国产精品视频成人| 国产免费视频一区二区三区| 国产一区二区精品久久99| 国产精品久久久久免费a∨大胸| 亚洲av人无码激艳猛片服务器| 日韩精品免费视频人成| 国产精品亚洲аv天堂网| 97国产精品久久久| 国产99久久久久| 国产一区二区在线网站| 久久精品蜜桃| 成人欧美一区二区三区白人| 香蕉视频免费版| 阿v视频在线| 色88888久久久久久影院按摩| 蜜桃免费在线视频| 精品视频91| 精品无人国产偷自产在线| 免费在线观看a视频| 小说区亚洲自拍另类图片专区 | 日本精品一区二区三区视频 | 欧美激情视频一区二区三区不卡| 国产精品变态另类虐交| 视频一区视频二区在线观看| 国产日韩视频在线观看| 人妻无码中文字幕免费视频蜜桃| 久久久精品免费网站| 亚洲人成网站在线观看播放| 欧美色图天堂| 日本乱码高清不卡字幕| 国模大尺度视频| 九九热精品视频在线观看| 久久夜精品香蕉| 国产又黄又粗又爽| 久久97超碰国产精品超碰| 国产精品久久亚洲| 91在线观看| 亚洲r级在线视频| av网站在线不卡| 加勒比视频一区| 久久网福利资源网站| 免费av网站在线| 风流少妇一区二区| 日韩女优中文字幕| av中文字幕在线看| 7777精品伊人久久久大香线蕉 | 青青久在线视频| 亚洲精品久久嫩草网站秘色| 中文字幕无码不卡免费视频| 9l视频自拍蝌蚪9l视频成人| 最新中文字幕亚洲| 亚洲精品男人的天堂| 国产成人在线免费观看| 一区二区三区四区视频在线 | 欧美日韩精品一本二本三本| 国产精品久久一区主播| 熟妇高潮一区二区高潮| 一区二区视频在线| 亚洲一二三不卡| 欧美精品一区二区三区中文字幕| 91精品国产99久久久久久| av加勒比在线| 国产精品丝袜一区| 北条麻妃av高潮尖叫在线观看| 国产乱论精品| 九九九热精品免费视频观看网站| 在线观看日批视频| 国产肉丝袜一区二区| 99福利在线观看| 欧美巨大xxxx| 91高清在线免费观看| 亚洲国产精彩视频| 一级中文字幕一区二区| 欧美人与性动交α欧美精品| 亚洲人metart人体| 成人性生交xxxxx网站| 日本不卡三区| 欧美军同video69gay| 亚洲精品国产精品国自| 日产欧产美韩系列久久99| 欧美日韩一区二区三区在线视频| 中文字幕在线免费观看视频| 日韩国产在线看| 久久99国产综合精品免费| 99久久99久久精品国产片果冻| 国产xxxx振车| 欧洲亚洲一区二区三区| 97视频在线观看成人| 色婷婷综合视频| 欧美日韩精品国产| 久久久久亚洲av无码专区桃色| 欧美一级网站| 日韩videos| 韩国理伦片久久电影网| 久久久精品久久久久| 国产视频在线观看视频| 一区二区三区日韩精品视频| 精品人妻无码中文字幕18禁| 伊人精品在线| 免费亚洲一区二区| 亚洲精品555| 久久这里有精品视频| av中文字幕播放| 亚洲国产精品欧美一二99| 欧美大喷水吹潮合集在线观看| 亚洲一区图片| 亚洲v国产v在线观看| 天堂久久一区| 欧美激情中文字幕乱码免费| 午夜av免费在线观看| 91久久奴性调教| a一级免费视频| 成人一区二区三区在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 久色乳综合思思在线视频| 国产激情视频在线播放 | 国产l精品国产亚洲区久久| 最新精品国偷自产在线| 成人福利在线视频| japanese色国产在线看视频| 亚洲人成网站999久久久综合| 亚洲系列在线观看| 亚洲国产另类av| 亚洲性猛交xxxx乱大交| 国产麻豆精品视频| 免费观看精品视频| 中文字幕乱码亚洲无线精品一区| 久久爱av电影| 91精品麻豆| 2019亚洲男人天堂| 免费av在线网站| 亚洲精品色婷婷福利天堂| 国产精品乱码一区二区| 欧美日韩中文字幕综合视频| 欧美xxxooo| 91美女蜜桃在线| 国产黑丝在线视频| 日韩激情视频网站| 亚洲美免无码中文字幕在线| 久久人体视频| 久久99九九| 日韩激情精品| 国产精品久久久久999| 丁香花电影在线观看完整版| 自拍偷拍免费精品| 日韩大胆人体| 欧美不卡视频一区| 一区二区的视频| 色视频成人在线观看免| 精品在线视频观看| 亚洲欧美一区二区三区极速播放| 国产精品久久久久无码av色戒| 国产福利精品导航| 亚洲小视频网站| 日韩精品福利网| 日本免费黄视频| 欧美午夜一区| 欧美 亚洲 视频| 久久久久美女| 一区二区免费在线视频| 国产剧情在线观看一区| 久久另类ts人妖一区二区| 日韩一区二区三区精品| 91中文在线视频| 日本一区二区中文字幕| 国产精品电影一区| 暖暖成人免费视频| 777精品视频| 青青草原国产在线| 欧美成人午夜免费视在线看片| 午夜激情在线观看| 综合网日日天干夜夜久久| 青青草免费在线视频| 亚洲精品国产精品国自产在线 | 中文字幕久久亚洲| 九色在线观看视频| 亚洲无线码在线一区观看| 视频一区二区三区在线看免费看| 亚洲国产精品成人av| 成人毛片在线免费观看| 精品国产三级a在线观看| 国产黄色大片网站| 精品剧情在线观看| 亚洲精品久久久蜜桃动漫| 日韩一区二区免费视频| www.97超碰| 亚洲国产精品一区二区久| 免费观看毛片网站| 日韩精品在线观看网站| 免费动漫网站在线观看| 国产亚洲精品久久久| jzzjzzjzz亚洲成熟少妇| 中文字幕国产精品久久| 午夜伦理在线| 欧美夫妻性生活xx| 狠狠操一区二区三区| 国产不卡在线观看| 狂野欧美性猛交xxxx| 91久久在线观看| 超碰成人福利| 免费观看成人高| 热久久天天拍国产| 日韩中文字幕在线不卡| 亚洲国产高清视频| 男人透女人免费视频| 麻豆一区二区三| 中文字幕avav| www久久精品| 香蕉成人在线视频| 亚洲最色的网站| 国产精品suv一区二区69| 亚洲一区网站| 在线观看欧美一区| 韩日在线一区| caoporen国产精品| 伊人久久亚洲| 欧美一区二区影视| 一个色综合网| 免费黄色日本网站| 99久久国产综合精品成人影院| 国产一区二区不卡视频| 激情五月综合| 欧洲精品在线播放| 秋霞成人午夜伦在线观看| 亚洲免费在线播放视频| 亚洲美女一区| 91精品国产高清久久久久久91裸体 | 亚洲三区在线| 你懂的在线观看一区二区| 日本a级片久久久| 91精品综合| 亚洲熟妇国产熟妇肥婆| 亚洲综合网狠久久| 57pao精品| 欧美14一18处毛片| 精品国产1区2区3区| 日韩影院一区二区| 国产一区久久久| 奇米视频7777| 欧美91视频| 国产不卡一区二区在线观看| 污视频网站免费观看| 亚洲人成电影在线| 白白色在线观看| 国产成人小视频在线观看| 白嫩白嫩国产精品| 一区二区三区四区视频在线| 久久精品毛片| 超碰中文字幕在线观看| 国产色91在线| 曰本女人与公拘交酡| 一区av在线播放| 中文字幕在线观看1| 亚洲精品动漫久久久久| 中文字幕在线三区| 国产欧美日韩免费| 国产欧美日韩免费观看| 日本www在线视频| 成人综合激情网| 青青操国产视频| 欧美一区二区三区四区在线观看 | 欧美日韩另类图片| 蜜臀av性久久久久蜜臀av| 蜜桃视频一区二区三区| jizz中文字幕| 色哟哟国产精品| 深夜福利在线看| 97精品在线视频| 国内精品国产成人国产三级粉色| 欧美日韩中文字幕在线播放| 另类小说视频一区二区| 日本高清黄色片| 欧美在线你懂得| 成人av一区| 国产精品欧美激情在线播放| 狠狠色狠狠色综合婷婷tag| 日本三区在线观看| 国产蜜臀av在线一区二区三区| 国产污视频网站| 亚洲三级免费看| 91p九色成人| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 日本美女一区二区三区| 调教驯服丰满美艳麻麻在线视频| 色综合天天综合网天天狠天天| 酒色婷婷桃色成人免费av网| 欧美亚洲视频在线看网址| 亚洲成aⅴ人片久久青草影院| 国产精品免费入口| 国产亚洲一区二区三区四区| 国产suv精品一区二区33| 伊人久久大香线蕉av一区二区| 美女色狠狠久久| 中文字幕中文字幕99| 久草在线在线精品观看| 加勒比婷婷色综合久久| 日韩精品一区二区三区中文不卡| 色爱综合区网| 九色91国产| 日韩精品一二区| 四虎884aa成人精品| 日韩天堂在线观看| 韩国精品一区| 视频一区视频二区视频| 久久国产尿小便嘘嘘| 欧美成人一二三区| 日韩成人av在线| 国产成人精品一区二区三区在线| 天堂v在线视频| 成人av在线观| 久久精品久久久久久久| 精品国产一区二区三区在线观看 | 久久婷婷综合国产| 亚洲精品久久久久久下一站| 网友自拍亚洲| 警花观音坐莲激情销魂小说| 99久精品国产| 亚洲一区二区三区网站| 久久久免费精品视频| 禁果av一区二区三区| 午夜视频在线观| 欧美性色视频在线| 蜜桃视频网站在线| 久久精品国产综合精品| 蜜桃免费网站一区二区三区| 久久久久免费看| 中文字幕成人在线| 久久精品亚洲成在人线av网址| 99视频免费播放| 亚洲成人免费影院| 91caoporn在线| 国产精品一区二区你懂得| 免费久久99精品国产| 精品成人免费视频| 色久欧美在线视频观看| 国偷自产av一区二区三区| 欧美女同在线观看| 黑人狂躁日本妞一区二区三区| 国产原创精品视频| 奇米精品在线|