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

掌握這3個技巧,你也可以秒懂JAVA性能調優和jvm垃圾回收

開發 前端
JVM 是一個虛擬化的操作系統,類似于 Linux 和 Window,只是他被架構在了操作系統上進行接收 class 文件并把 class 翻譯成系統識別的機器碼進行執行,即 JVM 為我們屏蔽了不同操作系統在底層硬件和操作指令的不同。

前言

JVM 是一個虛擬化的操作系統,類似于 Linux 和 Window,只是他被架構在了操作系統上進行接收 class 文件并把 class 翻譯成系統識別的機器碼進行執行,即 JVM 為我們屏蔽了不同操作系統在底層硬件和操作指令的不同。

因此,JVM 最重要的作用浮出水面,即跨平臺性。由于 JVM 為 java 程序屏蔽了操作系統底層的細節,Java 只需要關心如何編譯,如何讓加載進 JVM 即可。

由于 JVM 接收的是 Class 文件,而不是接收特定的語言,因此只要某種語言可以編譯成 Class 文件,就可以在 JVM 上運行,這些語言有 Groovy、Kotlin、Scala 等等。因此 JVM 的另一個重要特性就是語言無關性,即跨語言。

一、JVM內存模型及垃圾收集算法

1.根據Java虛擬機規范,JVM將內存劃分為:

New(年輕代)

Tenured(年老代)

永久代(Perm)

其中New和Tenured屬于堆內存,堆內存會從JVM啟動參數(-Xmx:3G)指定的內存中分配,Perm不屬于堆內存,有虛擬機直接分配,但可以通過 -XX:PermSize -XX:MaxPermSize 等參數調整其大小。

年輕代(New):年輕代用來存放JVM剛分配的Java對象

年老代(Tenured):年輕代中經過垃圾回收沒有回收掉的對象將被Copy到年老代

永久代(Perm):永久代存放Class、Method元信息,其大小跟項目的規模、類、方法的量有關,一般設置為128M就足夠,設置原則是預留30%的空間。

New又分為幾個部分:

Eden:Eden用來存放JVM剛分配的對象

Survivor1

Survivro2:兩個Survivor空間一樣大,當Eden中的對象經過垃圾回收沒有被回收掉時,會在兩個Survivor之間來回Copy,當滿足某個條件,比如Copy次數,就會被Copy到Tenured。顯然,Survivor只是增加了對象在年輕代中的逗留時間,增加了被垃圾回收的可能性。

2.垃圾回收算法

垃圾回收算法可以分為三類,都基于標記-清除(復制)算法:

Serial算法(單線程)

并行算法

并發算法

JVM會根據機器的硬件配置對每個內存代選擇適合的回收算法,比如,如果機器多于1個核,會對年輕代選擇并行算法,關于選擇細節請參考JVM調優文檔。

稍微解釋下的是,并行算法是用多線程進行垃圾回收,回收期間會暫停程序的執行,而并發算法,也是多線程回收,但期間不停止應用執行。所以,并發算法適用于交互性高的一些程序。經過觀察,并發算法會減少年輕代的大小,其實就是使用了一個大的年老代,這反過來跟并行算法相比吞吐量相對較低。

垃圾回收動作何時執行?

還有一個問題是,垃圾回收動作何時執行?

當年輕代內存滿時,會引發一次普通GC,該GC僅回收年輕代。需要強調的時,年輕代滿是指Eden代滿,Survivor滿不會引發GC

當年老代滿時會引發Full GC,Full GC將會同時回收年輕代、年老代

當永久代滿時也會引發Full GC,會導致Class、Method元信息的卸載

另一個問題是,何時會拋出OutOfMemoryException,并不是內存被耗空的時候才拋出

JVM98%的時間都花費在內存回收

每次回收的內存小于2%

滿足這兩個條件將觸發OutOfMemoryException,這將會留給系統一個微小的間隙以做一些Down之前的操作,比如手動打印Heap Dump。

二、內存泄漏及解決方法

1.系統崩潰前的一些現象:

每次垃圾回收的時間越來越長,由之前的10ms延長到50ms左右,FullGC的時間也有之前的0.5s延長到4、5s

FullGC的次數越來越多,最頻繁時隔不到1分鐘就進行一次FullGC

年老代的內存越來越大并且每次FullGC后年老代沒有內存被釋放

之后系統會無法響應新的請求,逐漸到達OutOfMemoryError的臨界值。

2.生成堆的dump文件

通過JMX的MBean生成當前的Heap信息,大小為一個3G(整個堆的大小)的hprof文件,如果沒有啟動JMX可以通過Java的jmap命令來生成該文件。

3.分析dump文件

下面要考慮的是如何打開這個3G的堆信息文件,顯然一般的Window系統沒有這么大的內存,必須借助高配置的Linux。當然我們可以借助X-Window把Linux上的圖形導入到Window。我們考慮用下面幾種工具打開該文件:

Visual VM

IBM HeapAnalyzer

JDK 自帶的Hprof工具

使用這些工具時為了確保加載速度,建議設置最大內存為6G。使用后發現,這些工具都無法直觀地觀察到內存泄漏,Visual VM雖能觀察到對象大小,但看不到調用堆棧;HeapAnalyzer雖然能看到調用堆棧,卻無法正確打開一個3G的文件。因此,我們又選用了Eclipse專門的靜態內存分析工具:Mat。

4.分析內存泄漏

通過Mat我們能清楚地看到,哪些對象被懷疑為內存泄漏,哪些對象占的空間最大及對象的調用關系。針對本案,在ThreadLocal中有很多的JbpmContext實例,經過調查是JBPM的Context沒有關閉所致。

另,通過Mat或JMX我們還可以分析線程狀態,可以觀察到線程被阻塞在哪個對象上,從而判斷系統的瓶頸。

5.回歸問題

Q:為什么崩潰前垃圾回收的時間越來越長?

A:根據內存模型和垃圾回收算法,垃圾回收分兩部分:內存標記、清除(復制),標記部分只要內存大小固定時間是不變的,變的是復制部分,因為每次垃圾回收都有一些回收不掉的內存,所以增加了復制量,導致時間延長。所以,垃圾回收的時間也可以作為判斷內存泄漏的依據

Q:為什么Full GC的次數越來越多?

A:因此內存的積累,逐漸耗盡了年老代的內存,導致新對象分配沒有更多的空間,從而導致頻繁的垃圾回收

Q:為什么年老代占用的內存越來越大?

A:因為年輕代的內存無法被回收,越來越多地被Copy到年老代

三、性能調優

除了上述內存泄漏外,我們還發現CPU長期不足3%,系統吞吐量不夠,針對8core×16G、64bit的Linux服務器來說,是嚴重的資源浪費。

在CPU負載不足的同時,偶爾會有用戶反映請求的時間過長,我們意識到必須對程序及JVM進行調優。從以下幾個方面進行:

線程池:解決用戶響應時間長的問題

連接池

JVM啟動參數:調整各代的內存比例和垃圾回收算法,提高吞吐量

程序算法:改進程序邏輯算法提高性能

1.Java線程池(java.util.concurrent.ThreadPoolExecutor)

大多數JVM6上的應用采用的線程池都是JDK自帶的線程池,之所以把成熟的Java線程池進行羅嗦說明,是因為該線程池的行為與我們想象的有點出入。Java線程池有幾個重要的配置參數:

corePoolSize:核心線程數(最新線程數)

maximumPoolSize:最大線程數,超過這個數量的任務會被拒絕,用戶可以通過RejectedExecutionHandler接口自定義處理方式

keepAliveTime:線程保持活動的時間

workQueue:工作隊列,存放執行的任務

Java線程池需要傳入一個Queue參數(workQueue)用來存放執行的任務,而對Queue的不同選擇,線程池有完全不同的行為:

SynchronousQueue:一個無容量的等待隊列,一個線程的insert操作必須等待另一線程的remove操作,采用這個Queue線程池將會為每個任務分配一個新線程

LinkedBlockingQueue :無界隊列,采用該Queue,線程池將忽略maximumPoolSize參數,僅用corePoolSize的線程處理所有的任務,未處理的任務便在LinkedBlockingQueue中排隊

ArrayBlockingQueue: 有界隊列,在有界隊列和maximumPoolSize的作用下,程序將很難被調優:更大的Queue和小的maximumPoolSize將導致CPU的低負載;小的Queue和大的池,Queue就沒起動應有的作用。

其實我們的要求很簡單,希望線程池能跟連接池一樣,能設置最小線程數、最大線程數,當最小數<任務<最大數時,應該分配新的線程處理;當任務>最大數時,應該等待有空閑線程再處理該任務。

線程池的設計思路

但線程池的設計思路是,任務應該放到Queue中,當Queue放不下時再考慮用新線程處理,如果Queue滿且無法派生新線程,就拒絕該任務。設計導致“先放等執行”、“放不下再執行”、“拒絕不等待”。所以,根據不同的Queue參數,要提高吞吐量不能一味地增大maximumPoolSize。

當然,要達到我們的目標,必須對線程池進行一定的封裝,幸運的是ThreadPoolExecutor中留了足夠的自定義接口以幫助我們達到目標。我們封裝的方式是:

以SynchronousQueue作為參數,使maximumPoolSize發揮作用,以防止線程被無限制的分配,同時可以通過提高maximumPoolSize來提高系統吞吐量

自定義一個RejectedExecutionHandler,當線程數超過maximumPoolSize時進行處理,處理方式為隔一段時間檢查線程池是否可以執行新Task,如果可以把拒絕的Task重新放入到線程池,檢查的時間依賴keepAliveTime的大小。

2.連接池(org.apache.commons.dbcp.BasicDataSource)

在使用org.apache.commons.dbcp.BasicDataSource的時候,因為之前采用了默認配置,所以當訪問量大時,通過JMX觀察到很多Tomcat線程都阻塞在BasicDataSource使用的Apache ObjectPool的鎖上,直接原因當時是因為BasicDataSource連接池的最大連接數設置的太小,默認的BasicDataSource配置,僅使用8個最大連接。

我還觀察到一個問題,當較長的時間不訪問系統,比如2天,DB上的Mysql會斷掉所以的連接,導致連接池中緩存的連接不能用。為了解決這些問題,我們充分研究了BasicDataSource,發現了一些優化的點:

Mysql默認支持100個鏈接,所以每個連接池的配置要根據集群中的機器數進行,如有2臺服務器,可每個設置為60

initialSize:參數是一直打開的連接數

minEvictableIdleTimeMillis:該參數設置每個連接的空閑時間,超過這個時間連接將被關閉

timeBetweenEvictionRunsMillis:后臺線程的運行周期,用來檢測過期連接

maxActive:最大能分配的連接數

maxIdle:最大空閑數,當連接使用完畢后發現連接數大于maxIdle,連接將被直接關閉。只有initialSize < x < maxIdle的連接將被定期檢測是否超期。這個參數主要用來在峰值訪問時提高吞吐量。

initialSize是如何保持的?

initialSize是如何保持的?經過研究代碼發現,BasicDataSource會關閉所有超期的連接,然后再打開initialSize數量的連接,這個特性與minEvictableIdleTimeMillis、timeBetweenEvictionRunsMillis一起保證了所有超期的initialSize連接都會被重新連接,從而避免了Mysql長時間無動作會斷掉連接的問題。

3.JVM參數

在JVM啟動參數中,可以設置跟內存、垃圾回收相關的一些參數設置,默認情況不做任何設置JVM會工作的很好,但對一些配置很好的Server和具體的應用必須仔細調優才能獲得最佳性能。通過設置我們希望達到一些目標:

GC的時間足夠的小

GC的次數足夠的少

發生Full GC的周期足夠的長

前兩個目前是相悖的,要想GC時間小必須要一個更小的堆,要保證GC次數足夠少,必須保證一個更大的堆,我們只能取其平衡。

(1)針對JVM堆的設置一般,可以通過-Xms -Xmx限定其最小、最大值,為了防止垃圾收集器在最小、最大之間收縮堆而產生額外的時間,我們通常把最大、最小設置為相同的值

(2)年輕代和年老代將根據默認的比例(1:2)分配堆內存,可以通過調整二者之間的比率NewRadio來調整二者之間的大小,也可以針對回收代,比如年輕代,通過 -XX:newSize -XX:MaxNewSize來設置其絕對大小。同樣,為了防止年輕代的堆收縮,我們通常會把-XX:newSize -XX:MaxNewSize設置為同樣大小

(3)年輕代和年老代設置多大才算合理?這個我問題毫無疑問是沒有答案的,否則也就不會有調優。我們觀察一下二者大小變化有哪些影響

更大的年輕代必然導致更小的年老代,大的年輕代會延長普通GC的周期,但會增加每次GC的時間;小的年老代會導致更頻繁的Full GC

更小的年輕代必然導致更大年老代,小的年輕代會導致普通GC很頻繁,但每次的GC時間會更短;大的年老代會減少Full GC的頻率

如何選擇應該依賴應用程序對象生命周期的分布情況:如果應用存在大量的臨時對象,應該選擇更大的年輕代;如果存在相對較多的持久對象,年老代應該適當增大。但很多應用都沒有這樣明顯的特性,在抉擇時應該根據以下兩點:(A)本著Full GC盡量少的原則,讓年老代盡量緩存常用對象,JVM的默認比例1:2也是這個道理 (B)通過觀察應用一段時間,看其他在峰值時年老代會占多少內存,在不影響Full GC的前提下,根據實際情況加大年輕代,比如可以把比例控制在1:1。但應該給年老代至少預留1/3的增長空間

(4)在配置較好的機器上(比如多核、大內存),可以為年老代選擇并行收集算法: -

  1. XX:+UseParallelOldGC,默認為Serial收集 
  2. 復制代碼 

(5)線程堆棧的設置:每個線程默認會開啟1M的堆棧,用于存放棧幀、調用參數、局部變量等,對大多數應用而言這個默認值太了,一般256K就足用。理論上,在內存不變的情況下,減少每個線程的堆棧,可以產生更多的線程,但這實際上還受限于操作系統。

(4)可以通過下面的參數打Heap Dump信息

  1. -XX:HeapDumpPath-XX:+PrintGCDetails-XX:+PrintGCTimeStamps-Xloggc:/usr/aaa/dump/heap_trace.txt 
  2. 復制代碼 

通過下面參數可以控制OutOfMemoryError時打印堆的信息

  1. -XX:+HeapDumpOnOutOfMemoryError 
  2. 復制代碼 

請看一下一個時間的Java參數配置:(服務器:Linux 64Bit,8Core×16G)

  1. JAVA_OPTS="$JAVA_OPTS -server -Xms3G -Xmx3G -Xss256k -XX:PermSize=128m -XX:MaxPermSize=128m -XX:+UseParallelOldGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/aaa/dump -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/usr/aaa/dump/heap_trace.txt -XX:NewSize=1G -XX:MaxNewSize=1G" 
  2. 復制代碼 

經過觀察該配置非常穩定,每次普通GC的時間在10ms左右,Full GC基本不發生,或隔很長很長的時間才發生一次

責任編輯:張燕妮 來源: segmentfault.com
相關推薦

2010-09-26 11:22:22

JVM垃圾回收JVM

2012-01-09 16:53:36

JavaJVM

2019-11-28 09:25:43

Java調優技巧

2020-12-30 15:06:39

開發技能代碼

2015-07-06 10:14:25

Java垃圾回收實戰

2012-01-10 11:19:35

JavaJVM

2012-01-09 17:06:16

JavaJVM

2014-12-19 11:07:40

Java

2023-11-23 09:26:50

Java調優

2020-11-09 07:34:49

JVM性能監控

2021-02-04 10:43:52

開發技能代碼

2021-01-04 10:08:07

垃圾回收Java虛擬機

2010-09-26 09:08:17

JVM調優

2022-01-20 10:34:49

JVM垃圾回收算法

2017-07-21 08:55:13

TomcatJVM容器

2012-01-10 14:25:36

JavaJVM

2023-02-07 08:00:00

MySQL數據庫技巧

2023-12-12 08:00:39

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2017-11-17 08:56:59

Java性能優化技巧
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩第一页| 亚欧在线免费观看| 欧美精品a∨在线观看不卡| 老牛影视一区二区三区| 久久久精品国产亚洲| 国产精品入口麻豆| 国产精品久久久久久久久免费高清| 亚洲另类春色国产| 欧美激情国产日韩| 99热这里只有精| 欧美资源在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产亚洲无码精品| 欧美9999| 欧美三级韩国三级日本一级| 全黄性性激高免费视频| 在线观看二区| 99精品国产热久久91蜜凸| 国产在线观看精品| 999视频在线| 伊人狠狠色j香婷婷综合| 在线播放日韩精品| yy1111111| 欧美h版在线观看| 欧美日韩亚洲综合一区| 久久综合色视频| 欧美1—12sexvideos| 国产精品久久久久婷婷| 欧美性xxxx69| 亚洲色图 校园春色| 国产精品自拍在线| 国产免费亚洲高清| 国产情侣免费视频| 丝袜美腿亚洲色图| 91wwwcom在线观看| 一级片免费网址| 欧美日韩国产精品一区二区亚洲| 中文字幕欧美日韩在线| 中文字幕丰满孑伦无码专区| 国产精品美女在线观看直播| 日韩一区二区三区四区| 一区二区久久精品| 日本黄色成人| 欧美精品乱人伦久久久久久| 色噜噜狠狠一区二区| 最新日韩一区| 91电影在线观看| 老司机午夜av| 户外露出一区二区三区| 91国偷自产一区二区开放时间| av免费在线播放网站| 台湾佬中文娱乐网欧美电影| 午夜婷婷国产麻豆精品| 国产69精品久久久久久久| av美女在线观看| 亚洲成人久久影院| 午夜肉伦伦影院| 欧美1级2级| 精品视频色一区| 天天色天天综合网| 国产精品白丝久久av网站| 在线播放91灌醉迷j高跟美女| 日本在线播放一区二区| 精品视频国内| 精品国产伦一区二区三区观看体验 | 欧美一级大片在线免费观看| 91国产丝袜播放在线| 欧美亚洲网站| 国产精品青草久久久久福利99| 欧美日韩 一区二区三区| 美腿丝袜一区二区三区| 成人做爽爽免费视频| 亚洲h视频在线观看| aaa国产一区| 色一情一乱一伦一区二区三欧美 | 久热精品在线播放| 国产高清亚洲| 亚洲精品国产精品乱码不99按摩 | 国产精品灌醉下药二区| 中国成人在线视频| 97人人爽人人澡人人精品| 色综合久久久久综合| 五月天亚洲视频| 日韩成人18| 亚洲精品一区二区三区婷婷月| 99在线视频免费| 欧美人成网站| 国产不卡一区二区在线播放| 国产视频在线观看免费| 国产91露脸合集magnet| 欧美亚洲免费高清在线观看| 欧美jizz18hd性欧美| 亚洲成人免费在线观看| www.精品在线| 国产欧美自拍一区| 中文字幕亚洲第一| 国产精品suv一区二区三区| 麻豆精品视频在线观看免费| 国产二区不卡| 在线免费黄色| 狠狠做深爱婷婷久久综合一区| 久热精品在线播放| 在线看成人短视频| 欧美大尺度激情区在线播放| 91视频在线视频| 国产成人精品一区二区三区四区| 欧洲精品久久| 国产不卡123| 在线不卡中文字幕播放| 亚洲AV无码片久久精品| 一区二区三区在线电影| 国产suv精品一区二区| 性少妇videosexfreexxx片| 国产欧美日韩卡一| 国产在线青青草| 日韩第一区第二区| 久久精品视频网站| 男人天堂av在线播放| 成人黄色一级视频| 99热这里只有精品免费| 亚洲国产伊人| 一区二区三区亚洲| 亚洲va在线观看| 成人sese在线| 国产成人一区二区三区别| 四虎地址8848精品| 国产亚洲激情视频在线| www.日本精品| 成人18视频日本| 久久手机在线视频| 精品中文字幕一区二区三区四区| 色哟哟网站入口亚洲精品| 在线永久看片免费的视频| 97国产一区二区| 少妇高潮毛片色欲ava片| 中文字幕亚洲在线观看| 久久成人免费视频| 国产偷拍一区二区| 亚洲人成在线播放网站岛国| 亚洲国产成人va在线观看麻豆| 欧美男同视频网| 日韩av第一页| 国产特黄在线| 在线观看日韩电影| 欧美性受xxxx黑人| 蜜桃久久精品一区二区| 先锋影音一区二区三区| 成人在线视频观看| 日韩中文字幕在线视频| 国产精品久久久久久免费免熟| 国产精品天美传媒沈樵| 亚洲娇小娇小娇小| 忘忧草精品久久久久久久高清| 成人福利视频在线观看| 超碰caoporn久久| 欧美一级搡bbbb搡bbbb| 久视频在线观看| 成人免费高清在线观看| 成人免费aaa| 成人区精品一区二区婷婷| 国产精品久久久久av免费| 在线看黄色av| 91精品国产综合久久婷婷香蕉| 极品久久久久久| 成人夜色视频网站在线观看| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 久久99青青| 国产精品专区h在线观看| 免费网站看v片在线a| 日韩一区二区精品葵司在线 | 欧美天天在线| 国产欧美一区二区视频| 久久uomeier| 日韩一区视频在线| 亚洲国产成人在线观看| 欧美性猛交xxxx偷拍洗澡| av手机在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 成人亚洲激情网| 国精一区二区三区| 国产一区二区久久精品| 国产情侣激情自拍| 福利一区视频在线观看| 91禁男男在线观看| aaa欧美色吧激情视频| 国产一级特黄a大片免费| 午夜精品久久| 视频一区二区在线观看| 在线视频亚洲欧美中文| 国产成人精品一区二区| 在线网址91| 国产一区二区三区在线免费观看| 北条麻妃一二三区| 色哟哟一区二区三区| 精品国产乱码久久久久久鸭王1| 91首页免费视频| 91热视频在线观看| 另类亚洲自拍| 一卡二卡三卡视频| 91麻豆精品国产91久久久平台| 国产综合第一页| 中文字幕成人| 国产成一区二区| 成人免费观看在线观看| 久久精品国产成人| 国产永久av在线| 亚洲精品福利在线观看| 99久久国产热无码精品免费| 色婷婷久久久亚洲一区二区三区| 九九视频免费看| 中文字幕中文字幕中文字幕亚洲无线| 亚洲精品在线视频免费观看| 国产伦精品一区二区三区免费迷| 波多野结衣天堂| 久久激情综合| 奇米影视亚洲色图| 一区二区三区毛片免费| 亚洲国产精品毛片| 欧美精美视频| 久久免费看av| 美女呻吟一区| 国产精品久久久一区二区三区| 少妇高潮一区二区三区99| 国产不卡在线观看| 卡通欧美亚洲| 日本亚洲欧洲色α| 亚洲风情在线资源| 18性欧美xxxⅹ性满足| 超清av在线| 欧美另类精品xxxx孕妇| 久久综合网导航| 丝袜亚洲欧美日韩综合| 成人精品一区二区三区校园激情| 亚洲免费成人av电影| 香蕉视频黄色片| 日韩经典一区二区三区| 午夜激情在线视频| 亚洲精品久久久久中文字幕欢迎你 | 成人福利视频网站| 99riav国产精品视频| 国产成人免费在线观看| 俄罗斯女人裸体性做爰| 国产一区二区导航在线播放| 51自拍视频在线观看| 国产一区二区三区av电影| 免费人成视频在线播放| 国产黄色精品网站| 日批视频免费看| 不卡的av电影| 成人免费看aa片| 日本一区二区三区高清不卡| 人成免费在线视频| 国产精品久久久久久久久搜平片| 特黄一区二区三区| 国模私拍视频一区| 国产v亚洲v天堂无码| 一区二区三区伦理| 欧美精品制服第一页| 黄色大片在线| 69久久夜色精品国产69| 成人美女黄网站| 国产精品久久久久久久久免费| 国产精品亚洲成在人线| 国产一区深夜福利| 日韩精品亚洲专区在线观看| 国产精品免费一区二区三区四区| 麻豆精品99| 亚洲国产日韩美| 欧美日韩18| ww国产内射精品后入国产| 日韩av午夜在线观看| 亚洲高清视频免费| 97久久精品人人爽人人爽蜜臀| 性高潮久久久久久久| 中文字幕视频一区二区三区久| 久久久久久福利| 一本高清dvd不卡在线观看| 在线播放成人av| 欧美tk—视频vk| 欧美亚洲日本| 久久中文字幕视频| 亚洲天堂电影| 91欧美激情另类亚洲| 精品国产乱子伦一区二区| 日韩精品一区二区三区四区五区| 五月婷婷六月综合| 奇米精品一区二区三区| 久草热8精品视频在线观看| 久久久久久久久久影视| 中文字幕免费观看一区| 久久久久久免费观看| 欧美日韩中文另类| 噜噜噜久久,亚洲精品国产品| 亚洲性夜色噜噜噜7777| 女同视频在线观看| 国产精品欧美久久久| 久久久久97| 日韩不卡一二区| 日本特黄久久久高潮| 日本少妇一级片| 国产欧美一区二区三区鸳鸯浴| 免费一级a毛片夜夜看| 欧美天天综合网| 视频一区二区三区国产| www亚洲欧美| japanese23hdxxxx日韩| 国产精品免费区二区三区观看| 久久精品高清| 国产极品美女高潮无套久久久| 国产成人在线色| 女同久久另类69精品国产| 日本韩国欧美国产| 亚洲 美腿 欧美 偷拍| 欧美猛交ⅹxxx乱大交视频| 欧美aaaaaa| 水蜜桃一区二区| 久久九九99| 97人妻精品一区二区三区免费 | 国产一区再线| 中文在线日韩| 中文字幕中文在线| 中文文精品字幕一区二区| 男人天堂2024| 日韩精品视频在线免费观看| 国产在线拍揄自揄拍视频| 亚洲一区亚洲二区| 久久一区二区三区电影| 精品久久久久久中文字幕2017| xnxx国产精品| 国产超碰人人爽人人做人人爱| 亚洲国产精品视频在线观看| 九色91在线| 国产精品久久一区二区三区| 欧美片第1页综合| 一个人看的视频www| 亚洲欧美乱综合| 国产富婆一级全黄大片| 久久综合免费视频影院| 一区二区三区| 视色,视色影院,视色影库,视色网| 久久av资源站| 神马午夜精品91| 欧美一区二区黄色| 中文字幕有码在线观看| 114国产精品久久免费观看| 亚洲精品国产首次亮相| 在线观看av免费观看| 一区二区三区四区在线播放 | 成人亚洲视频| 一区二区视频国产| 狠狠狠色丁香婷婷综合久久五月| 开心激情五月网| 欧美一区二区久久久| 女人天堂av在线播放| 国产精品免费看一区二区三区| 99精品视频网| 51妺嘿嘿午夜福利| 欧美日韩高清在线| 成a人片在线观看| 粉嫩高清一区二区三区精品视频 | 亚洲靠逼com| 亚洲精品字幕在线| 91超碰caoporn97人人| 国产中文精品久高清在线不| 在线观看免费不卡av| 亚洲一级二级在线| 视频在线观看你懂的| 国产精品尤物福利片在线观看| 久久成人综合| 野战少妇38p| 欧美视频国产精品| 日本暖暖在线视频| 成人蜜桃视频| 丝袜亚洲另类欧美综合| 紧身裙女教师波多野结衣| 亚洲第一级黄色片| 福利一区和二区| 蜜桃视频一区二区在线观看| wwwwxxxxx欧美| 91尤物国产福利在线观看| 午夜精品三级视频福利| 久久精品国产68国产精品亚洲| 日批视频免费看| 欧美日韩一级二级| 国产精品论坛| 伊甸园精品99久久久久久| 国产成a人无v码亚洲福利| 国产熟妇一区二区三区四区| 蜜月aⅴ免费一区二区三区 | 亚洲女人初尝黑人巨大| www.久久99| 国产综合免费视频| 亚洲男同性恋视频| 国产主播福利在线| 国产99在线播放| 久久激情综合网| 99精品在线播放| 欧美国产精品人人做人人爱| 成人三级视频| 麻豆av免费观看|