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

誰動了我的內存,揭秘 OOM 崩潰下降 90% 的秘密

新聞 存儲
今天這篇文章主要介紹內存相關的知識點,以及那些因素會導致 OOM 崩潰和相對應的解決方案。

最近一直在做內存和 ANR 相關的優化,接下來我將會花幾篇文章梳理一下內存相關的優化,以及我是如何將 OOM 崩潰率下降 90% 。

今天這篇文章主要介紹內存相關的知識點,以及那些因素會導致 OOM 崩潰和相對應的解決方案,所以通過這篇文章你將學習到以下內容:

  • 什么是虛擬內存和物理內存
  • 32 位和 64 位設備可用虛擬內存分別是多少
  • 為什么虛擬內存不足主要發生在 32 位的設備上
  • 如何解決虛擬內存不足的問題
  • App 啟動完成之后,虛擬內存的分布
  • 如何解決 Java 堆內存不足的問題
  • Java 堆上還有很多可用的內存,為什么還會出現 OOM
  • 做性能優化時,需要關心那些指標數據

不知道小伙伴們有沒有經歷過,相同的優化方案,A 應用上線之后,崩潰率下降很多,但是 B 應用上線只有一點點收益,每個優化方案,在不同的 App 上所得到的優化效果未必一樣,因為每個 App 在不同的國家和地區面對的用戶群體不一樣,因此機型也都不一樣,所以我們需要了解內存相關的知識點,結合線上和線下數據,對自己的 App 進行歸因,對癥下藥,才能取得較大的收益。

內存是極其稀缺的資源,不合理的使用會導致可用內存越來越少,可能會引發卡頓、ANR、OOM 崩潰、Native 崩潰等等,嚴重影響用戶的體驗。所以當我們在做性能優化的時候,內存優化是非常重要的環節。

初期在做內存優化的時候,在我們的腦海里都會有一個潛意識「內存占用越少越好」,在某些情況下是不對的。例如在高端機上我們可以多分配點內存,可以提升用戶的體驗,但是在低端機上內存本身就很小,所以我們應盡量減少內存的分配。例如針對損耗性能的動畫、特效等等,在低端機上是不是可以關掉,或者關掉硬件加速、采用其他的方案代替,這樣不僅可以減少崩潰,還可以減少卡頓,提高用戶體驗。

因為 Java 有自動回收機制,所以在開發過程中,很少有人會去關心內存問題,在腦海中都會有一個潛意識 GC 會自動回收,所以用完不會主動釋放掉無用資源例如 Bitmap、動畫、播放器等等,等待 GC 來回收,在實際項目中,依賴 GC 是不可靠的。首先 GC 自動回收機制具有不確定性,GC 也分為了不同的類型,如果發生 Full GC 時,會觸發 stop the work 事件,會使 App 變得更加嚴重。

另外 GC 的回收機制根據可達性分析算法判斷一個對象是否可以被回收,如果存在內存泄露,GC 是不會回收這些資源的,逐漸累積,當達到堆的內存上限時,發生 OOM 崩潰了,所以你要保證自己不要寫出內存泄露的代碼,以及團隊其他人不要寫出內存泄露的代碼,然而實際情況這是不可能的,所以依靠 GC 自動回收機制這種想法是不可靠的。雖然 Java 有內存回收機制,但是我們應該在腦海中保留內存管理的意識,所以當申請完內存,退出或者不在使用時,及時釋放掉內存。真正做到 用時分配,及時釋放。

可用內存越來越少時,嚴重時會導致 OOM 崩潰,做過 OOM 優化的朋友應該會發現,線上捕獲的大部分 OOM 崩潰堆棧,都是壓死駱駝的最后一根稻草,并不是問題的根本所在,所以我們需要對 OOM 崩潰進行歸因,找到占用內存的大頭。降低整機已使用的內存,從而降低 OOM 崩潰,因此我大概分為了以下幾個方面。

  • 虛擬內存和物理內存
  • 堆內存
  1. 堆內存泄露,指的是在程序運行時,給對象分配的內存,當程序退出或者退出界面時,分配的內存沒有釋放或者因為其他原因無法釋放
  2. 資源泄露,比如 FD、socket、線程等等,這些在每個手機上都是有數量的限制,如果使用了不釋放,就會因為資源的耗盡而崩潰,我們在線上就出現過 FD 的泄露,導致崩潰率漲了 3 倍
  3. 分配的內存到達 Java 堆的上限
  4. 可用內存很多,因為內存碎片化,沒有足夠的連續段的空間分配
  5. 對象的單次分配或者多次分配累計過大,例如在循環動畫中一直創建 Bitmap
  6. Java 堆內存溢出
  7. 內存泄露
  • FD 的數量超出當前手機的閾值
  • 線程的數量超出當前手機的閾值

其中 FD 和線程崩潰占比很低,因此這不是我們前期優化的重點。這篇文章我們重點介紹 虛擬內存和物理內存,下篇文章將會介紹堆內存, 堆內存是程序在運行過程中為對象分配內存的區域,它也屬于虛擬內存的范圍。

虛擬內存和物理內存

介紹虛擬內存之前,我們需要先介紹物理內存,物理內存就是實實在在的內存(即內存條),如果應用直接對物理內存操作,會存在很多問題:

  • 安全問題,應用之間的內存空間沒有隔離,會導致應用 A 可以修改應用 B 的內存數據,這是非常不安全的
  • 內存空間利用率低,應用對內存的使用會出現內存碎片化的問題,即使還有很多內存可以用,但是沒有足夠的連續段的內存分配,而導致崩潰
  • 效率低,多個應用同時對物理內存進行讀取和寫入時,使用效率會非常低

為了解決上面的問題,我們需要為每個應用分配 "中間內存" 最終會映射到物理內存上,這就是接下來要說的虛擬內存。

操作系統會為每個應用分配一個獨立的虛擬內存,實現應用間的內存隔離,避免了應用 A 修改應用 B 的內存數據的問題,虛擬內存最終會映射到物理內存上,當應用申請內存時,得到的是虛擬內存,只有真正執行寫操作時,才會分配到物理內存,好處是應用可以使用連續的地址空間來訪問不連續的物理內存。

每個應用程序可使用的虛擬內存大小受 CPU 位寬及內核的限制。我們常說的 16 位 cpu,32 位 cpu,64 位 CPU,指的都是 CPU 的位寬,表示的是一次能夠處理的數據寬度,即 CPU 能處理的 2 進制位數,即分別是 16bit,32bit 和 64bit。而目前市面上常用的是 32 位和 64 的設備。

32 位和 64 位設備可用虛擬內存分別是多少

32 位設備可以使用的虛擬內存大小 3GB

32 位 CPU 架構的設備可使用的地址空間大小為 2^32=4GB, 虛擬內存空間分為 內核空間用戶空間,系統提供了三種虛擬地址空間分配的參數,代表用戶空間可訪問的虛擬地址空間大小。

  • VMSPLIT_3G : 默認值,表示用戶空間可使用 3GB 的低地址,剩下的 1GB 高地址分配給內核
  • VMSPLIT_2G : 表示用戶空間可使用 2GB 的低地址
  • VMSPLIT_1G : 表示用戶空間可使用 1GB 的低地址

64 位應用可以使用的虛擬內存大小 512GB

64 位 CPU 架構的設備雖然擁有 64 位的地址空間,但是不是全部都可以使用的,為了后期的擴展,只能使用部分地址。

Android 默認的虛擬地址的長度配置為 CONFIG_ARM64_VA_BITS=39,即 Android 的 64 位應用可使用的地址空間大小為 2^39=512GB。

當 32 位應用在 64 位的設備上運行時,可使用 4GB 虛擬地址空間,而 64 位應用可使用 512GB 的空間。因此在 64 位機器上不存在虛擬空間不足的問題。因此在 2019 年的時候 Google Play 要求除了提供 32 位的版本之外,還需要提供 64 位的版本。

在我們的 OOM 崩潰設備中,32 位的設備占比 50%+ 以上,虛擬內存不足主要發生在 32 位的設備上。

為什么虛擬內存不足主要發生在 32 位的設備上

在 32 位的設備上,受地址空間最大內存 4 GB 限制,內核空間占用 1G,剩下的 3G 是用戶空間,我們可以通過解析  /process/pid/smaps 文件,查看當前虛擬內存分配情況。https://android.googlesource.com/platform/frameworks/base/+/3025ef332c29e255388f74b2afefe05f64bce07c/core/jni/android_os_Debug.cpp

  • 系統資源預分配,包含了 Zygote 進程初始化時,需要加載  Framework 層的代碼和資源。供 Fork 出來的子進程可以直接使用。Framework 資源包含:Framework 層 Java 代碼、so、art 虛擬機、各種靜態資源字體、文件等等
  • 系統預分配區域中其中 [anon:libwebview reservation] 區域占用 130MB 內存
  • App 自身資源,包括 App 中的代碼、資源、 App 直接或者間接開啟線程消耗的棧空間、 App 申請的內存、內存文件映射等內容。
  • Java 堆用于分配 Java / Kotlin 創建的對象。由 GC 管理和回收,GC 回收時將 From Space 里的對象復制到 To Space,這兩片區域分別為 dalvik-main space 和 dalvik-main space 1, 這兩片區域的大小和我當前測試機 Java 堆大小一樣,都是 512 MB,如下圖所示

圖片

根據 Android 源碼中的解釋,Java 堆的大小應該是根據 RAM Size 來設置的,這是一個經驗值,廠商是可以更改的,如果手機 Root 之后,自己也可以改,無論 RAM 多大,到目前為止 Java 堆的上限默認都是 512MB,Google 源碼的設置如下如下圖所示。https://android.googlesource.com/platform/frameworks/native/+/master/build

圖片

RAM (MB)-dalvik-heap.mk

heapsize (MB)

phone-hdpi-dalvik-heap.mk

32

512-dalvik-heap.mk

128

1024-dalvik-heap.mk

256

2048-dalvik-heap.mk

512

4096-dalvik-heap.mk

512

無論 RAM 多大,到目前為止堆的上限默認都是 512MB


  • 內存文件映射,mmap 是一種內存映射文件的方法,我們的 APK、Dex、so 等等都是通過 mmap 讀取的,會導致虛擬內存增大,mmap 占用的內存跟讀寫有關系

經過分析內核、系統資源、以及各 APP 的資源占用,最后留給我們使用的內存并不是很多,所以我們要合理使用系統資源,真正做到 "用時分配,及時釋放"。

如何解決虛擬內存不足的問題

目前業界也有很多黑科技來釋放因系統占用的虛擬內存不足的問題,這些黑科技可以參考微信分享的文章 快速緩解 32 位 Android 環境下虛擬內存地址空間不足的“黑科技”,大概有以下幾個方面的優化。

Native 線程默認的??臻g大小為 1M 左右,經過測試大部分情況下線程內執行的邏輯并不需要這么大的空間,因此 Native 線程棧空間減半,可以減少 pthread_create OOM 崩潰

系統預分配區域中其中 [anon:libwebview reservation] 區域占用 130MB 內存,可以嘗試釋放 WebView 預分配的內存,減少一部分虛擬內存

虛擬機堆空間減半,在上面提到過有兩片大小相同的區域分別 dalvik-main space 和 dalvik-main space 1,虛擬機堆空間減半其實就是減少其中一個 main space 所占用的內存

快手針對垃圾回收器 jemalloc 的優化,釋放的是 anon:libc_malloc 所占用的虛擬內存。

以下統計的是在 Android 7.0 App 首次啟動完成 libc_malloc 占用的虛擬內存 156MB

Vss Pss Rss name
159744 kB 81789 kB 82320 kB [anon:libc_malloc]

Android 11 之前使用的垃圾回收器是 jemalloc,Android 11 之后默認使用的垃圾回收器是 scudo。

App 啟動完成之后,虛擬內存的分布

下圖是 App 在 Android 7.0 上啟動完成之后所占用的虛擬內存 (Vss),不同系統、不同的 App 虛擬內存的分布都不一樣,,我們可以通過解析  /process/pid/smaps 文件,查看自己的 App 虛擬內存分配情況。https://android.googlesource.com/platform/frameworks/base/+/3025ef332c29e255388f74b2afefe05f64bce07c/core/jni/android_os_Debug.cpp

圖片


正如上圖所示,主要分為三個部分:

  • dalvik(即 Java 堆),程序在運行過程中為對象分配內存的區域
  • 程序文件 dex 、 so 、 oat
  • Native

針對上面的問題,我們在項目中通過以下手段進行優化,重點優化 dalvik 占用的內存,因篇幅問題,將會在后面的文章中,做詳細的分析:

  • Android 3.0 ~ Android 7.0 上主要將 Bitmap 對象和像素數據統一放到 Java 堆中,Java 堆上限 512MB,而 Native 占用虛擬內存,32 的設備可使用 3GB,64 位的設備更大,因此我們可以嘗試將 Bitmap 分配到 Native 上,緩解 Java 堆的壓力,降低 OOM 崩潰。??N???
  • 使用第三方圖片庫時,需要針對高端機和低端機設置圖片庫不同的緩存大小,這樣我們在高端機上保證體驗的同時,降低低端機 OOM 崩潰率
  • 收斂 Bitmap,避免重復創建 Bitmap,退出界面及時釋放掉資源(Bitmap、動畫、播放器等等資源)
  • 內存回收兜底策略,當 Activity 或者 Fragment 泄露時,與之相關聯的動畫、Bitmap、 DrawingCache 、背景、監聽器等等都無法釋放,當我們退出界面時,遞歸遍歷所有的子 view,釋放相關的資源,降低內存泄露時所占用的內存
  • 收斂線程,祖傳代碼在項目中有很多地方使用了 new Thread 、 AsyncTask 、自己創建線程池等等操作,通過統一的線程池等手段減少 App 創建線程數量,降低系統的開銷
  • 針對低端機和高端機采用不同的策略,減少低端機內存的占用
  • 內存泄露是永遠也解決不完的,所以需要梳理一下 Top 系列泄露問題,重點解決占用內存最多的泄露,以及使用頻率最高的場景所產生的泄露
  • 繁創建小對象,堆內存累計過大,這些一般都是有明顯堆棧的,根據堆棧信息解決即可。例如在循環動畫中一直創建 Bitmap
  • 大對象,堆的單次分配內存過大
  • 刪減代碼,減少 dex 文件占用的內存
  • 減少 App 中 dex 數量,非必要功能,可以通過動態下發
  • 按需加載 so 文件,不要提前加載所有的 so 文件,需要使用時再去加載

Java 堆上還有很多可用的內存,為什么還會出現 OOM

很多小伙伴們都問過我這么一個問題,大概歸因了一下,主要有以下幾個原因:

  • 內存碎片化,沒有足夠的連續段的內存分配
  • 虛擬內存不足
  • 線程或者 FD 的數量超過當前手機的閾值

文章的最后想提一點,我們在做性能優化的時候,不僅要關心性能指標數據,還需要關心對業務指標數據的影響,比如對使用時長、留存等等能提升多少。

為什么需要關心業務指標數據?

性能指標數據,比如 OOM 崩潰率、Native 崩潰率、ANR 等等、可能只有客戶端的小伙伴才知道 OOM、Native、ANR 是什么意思,但是其他人(產品經理、老板等等)他們是不知道的,也不會去關心這些,但是他們對使用時長、留存等業務指標數據更加的敏感,更能夠體現做這件事的價值,這只是闡述了我自己的觀點,每個人站的角度不一樣,觀點也不一樣。

全文到這里就結束了,這篇文章只是梳理一下內存相關的知識點,以及有那些因素會導致 OOM 崩潰和相對應的解決方案。

責任編輯:張燕妮 來源: ByteCode
相關推薦

2020-01-10 09:06:10

Activity系統 通信

2012-12-12 09:56:40

EC2AWSAmazon

2016-10-19 11:00:26

2010-08-26 15:34:12

2023-12-13 10:36:38

Long算法代碼

2021-04-19 07:35:01

Linuxhistory命令

2021-01-08 09:35:41

LinuxHistory命令

2021-04-26 10:24:52

Linux 開發操作系統

2015-06-05 15:47:47

2010-05-20 09:29:14

谷歌微軟云計算

2014-06-11 10:06:09

2015-10-09 11:02:02

2011-12-30 14:35:20

2011-01-25 09:24:00

2011-04-14 13:39:15

jar包

2017-02-14 14:23:52

大數據春晚

2020-03-24 14:57:05

戴爾

2015-04-17 10:30:13

2025-08-18 09:06:51

2016-05-04 10:14:32

點贊
收藏

51CTO技術棧公眾號

最新在线中文字幕| 午夜国产福利视频| 姬川优奈av一区二区在线电影| 久久久精品tv| 91中文在线观看| 男人天堂中文字幕| 欧美3p在线观看| 亚洲国产欧美自拍| 日本高清久久久| 中文字幕成在线观看| 国产精品狼人久久影院观看方式| 91文字幕巨乱亚洲香蕉| 亚洲熟妇无码乱子av电影| 国产精品久久久久久麻豆一区软件 | 精品午夜久久福利影院| 51久久精品夜色国产麻豆| 日本少妇aaa| 免费看成人吃奶视频在线| 欧美一区二区三区四区在线观看 | 精品亚洲aⅴ在线观看| 天天干天天色天天干| 性欧美freesex顶级少妇| 亚洲精品乱码久久久久久黑人| 日本视频一区二区在线观看| 国产黄色高清视频| 久久精品99国产精品| 欧美最顶级的aⅴ艳星| 久久久无码一区二区三区| 99久久99久久精品国产片果冰| 亚洲女在线观看| 理论片大全免费理伦片| 精品一区91| 欧美日韩精品一区二区天天拍小说 | 老司机深夜福利网站| 亚洲激情播播| 亚洲高清在线观看| 成年人看片网站| 电影一区二区三区久久免费观看| 91久久线看在观草草青青| 少妇无码av无码专区在线观看| 男女在线视频| 亚洲男人的天堂在线aⅴ视频| 亚洲午夜久久久影院伊人| 国产视频三级在线观看播放| 91色在线porny| 国产亚洲一区二区三区在线播放 | 日韩精品麻豆| 欧美在线免费视屏| 欧美性猛交久久久乱大交小说| xx欧美视频| 色偷偷一区二区三区| 国产成人亚洲精品无码h在线| 波多野结衣视频一区二区| 亚洲一区二区三区不卡国产欧美| 91传媒免费视频| 中日韩高清电影网| 一级日本不卡的影视| 蜜桃视频一区二区在线观看| 国产蜜臀av在线播放| 亚洲成人7777| 国产l精品国产亚洲区久久| 小草在线视频免费播放| 一本到不卡免费一区二区| 亚洲中文字幕无码不卡电影| 日本成人片在线| 欧美日韩国产成人在线91| 黄色aaaaaa| 成人av综合网| 亚洲男人的天堂网站| 先锋影音av在线| 天天射—综合中文网| 久久成人亚洲精品| 五月天婷婷综合网| 日韩va亚洲va欧美va久久| 国产精品女主播| 国产黄色一区二区| 94色蜜桃网一区二区三区| 日韩少妇中文字幕| www.在线视频| 日韩欧美在线网址| 国产又黄又猛的视频| 91欧美极品| 亚洲天堂第一页| 91日韩中文字幕| 午夜在线视频一区二区区别| 国产在线视频2019最新视频| 刘亦菲毛片一区二区三区| 久久色视频免费观看| 五月天综合婷婷| 国产精品一二三产区| 欧美无砖专区一中文字| 精品人妻一区二区三| 亚洲婷婷伊人| 欧美大片免费看| 一级特黄免费视频| 国产成人亚洲综合a∨猫咪| 欧美日韩精品久久久免费观看| 日本天堂在线观看| 欧美性xxxx在线播放| www.污网站| 国产永久精品大片wwwapp| 欧美成人第一页| 男人天堂av在线播放| 国产成人av资源| 亚洲精品不卡| 超碰成人av| 6080日韩午夜伦伦午夜伦| 色噜噜在线观看| 国产精品porn| 国产日韩一区在线| 国产在线色视频| 精品国产精品三级精品av网址| 日本人69视频| 欧美日韩伦理| 2020久久国产精品| www久久久com| 日韩一区欧美一区| 欧美性猛交xxx乱久交| 成人香蕉社区| 欧美大片免费观看| 国产露脸国语对白在线| 久久久精品人体av艺术| 欧美成人高潮一二区在线看| 国产人与zoxxxx另类91| 色婷婷av一区二区三区久久| 成人午夜视频在线播放| 成人不卡免费av| 91亚洲精品国产| 精品国产鲁一鲁****| 中文字幕亚洲自拍| 中文字幕日日夜夜| 国产欧美日韩综合精品一区二区| 黄色免费观看视频网站| 欧美日韩看看2015永久免费| 久久免费国产视频| 亚洲av无码乱码国产麻豆 | 久青草视频在线观看| 国产一区二区0| 国产精品h视频| 日韩五码电影| 精品国产欧美成人夜夜嗨| 中文字幕乱码一区二区| 国产欧美精品日韩区二区麻豆天美| 亚洲美免无码中文字幕在线 | 亚洲一二三在线| 中文字幕69页| 欧美高清一级片在线观看| 日韩一级片播放| 北条麻妃国产九九九精品小说| 日韩男女性生活视频| 国产在线观看黄| 欧美日韩亚洲高清一区二区| 国产又粗又长免费视频| 久久se精品一区二区| 一本一本a久久| 懂色av色香蕉一区二区蜜桃| 欧美不卡视频一区发布| 亚洲a视频在线观看| 亚洲国产精品一区二区www| 黄色在线免费播放| 久久久久久穴| 亚洲一区二区四区| 国产精品18| 久久久久女教师免费一区| 免费国产羞羞网站视频| 偷拍一区二区三区| 国产毛片久久久久久久| 久久成人18免费观看| 4444亚洲人成无码网在线观看| 岛国精品一区| 国产成人精品免高潮在线观看 | www黄色网址| 亚洲成av人片一区二区| 精品无人区无码乱码毛片国产| 麻豆精品在线视频| 国产精品免费看久久久无码| 婷婷精品在线观看| 国产精品视频在线观看| 欧美卡一卡二| 亚洲人a成www在线影院| 国产精品无码免费播放| 亚洲va欧美va人人爽| 久久久精品成人| 懂色一区二区三区免费观看| 黄色片视频在线免费观看| 91久久久精品国产| 精品国产一区二区三| 韩日精品一区| 久久久久久久影院| porn亚洲| 亚洲国产精品99| 亚洲午夜激情视频| 精品久久久国产| 国产性xxxx| 国产欧美日韩中文久久| 亚洲一区和二区| 久久精品久久综合| 日韩av一二三四区| 欧美日本一区| 天堂资源在线亚洲视频| 老司机精品在线| 成人激情春色网| 婷婷六月国产精品久久不卡| 久久99热精品这里久久精品| 国产高清视频在线| 日韩成人免费视频| 亚洲高清视频网站| 欧美片网站yy| 伦av综合一区| 五月婷婷久久丁香| 欧美精品久久久久性色| 国产精品亲子乱子伦xxxx裸| 37p粉嫩大胆色噜噜噜| 成人性生交大片免费看中文| 亚洲天堂国产视频| 日韩精品视频网站| 黄色动漫网站入口| 伊人天天综合| 东北少妇不带套对白| 亚洲免费二区| 中文字幕久精品免| 日本高清免费电影一区| 欧美一区二区视频在线| 农村少妇一区二区三区四区五区 | 国产福利第一视频| 欧美精品久久99| 91一区二区视频| 欧美日韩免费一区二区三区视频| 波多野结衣在线观看一区| 一本色道**综合亚洲精品蜜桃冫| 丰满少妇乱子伦精品看片| 亚洲国产日韩综合久久精品| 91日韩中文字幕| 亚洲黄网站在线观看| 欧美手机在线观看| 亚洲欧美激情视频在线观看一区二区三区 | 国产成人麻豆精品午夜在线| 欧美日韩高清一区二区三区| 最近中文字幕在线免费观看| 欧美在线高清视频| 在线观看免费黄色小视频| 欧美在线三级电影| 亚洲综合视频在线播放| 欧美巨大另类极品videosbest | www.色精品| 色综合久久五月| 91美女蜜桃在线| 亚洲第一成人网站| 国产日韩影视精品| 欧美色图17p| 亚洲免费av观看| 久久久久黄色片| 亚洲国产日韩精品| 欧美在线观看不卡| 在线精品亚洲一区二区不卡| 日本妇乱大交xxxxx| 欧美精品黑人性xxxx| 国产视频手机在线| 日韩精品在线一区| 性xxxxbbbb| 国产亚洲xxx| 精品美女在线观看视频在线观看| 欧美成人一二三| 国产在线88av| 国产成人综合一区二区三区| 亚洲精品第一| 成人在线视频网址| 在线日韩网站| 中国一区二区三区| 亚洲二区在线| 手机看片福利盒子久久| 国产美女在线观看一区| 国产av一区二区三区传媒| xfplay精品久久| 日本视频在线免费| 亚洲成人av电影| 中文字幕 欧美激情| 日韩欧美一区二区视频| 天堂视频中文在线| 日韩中文视频免费在线观看| 国产网红在线观看| 国产精品高清在线观看| 日韩第一区第二区| 日本在线观看一区二区| 欧美久久综合| 欧美两根一起进3p做受视频| 国产在线一区观看| 男女黄床上色视频| 亚洲日本电影在线| 成人h动漫精品一区二区下载| 91精品视频网| 国模吧精品人体gogo| 欧美高清电影在线看| 精品三级在线| 久久久久网址| 欧美在线三级| 好男人www社区| www.日本不卡| 中日韩一级黄色片| 色一情一伦一子一伦一区| 亚洲不卡免费视频| 日韩在线免费视频观看| 亚洲一级少妇| 国产精品乱码一区二区三区| 欧美超碰在线| 久久精品午夜福利| www.亚洲精品| 久久久久亚洲av成人片| 欧美精品一二三四| 九色国产在线观看| 国内揄拍国内精品| 蜜桃精品一区二区三区| 致1999电视剧免费观看策驰影院| 久久精品123| 成人性生活免费看| 亚洲韩国精品一区| 亚洲av永久纯肉无码精品动漫| 日韩视频在线免费| 亚洲a∨精品一区二区三区导航| 久久亚洲午夜电影| av不卡在线| 在线xxxxx| 亚洲国产乱码最新视频| a视频免费在线观看| 久久精品国产欧美激情| 成人福利片在线| 亚洲精美视频| 男女男精品视频| 色www亚洲国产阿娇yao| 欧美亚洲国产一卡| 狠狠色伊人亚洲综合网站l| 毛片基地在线观看| 国产黑丝在线一区二区三区| 国产99在线 | 亚洲| 欧美日韩中文字幕日韩欧美| 亚洲av无码乱码国产麻豆| 久久色在线播放| gogo大尺度成人免费视频| 在线不卡视频一区二区| 精油按摩中文字幕久久| 日韩欧美123区| 欧美一级一区二区| 里番在线播放| 国产精品欧美久久| 亚洲激情另类| 极品白嫩丰满美女无套| 色综合久久99| 不卡在线视频| 成人免费视频在线观看超级碰| 久久久久久美女精品| 三级黄色片免费看| 亚洲成人精品影院| 日本1级在线| 国产精品一区二区三区成人| 欧美疯狂party性派对| 波多野结衣网页| 天天av天天翘天天综合网| 天堂av电影在线观看| 国产91久久婷婷一区二区| 日韩欧美国产精品综合嫩v| 亚洲精品视频三区| 一区二区欧美视频| 五月天激情开心网| 日韩美女视频免费看| 香蕉久久网站| 国产精品久久久免费观看| 色8久久人人97超碰香蕉987| 成人精品一区| 成人欧美一区二区三区视频xxx | 久久国产成人精品国产成人亚洲| 久久精品一区二区三区四区| 中文字幕人成人乱码亚洲电影| 欧美成人午夜激情在线| 天堂在线精品| 福利视频999| 亚洲成av人片在线观看| av大片在线看| 国产视色精品亚洲一区二区| 日本欧美加勒比视频| 青草草在线视频| 亚洲午夜性刺激影院| 日本少妇精品亚洲第一区| 少妇高清精品毛片在线视频| 18成人在线视频| 青青久草在线| 成人在线视频电影| 奇米在线7777在线精品| 久久一级黄色片| 中文字幕亚洲无线码在线一区| 精品女人视频| 久久久精品高清| 一本大道久久a久久综合| 2024最新电影免费在线观看| 蜜桃网站成人| 国产福利一区二区三区视频在线| 日日骚av一区二区| 欧美精品videofree1080p| 欧美日韩一区二区综合 | 国产美女裸体无遮挡免费视频| 7777免费精品视频|