日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JVM原理和性能调优

發布時間:2025/4/14 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM原理和性能调优 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM工作原理和特點主要是指操作系統裝入JVM是通過jdk中Java.exe來完成,通過下面4步來完成JVM環境.

1.創建JVM裝載環境和配置

2.裝載JVM.dll

3.初始化JVM.dll并掛界到JNIENV(JNI調用接口)實例

4.調用JNIEnv實例裝載并處理class類。

?

在我們運行和調試Java程序的時候,經常會提到一個JVM的概念.JVM是Java程序運行的環境,但是他同時一個操作系統的一個應用程序一個進程,因此他也有他自己的運行的生命周期,也有自己的代碼和數據空間.

首先來說一下JVM工作原理中的jdk這個東西,不管你是初學者還是高手,是j2ee程序員還是j2se程序員,jdk總是在幫我們做一些事情.我 們在了解Java之前首先大師們會給我們提供說jdk這個東西.它在Java整個體系中充當著什么角色呢?我很驚嘆sun大師們設計天才,能把一個如此完 整的體系結構化的如此完美.jdk在這個體系中充當一個生產加工中心,產生所有的數據輸出,是所有指令和戰略的執行中心.本身它提供了Java的完整方 案,可以開發目前Java能支持的所有應用和系統程序.這里說一個問題,大家會問,那為什么還有j2me,j2ee這些東西,這兩個東西目的很簡單,分別 用來簡化各自領域內的開發和構建過程.jdk除了JVM之外,還有一些核心的API,集成API,用戶工具,開發技術,開發工具和API等組成

好了,廢話說了那么多,來點于主題相關的東西吧.JVM在整個jdk中處于最底層,負責于操作系統的交互,用來屏蔽操作系統環境,提供一個完整的 Java運行環境,因此也就虛擬計算機. 操作系統裝入JVM是通過jdk中Java.exe來完成,通過下面4步來完成JVM環境.

1.創建JVM裝載環境和配置

2.裝載JVM.dll

3.初始化JVM.dll并掛界到JNIENV(JNI調用接口)實例

4.調用JNIEnv實例裝載并處理class類。

一.JVM裝入環境,JVM提供的方式是操作系統的動態連接文件.既然是文件那就一個裝入路徑的問題,Java 是怎么找這個路徑的呢?當你在調用Java test的時候,操作系統會在path下在你的Java.exe程序,Java.exe就通過下面一個過程來確定JVM的路徑和相關的參數配置了.下面基 于Windows的實現的分析.

首先查找jre路徑,Java是通過GetApplicationHome api來獲得當前的Java.exe絕對路徑,c:\j2sdk1.4.2_09\bin\Java.exe,那么它會截取到絕對路徑c: \j2sdk1.4.2_09\,判斷c:\j2sdk1.4.2_09\bin\Java.dll文件是否存在,如果存在就把c: \j2sdk1.4.2_09\作為jre路徑,如果不存在則判斷c:\j2sdk1.4.2_09\jre\bin\Java.dll是否存在,如果存 在這c:\j2sdk1.4.2_09\jre作為jre路徑.如果不存在調用GetPublicJREHome查HKEY_LOCAL_MACHINE \Software\JavaSoft\Java Runtime Environment\“當前JRE版本號”\JavaHome的路徑為jre路徑。

然后裝載JVM.cfg文件JRE路徑+\lib+\ARCH(CPU構架)+\JVM.cfgARCH(CPU構架)的判斷是通過 Java_md.c中GetArch函數判斷的,該函數中windows平臺只有兩種情況:WIN64的‘ia64’,其他情況都為‘i386’。以我的 為例:C:\j2sdk1.4.2_09\jre\lib\i386\JVM.cfg.主要的內容如下:

  • -client?KNOWN? ?
  • -server?KNOWN? ?
  • -hotspot?ALIASED_TO?-client? ?
  • -classic?WARN? ?
  • -native?ERROR? ?
  • -green?ERROR??
  • 在我們的jdk目錄中jre\bin\server和jre\bin\client都有JVM.dll文件存在,而Java正是通過JVM.cfg 配置文件來管理這些不同版本的JVM.dll的.通過文件我們可以定義目前jdk中支持那些JVM,前面部分(client)是JVM名稱,后面是參 數,KNOWN表示JVM存在,ALIASED_TO表示給別的JVM取一個別名,WARN表示不存在時找一個JVM替代,ERROR表示不存在拋出異 常.在運行Java XXX是,Java.exe會通過CheckJVMType來檢查當前的JVM類型,Java可以通過兩種參數的方式來指定具體的JVM類型,一種按照 JVM.cfg文件中的JVM名稱指定,第二種方法是直接指定,它們執行的方法分別是“Java -J”、“Java -XXaltJVM=”或“Java -J-XXaltJVM=”。如果是第一種參數傳遞方式,CheckJVMType函數會取參數‘-J’后面的JVM名稱,然后從已知的JVM配置參數中 查找如果找到同名的則去掉該JVM名稱前的‘-’直接返回該值;而第二種方法,會直接返回“-XXaltJVM=”或“-J-XXaltJVM=”后面的 JVM類型名稱;如果在運行Java時未指定上面兩種方法中的任一一種參數,CheckJVMType會取配置文件中第一個配置中的JVM名稱,去掉名稱 前面的‘-’返回該值。CheckJVMType函數的這個返回值會在下面的函數中匯同jre路徑組合成JVM.dll的絕對路徑。如果沒有指定這會使用 JVM.cfg中第一個定義的JVM.可以通過set _Java_LAUNCHER_DEBUG=1在控制臺上測試.

    最后獲得JVM.dll的路徑,JRE路徑+\bin+\JVM類型字符串+\JVM.dll就是JVM的文件路徑了,但是如果在調用Java程序時用-XXaltJVM=參數指定的路徑path,就直接用path+\JVM.dll文件做為JVM.dll的文件路徑.

    二:裝載JVM.dll

    通過第一步已經找到了JVM的路徑,Java通過LoadJavaVM來裝入JVM.dll文件.裝入工作很簡單就是調用Windows API函數:

    LoadLibrary裝載JVM.dll動態連接庫.然后把JVM.dll中的導出函數JNI_CreateJavaVM和 JNI_GetDefaultJavaVMInitArgs掛接到InvocationFunctions變量的CreateJavaVM和 GetDefaultJavaVMInitArgs函數指針變量上。JVM.dll的裝載工作宣告完成。

    三:初始化JVM,獲得本地調用接口,這樣就可以在Java中調用JVM的函數了.調用InvocationFunctions->CreateJavaVM也就是JVM中JNI_CreateJavaVM方法獲得JNIEnv結構的實例.

    四:運行Java程序.

    Java程序有兩種方式一種是jar包,一種是class. 運行jar,Java -jar XXX.jar運行的時候,Java.exe調用GetMainClassName函數,該函數先獲得JNIEnv實例然后調用Java類 Java.util.jar.JarFileJNIEnv中方法getManifest()并從返回的Manifest對象中取 getAttributes("Main-Class")的值即jar包中文件:META-INF/MANIFEST.MF指定的Main-Class的 主類名作為運行的主類。之后main函數會調用Java.c中LoadClass方法裝載該主類(使用JNIEnv實例的FindClass)。main 函數直接調用Java.c中LoadClass方法裝載該類。如果是執行class方法。main函數直接調用Java.c中LoadClass方法裝載 該類。

    然后main函數調用JNIEnv實例的GetStaticMethodID方法查找裝載的class主類中

    “public static void main(String[] args)”方法,并判斷該方法是否為public方法,然后調用JNIEnv實例的

    CallStaticVoidMethod方法調用該Java類的main方法。?

    ?

    ?

    以下轉自:http://blog.csdn.net/cnhzgb/article/details/7179419

    = GC 基礎 =====================


    JAVA堆的描述如下:


    內存由 Perm 和 Heap 組成. 其中
    Heap = {Old + NEW = { Eden , from, to } }
    JVM內存模型中分兩大塊,一塊是 NEW Generation, 另一塊是Old Generation. 在New Generation中,有一個叫Eden的空間,主要是用來存放新生的對象,還有兩個Survivor Spaces(from,to), 它們用來存放每次垃圾回收后存活下來的對象。在Old Generation中,主要存放應用程序中生命周期長的內存對象,還有個Permanent Generation,主要用來放JVM自己的反射對象,比如類對象和方法對象等。
    垃圾回收描述:
    在New Generation塊中,垃圾回收一般用Copying的算法,速度快。每次GC的時候,存活下來的對象首先由Eden拷貝到某個Survivor Space, 當Survivor Space空間滿了后, 剩下的live對象就被直接拷貝到Old Generation中去。因此,每次GC后,Eden內存塊會被清空。在Old Generation塊中,垃圾回收一般用mark-compact的算法,速度慢些,但減少內存要求.
    垃圾回收分多級,0級為全部(Full)的垃圾回收,會回收OLD段中的垃圾;1級或以上為部分垃圾回收,只會回收NEW中的垃圾,內存溢出通常發生于OLD段或Perm段垃圾回收后,仍然無內存空間容納新的Java對象的情況。


    當一個URL被訪問時,內存申請過程如下:
    A. JVM會試圖為相關Java對象在Eden中初始化一塊內存區域
    B. 當Eden空間足夠時,內存申請結束。否則到下一步
    C. JVM試圖釋放在Eden中所有不活躍的對象(這屬于1或更高級的垃圾回收), 釋放后若Eden空間仍然不足以放入新對象,則試圖將部分Eden中活躍對象放入Survivor區
    D. Survivor區被用來作為Eden及OLD的中間交換區域,當OLD區空間足夠時,Survivor區的對象會被移到Old區,否則會被保留在Survivor區
    E. 當OLD區空間不夠時,JVM會在OLD區進行完全的垃圾收集(0級)
    F. 完全垃圾收集后,若Survivor及OLD區仍然無法存放從Eden復制過來的部分對象,導致JVM無法在Eden區為新對象創建內存區域,則出現”out of memory錯誤”
    JVM調優建議:
    ms/mx:定義YOUNG+OLD段的總尺寸,ms為JVM啟動時YOUNG+OLD的內存大小;mx為最大可占用的YOUNG+OLD內存大小。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷。
    NewSize/MaxNewSize:定義YOUNG段的尺寸,NewSize為JVM啟動時YOUNG的內存大小;MaxNewSize為最大可占用的YOUNG內存大小。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷。
    PermSize/MaxPermSize:定義Perm段的尺寸,PermSize為JVM啟動時Perm的內存大小;MaxPermSize為最大可占用的Perm內存大小。在用戶生產環境上一般將這兩個值設為相同,以減少運行期間系統在內存申請上所花的開銷。
    SurvivorRatio:設置Survivor空間和Eden空間的比例
    內存溢出的可能性


    1. OLD段溢出
    這種內存溢出是最常見的情況之一,產生的原因可能是:
    1) 設置的內存參數過小(ms/mx, NewSize/MaxNewSize)
    2) 程序問題
    單個程序持續進行消耗內存的處理,如循環幾千次的字符串處理,對字符串處理應建議使用StringBuffer。此時不會報內存溢出錯,卻會使系統持續垃 圾收集,無法處理其它請求,相關問題程序可通過Thread Dump獲取(見系統問題診斷一章)單個程序所申請內存過大,有的程序會申請幾十乃至幾百兆內存,此時JVM也會因無法申請到資源而出現內存溢出,對此首 先要找到相關功能,然后交予程序員修改,要找到相關程序,必須在Apache日志中尋找。
    當Java對象使用完畢后,其所引用的對象卻沒有銷毀,使得JVM認為他還是活躍的對象而不進行回收,這樣累計占用了大量內存而無法釋放。由于目前市面上還沒有對系統影響小的內存分析工具,故此時只能和程序員一起定位。
    2. Perm段溢出
    通常由于Perm段裝載了大量的Servlet類而導致溢出,目前的解決辦法:
    1) 將PermSize擴大,一般256M能夠滿足要求
    2) 若別無選擇,則只能將servlet的路徑加到CLASSPATH中,但一般不建議這么處理


    3. C Heap溢出
    系統對C Heap沒有限制,故C Heap發生問題時,Java進程所占內存會持續增長,直到占用所有可用系統內存
    其他:
    JVM有2個GC線程。第一個線程負責回收Heap的Young區。第二個線程在Heap不足時,遍歷Heap,將Young 區升級為Older區。Older區的大小等于-Xmx減去-Xmn,不能將-Xms的值設的過大,因為第二個線程被迫運行會降低JVM的性能。
    為什么一些程序頻繁發生GC?有如下原因:
    l ? ? ? ? 程序內調用了System.gc()或Runtime.gc()。
    l ? ? ? ? 一些中間件軟件調用自己的GC方法,此時需要設置參數禁止這些GC。
    l ? ? ? ? Java的Heap太小,一般默認的Heap值都很小。
    l ? ? ? ? 頻繁實例化對象,Release對象。此時盡量保存并重用對象,例如使用StringBuffer()和String()。
    如果你發現每次GC后,Heap的剩余空間會是總空間的50%,這表示你的Heap處于健康狀態。許多Server端的Java程序每次GC后最好能有65%的剩余空間。
    經驗之談:
    1.Server端JVM最好將-Xms和-Xmx設為相同值。為了優化GC,最好讓-Xmn值約等于-Xmx的1/3[2]。
    2.一個GUI程序最好是每10到20秒間運行一次GC,每次在半秒之內完成[2]。
    注意:
    1.增加Heap的大小雖然會降低GC的頻率,但也增加了每次GC的時間。并且GC運行時,所有的用戶線程將暫停,也就是GC期間,Java應用程序不做任何工作。
    2.Heap大小并不決定進程的內存使用量。進程的內存使用量要大于-Xmx定義的值,因為Java為其他任務分配內存,例如每個線程的Stack等。
    2.Stack的設定
    每個線程都有他自己的Stack。

    ?

    -Xss 每個線程的Stack大小

    ?

    Stack的大小限制著線程的數量。如果Stack過大就好導致內存溢漏。-Xss參數決定Stack大小,例如-Xss1024K。如果Stack太小,也會導致Stack溢漏。
    3.硬件環境
    硬件環境也影響GC的效率,例如機器的種類,內存,swap空間,和CPU的數量。
    如果你的程序需要頻繁創建很多transient對象,會導致JVM頻繁GC。這種情況你可以增加機器的內存,來減少Swap空間的使用[2]。
    4.4種GC
    第一種為單線程GC,也是默認的GC。,該GC適用于單CPU機器。
    第二種為Throughput GC,是多線程的GC,適用于多CPU,使用大量線程的程序。第二種GC與第一種GC相似,不同在于GC在收集Young區是多線程的,但在Old區和第一種一樣,仍然采用單線程。-XX:+UseParallelGC參數啟動該GC。
    第三種為Concurrent Low Pause GC,類似于第一種,適用于多CPU,并要求縮短因GC造成程序停滯的時間。這種GC可以在Old區的回收同時,運行應用程序。-XX:+UseConcMarkSweepGC參數啟動該GC。
    第四種為Incremental Low Pause GC,適用于要求縮短因GC造成程序停滯的時間。這種GC可以在Young區回收的同時,回收一部分Old區對象。-Xincgc參數啟動該GC。


    按照基本回收策略分

    引用計數(Reference Counting):

    比較古老的回收算法。原理是此對象有一個引用,即增加一個計數,刪除一個引用則減少一個計數。垃圾回收時,只用收集計數為0的對象。此算法最致命的是無法處理循環引用的問題。

    ?

    標記-清除(Mark-Sweep):

    ?

    ?

    ?

    此算法執行分兩階段。第一階段從引用根節點開始標記所有被引用的對象,第二階段遍歷整個堆,把未標記的對象清除。此算法需要暫停整個應用,同時,會產生內存碎片。

    ?

    復制(Copying):

    ?

    ?

    ?

    此算法把內存空間劃為兩個相等的區域,每次只使用其中一個區域。垃圾回收時,遍歷當前使用區域,把正在使用中的對象復制到另外一個區域中。算法每次只處理 正在使用中的對象,因此復制成本比較小,同時復制過去以后還能進行相應的內存整理,不會出現“碎片”問題。當然,此算法的缺點也是很明顯的,就是需要兩倍 內存空間。

    ?

    標記-整理(Mark-Compact):

    ?

    ?

    ?

    此算法結合了“標記-清除”和“復制”兩個算法的優點。也是分兩階段,第一階段從根節點開始標記所有被引用對象,第二階段遍歷整個堆,把清除未標記對象并 且把存活對象“壓縮”到堆的其中一塊,按順序排放。此算法避免了“標記-清除”的碎片問題,同時也避免了“復制”算法的空間問題。


    ?

    按分區對待的方式分

    增量收集(Incremental Collecting):實時垃圾回收算法,即:在應用進行的同時進行垃圾回收。不知道什么原因JDK5.0中的收集器沒有使用這種算法的。

    ?

    分代收集(Generational Collecting):基于對對象生命周期分析后得出的垃圾回收算法。把對象分為年青代、年老代、持久代,對不同生命周期的對象使用不同的算法(上述方式中的一個)進行回收。現在的垃圾回收器(從J2SE1.2開始)都是使用此算法的。

    ?

    按系統線程分

    串行收集:串行收集使用單線程處理所有垃圾回收工作,因為無需多線程交互,實現容易,而且效率比較高。但是,其局限性也比較明顯,即無法使用多處理器的優勢,所以此收集適合單處理器機器。當然,此收集器也可以用在小數據量(100M左右)情況下的多處理器機器上。

    ?

    并行收集:并行收集使用多線程處理垃圾回收工作,因而速度快,效率高。而且理論上CPU數目越多,越能體現出并行收集器的優勢。(串型收集的并發版本,需要暫停jvm) 并行paralise指的是多個任務在多個cpu中一起并行執行,最后將結果合并。效率是N倍。

    ?

    并發收集:相對于串行收集和并行收集而言,前面 兩個在進行垃圾回收工作時,需要暫停整個運行環境,而只有垃圾回收程序在運行,因此,系統在垃圾回收時會有明顯的暫停,而且暫停時間會因為堆越大而越長。 (和并行收集不同,并發只有在開頭和結尾會暫停jvm)并發concurrent指的是多個任務在一個cpu偽同步執行,但其實是串行調度的,效率并非直 接是N倍。

    ?

    分代垃圾回收

    ??? 分代的垃圾回收策略,是基于這樣一個事實:不同的對象的生命周期是不一樣的。因此,不同生命周期的對象可以采取不同的收集方式,以便提高回收效率。

    ?

    ?? ?在Java程序運行的過程中,會產生大量的對象,其中有些對象是與業務信息相關,比如Http請求中的Session對象、線程、Socket連接,這 類對象跟業務直接掛鉤,因此生命周期比較長。但是還有一些對象,主要是程序運行過程中生成的臨時變量,這些對象生命周期會比較短,比如:String對 象,由于其不變類的特性,系統會產生大量的這些對象,有些對象甚至只用一次即可回收。

    ?

    ?? ?試想,在不進行對象存活時間區分的情況下,每次垃圾回收都是對整個堆空間進行回收,花費時間相對會長,同時,因為每次回收都需要遍歷所有存活對象,但實 際上,對于生命周期長的對象而言,這種遍歷是沒有效果的,因為可能進行了很多次遍歷,但是他們依舊存在。因此,分代垃圾回收采用分治的思想,進行代的劃 分,把不同生命周期的對象放在不同代上,不同代上采用最適合它的垃圾回收方式進行回收。

    ?

    ?

    ?

    ?

    如圖所示:

    ?

    ?? ?虛擬機中的共劃分為三個代:年輕代(Young Generation)、年老點(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java類的類信息,與垃圾收集要收集的Java對象關系不大。年輕代和年老代的劃分是對垃圾收集影響比較大的。

    ?

    ?

    年輕代:

    ?? ?所有新生成的對象首先都是放在年輕代的。年輕代的目標就是盡可能快速的收集掉那些生命周期短的對象。年輕代分三個區。一個Eden區,兩個 Survivor區(一般而言)。大部分對象在Eden區中生成。當Eden區滿時,還存活的對象將被復制到Survivor區(兩個中的一個),當這個 Survivor區滿時,此區的存活對象將被復制到另外一個Survivor區,當這個Survivor區也滿了的時候,從第一個Survivor區復制 過來的并且此時還存活的對象,將被復制“年老區(Tenured)”。需要注意,Survivor的兩個區是對稱的,沒先后關系,所以同一個區中可能同時 存在從Eden復制過來 對象,和從前一個Survivor復制過來的對象,而復制到年老區的只有從第一個Survivor去過來的對象。而且,Survivor區總有一個是空 的。同時,根據程序需要,Survivor區是可以配置為多個的(多于兩個),這樣可以增加對象在年輕代中的存在時間,減少被放到年老代的可能。

    ?

    年老代:

    ?? ?在年輕代中經歷了N次垃圾回收后仍然存活的對象,就會被放到年老代中。因此,可以認為年老代中存放的都是一些生命周期較長的對象。

    ?

    持久代:

    ?? ?用于存放靜態文件,如今Java類、方法等。持久代對垃圾回收沒有顯著影響,但是有些應用可能動態生成或者調用一些class,例如Hibernate 等,在這種時候需要設置一個比較大的持久代空間來存放這些運行過程中新增的類。持久代大小通過-XX:MaxPermSize=<N>進行設 置。

    ?

    什么情況下觸發垃圾回收?

    由于對象進行了分代處理,因此垃圾回收區域、時間也不一樣。GC有兩種類型:Scavenge GCFull GC

    ?

    Scavenge GC

    ?? ?一般情況下,當新對象生成,并且在Eden申請空間失敗時,就會觸發Scavenge GC,對Eden區域進行GC,清除非存活對象,并且把尚且存活的對象移動到Survivor區。然后整理Survivor的兩個區。這種方式的GC是對 年輕代的Eden區進行,不會影響到年老代。因為大部分對象都是從Eden區開始的,同時Eden區不會分配的很大,所以Eden區的GC會頻繁進行。因 而,一般在這里需要使用速度快、效率高的算法,使Eden去能盡快空閑出來。

    ?

    Full GC

    ?? ?對整個堆進行整理,包括Young、Tenured和Perm。Full GC因為需要對整個對進行回收,所以比Scavenge GC要慢,因此應該盡可能減少Full GC的次數。在對JVM調優的過程中,很大一部分工作就是對于FullGC的調節。有如下原因可能導致Full GC:

    · 年老代(Tenured)被寫滿

    · 持久代(Perm)被寫滿?

    · System.gc()被顯示調用?

    ·上一次GC之后Heap的各域分配策略動態變化

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    = G1 ===================================

    ?

    ?

    傳說中的G1,傳說中的low-pause垃圾收集。Java SE 6的update14版本中已經包含測試版,可以在啟動時加JVM參數來啟用

    -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC


    http://www.blogjava.net/BlueDavy/archive/2009/03/11/259230.html

    本文摘自《構建高性能的大型分布式Java應用》一 書,Garbage First簡稱G1,它的目標是要做到盡量減少GC所導致的應用暫停的時間,讓應用達到準實時的效果,同時保持JVM堆空間的利用率,將作為CMS的替代 者在JDK 7中閃亮登場,其最大的特色在于允許指定在某個時間段內GC所導致的應用暫停的時間最大為多少,例如在100秒內最多允許GC導致的應用暫停時間為1秒, 這個特性對于準實時響應的系統而言非常的吸引人,這樣就再也不用擔心系統突然會暫停個兩三秒了。

    ?

    G1要做到這樣的效果,也是有前提的,一方面是硬件環境的要求,必須是多核的CPU以及較大的內存(從規范來看,512M以上就滿足條件了),另外一方面是需要接受吞吐量的稍微降低,對于實時性要求高的系統而言,這點應該是可以接受的。

    為了能夠達到這樣的效果,G1在原有的各種GC策略上進行了吸收和改進,在G1中可以看到增量收集器和CMS的影子,但它不僅僅是吸收原有GC策略的優 點,并在此基礎上做出了很多的改進,簡單來說,G1吸收了增量GC以及CMS的精髓,將整個jvm Heap劃分為多個固定大小的region,掃描時采用Snapshot-at-the-beginning的并發marking算法(具體在后面內容詳 細解釋)對整個heap中的region進行mark,回收時根據region中活躍對象的bytes進行排序,首先回收活躍對象bytes小以及回收耗 時短(預估出來的時間)的region,回收的方法為將此region中的活躍對象復制到另外的region中,根據指定的GC所能占用的時間來估算能回 收多少region,這點和以前版本的Full GC時得處理整個heap非常不同,這樣就做到了能夠盡量短時間的暫停應用,又能回收內存,由于這種策略在回收時首先回收的是垃圾對象所占空間最多的 region,因此稱為Garbage First。

    看完上面對于G1策略的簡短描述,并不能清楚的掌握G1,在繼續詳細看G1的步驟之前,必須先明白G1對于JVM Heap的改造,這些對于習慣了劃分為new generation、old generation的大家來說都有不少的新意。

    G1將Heap劃分為多個固定大小的region,這也是G1能夠實現控制GC導致的應用暫停時間的前提,region之間的對象引用通過 remembered set來維護,每個region都有一個remembered set,remembered set中包含了引用當前region中對象的region的對象的pointer,由于同時應用也會造成這些region中對象的引用關系不斷的發生改 變,G1采用了Card Table來用于應用通知region修改remembered sets,Card Table由多個512字節的Card構成,這些Card在Card Table中以1個字節來標識,每個應用的線程都有一個關聯的remembered set log,用于緩存和順序化線程運行時造成的對于card的修改,另外,還有一個全局的filled RS buffers,當應用線程執行時修改了card后,如果造成的改變僅為同一region中的對象之間的關聯,則不記錄remembered set log,如造成的改變為跨region中的對象的關聯,則記錄到線程的remembered set log,如線程的remembered set log滿了,則放入全局的filled RS buffers中,線程自身則重新創建一個新的remembered set log,remembered set本身也是一個由一堆cards構成的哈希表。

    盡管G1將Heap劃分為了多個region,但其默認采用的仍然是分代的方式,只是僅簡單的劃分為了年輕代(young)和非年輕代,這也是由于G1仍 然堅信大多數新創建的對象都是不需要長的生命周期的,對于應用新創建的對象,G1將其放入標識為young的region中,對于這些region,并不 記錄remembered set logs,掃描時只需掃描活躍的對象,G1在分代的方式上還可更細的劃分為:fully young或partially young,fully young方式暫停的時候僅處理young regions,partially同樣處理所有的young regions,但它還會根據允許的GC的暫停時間來決定是否要加入其他的非young regions,G1是運行到fully-young方式還是partially young方式,外部是不能決定的,在啟動時,G1采用的為fully-young方式,當G1完成一次Concurrent Marking后,則切換為partially young方式,隨后G1跟蹤每次回收的效率,如果回收fully-young中的regions已經可以滿足內存需要的話,那么就切換回fully young方式,但當heap size的大小接近滿的情況下,G1會切換到partially young方式,以保證能提供足夠的內存空間給應用使用。

    除了分代方式的劃分外,G1還支持另外一種pure G1的方式,也就是不進行代的劃分,pure方式和分代方式的具體不同在下面的具體執行步驟中進行描述。

    掌握了這些概念后,繼續來看G1的具體執行步驟:

    1.?????????Initial Marking

    G1對于每個region都保存了兩個標識用的bitmap,一個為previous marking bitmap,一個為next marking bitmap,bitmap中包含了一個bit的地址信息來指向對象的起始點。

    開始Initial Marking之前,首先并發的清空next marking bitmap,然后停止所有應用線程,并掃描標識出每個region中root可直接訪問到的對象,將region中top的值放入next top at mark start(TAMS)中,之后恢復所有應用線程。

    觸發這個步驟執行的條件為:

    l??G1定義了一個JVM Heap大小的百分比的閥值,稱為h,另外還有一個H,H的值為(1-h)*Heap Size,目前這個h的值是固定的,后續G1也許會將其改為動態的,根據jvm的運行情況來動態的調整,在分代方式下,G1還定義了一個u以及soft limit,soft limit的值為H-u*Heap Size,當Heap中使用的內存超過了soft limit值時,就會在一次clean up執行完畢后在應用允許的GC暫停時間范圍內盡快的執行此步驟;

    l??在pure方式下,G1將marking與clean up組成一個環,以便clean up能充分的使用marking的信息,當clean up開始回收時,首先回收能夠帶來最多內存空間的regions,當經過多次的clean up,回收到沒多少空間的regions時,G1重新初始化一個新的marking與clean up構成的環。

    2.?????????Concurrent Marking

    按照之前Initial Marking掃描到的對象進行遍歷,以識別這些對象的下層對象的活躍狀態,對于在此期間應用線程并發修改的對象的以來關系則記錄到remembered set logs中,新創建的對象則放入比top值更高的地址區間中,這些新創建的對象默認狀態即為活躍的,同時修改top值。

    3.?????????Final Marking Pause

    當應用線程的remembered set logs未滿時,是不會放入filled RS buffers中的,在這樣的情況下,這些remebered set logs中記錄的card的修改就會被更新了,因此需要這一步,這一步要做的就是把應用線程中存在的remembered set logs的內容進行處理,并相應的修改remembered sets,這一步需要暫停應用,并行的運行。

    4.?????????Live Data Counting and Cleanup

    值得注意的是,在G1中,并不是說Final Marking Pause執行完了,就肯定執行Cleanup這步的,由于這步需要暫停應用,G1為了能夠達到準實時的要求,需要根據用戶指定的最大的GC造成的暫停時 間來合理的規劃什么時候執行Cleanup,另外還有幾種情況也是會觸發這個步驟的執行的:

    l??G1采用的是復制方法來進行收集,必須保證每次的”to space”的空間都是夠的,因此G1采取的策略是當已經使用的內存空間達到了H時,就執行Cleanup這個步驟;

    l??對于full-young和partially-young的分代模式的G1而言,則還有情況會觸發Cleanup的執行,full-young模 式下,G1根據應用可接受的暫停時間、回收young regions需要消耗的時間來估算出一個yound regions的數量值,當JVM中分配對象的young regions的數量達到此值時,Cleanup就會執行;partially-young模式下,則會盡量頻繁的在應用可接受的暫停時間范圍內執行 Cleanup,并最大限度的去執行non-young regions的Cleanup。

    這一步中GC線程并行的掃描所有region,計算每個region中低于next TAMS值中marked data的大小,然后根據應用所期望的GC的短延時以及G1對于region回收所需的耗時的預估,排序region,將其中活躍的對象復制到其他 region中。

    ?

    G1為了能夠盡量的做到準實時的響應,例如估算暫停時間的算法、對于經常被引用的對象的特殊 處理等,G1為了能夠讓GC既能夠充分的回收內存,又能夠盡量少的導致應用的暫停,可謂費盡心思,從G1的論文中的性能評測來看效果也是不錯的,不過如果 G1能允許開發人員在編寫代碼時指定哪些對象是不用mark的就更完美了,這對于有巨大緩存的應用而言,會有很大的幫助,G1將隨JDK 6 Update 14?beta發布。



    = CMS ==================================


    http://www.iteye.com/topic/1119491

    ?

    1.總體介紹:

    ?

    CMS(Concurrent Mark-Sweep)是以犧牲吞吐量為代價來獲得最短回收停頓時間的垃圾回收器。并發意味著除了開頭和結束階段,需要暫停JVM,其它時間gc和應用一 起執行。對于要求服務器響應速度的應用上,這種垃圾回收器非常適合。在啟動JVM參數加上-XX:+UseConcMarkSweepGC?,這個參數表示對于老年代的回收采用CMS。CMS采用的基礎算法是:標記—清除。默認會開啟 -XX :+UseParNewGC,在年輕代使用并行復制收集。

    2.CMS過程:

    • 初始標記(STW initial mark)
    • 并發標記(Concurrent marking)
    • 并發預清理(Concurrent precleaning)
    • 重新標記(STW remark)
    • 并發清理(Concurrent sweeping)
    • 并發重置(Concurrent reset)

    初始標記?:在這個階段,需要虛擬機停頓正在執行的任務,官方的叫法STW(Stop The Word)。這個過程從垃圾回收的"根對象"開始,只掃描到能夠和"根對象"直接關聯的對象,并作標記。所以這個過程雖然暫停了整個JVM,但是很快就完成了。

    并發標記?:這個階段緊隨初始標記階段,在初始標記的基礎上繼續向下追溯標記。并發標記階段,應用程序的線程和并發標記的線程并發執行,所以用戶不會感受到停頓。

    并發預清理?:并發預清理階段仍然是并發的。在這個階段,虛擬機查找在執行并發標記階段新進入老年代的對象(可能會有一些對象從新生代晉升到老年代, 或者有一些對象被分配到老年代)。通過重新掃描,減少下一個階段"重新標記"的工作,因為下一個階段會Stop The World。

    重新標記?:這個階段會暫停虛擬機,收集器線程掃描在CMS堆中剩余的對象。掃描從"跟對象"開始向下追溯,并處理對象關聯。

    并發清理?:清理垃圾對象,這個階段收集器線程和應用程序線程并發執行。

    并發重置?:這個階段,重置CMS收集器的數據結構,等待下一次垃圾回收。

    ?

    CSM執行過程:?

    3.CMS缺點

    • CMS回收器采用的基礎算法是Mark-Sweep。所有CMS不會整理、壓縮堆空間。這樣就會有一個問題:經過CMS收集的堆會產生空間碎片。 CMS不對堆空間整理壓縮節約了垃圾回收的停頓時間,但也帶來的堆空間的浪費。為了解決堆空間浪費問題,CMS回收器不再采用簡單的指針指向一塊可用堆空 間來為下次對象分配使用。而是把一些未分配的空間匯總成一個列表,當JVM分配對象空間的時候,會搜索這個列表找到足夠大的空間來hold住這個對象。
    • 需要更多的CPU資源。從上面的圖可以看到,為了讓應用程序不停頓,CMS線程和應用程序線程并發執行,這樣就需要有更多的CPU,單純靠線程切 換是不靠譜的。并且,重新標記階段,為空保證STW快速完成,也要用到更多的甚至所有的CPU資源。當然,多核多CPU也是未來的趨勢!
    • CMS的另一個缺點是它需要更大的堆空間。因為CMS標記階段應用程序的線程還是在執行的,那么就會有堆空間繼續分配的情況,為了保證在CMS回 收完堆之前還有空間分配給正在運行的應用程序,必須預留一部分空間。也就是說,CMS不會在老年代滿的時候才開始收集。相反,它會嘗試更早的開始收集,已 避免上面提到的情況:在回收完成之前,堆沒有足夠空間分配!默認當老年代使用68%的時候,CMS就開始行動了。 – XX:CMSInitiatingOccupancyFraction =n 來設置這個閥值。

    總得來說,CMS回收器減少了回收的停頓時間,但是降低了堆空間的利用率。

    4.啥時候用CMS

    如果你的應用程序對停頓比較敏感,并且在應用程序運行的時候可以提供更大的內存和更多的CPU(也就是硬件牛逼),那么使用CMS來收集會給你帶來好處。還有,如果在JVM中,有相對較多存活時間較長的對象(老年代比較大)會更適合使用CMS。




    = 調試工具 ==================================


    jmap


    jmap -heap pid ?(不能觀察G1模式)


    using parallel threads in the new generation.
    using thread-local object allocation.
    Concurrent Mark-Sweep GC

    Heap Configuration:
    ? ?MinHeapFreeRatio = 40
    ? ?MaxHeapFreeRatio = 70
    ? ?MaxHeapSize ? ? ?= 2147483648 (2048.0MB)
    ? ?NewSize ? ? ? ? ?= 268435456 (256.0MB)
    ? ?MaxNewSize ? ? ? = 268435456 (256.0MB)
    ? ?OldSize ? ? ? ? ?= 805306368 (768.0MB)
    ? ?NewRatio ? ? ? ? = 7
    ? ?SurvivorRatio ? ?= 8
    ? ?PermSize ? ? ? ? = 134217728 (128.0MB)
    ? ?MaxPermSize ? ? ?= 134217728 (128.0MB)

    Heap Usage:
    New Generation (Eden + 1 Survivor Space):
    ? ?capacity = 241631232 (230.4375MB)
    ? ?used ? ? = 145793088 (139.03912353515625MB)
    ? ?free ? ? = 95838144 (91.39837646484375MB)
    ? ?60.33702133340114% used
    Eden Space:
    ? ?capacity = 214827008 (204.875MB)
    ? ?used ? ? = 132689456 (126.54252624511719MB)
    ? ?free ? ? = 82137552 (78.33247375488281MB)
    ? ?61.7657236095752% used
    From Space:
    ? ?capacity = 26804224 (25.5625MB)
    ? ?used ? ? = 13103632 (12.496597290039062MB)
    ? ?free ? ? = 13700592 (13.065902709960938MB)
    ? ?48.886444166411984% used
    To Space:
    ? ?capacity = 26804224 (25.5625MB)
    ? ?used ? ? = 0 (0.0MB)
    ? ?free ? ? = 26804224 (25.5625MB)
    ? ?0.0% used
    concurrent mark-sweep generation: (old區)
    ? ?capacity = 1879048192 (1792.0MB)
    ? ?used ? ? = 1360638440 (1297.6059341430664MB)
    ? ?free ? ? = 518409752 (494.3940658569336MB)
    ? ?72.41104543209076% used
    Perm Generation:
    ? ?capacity = 134217728 (128.0MB)
    ? ?used ? ? = 65435064 (62.40373992919922MB)
    ? ?free ? ? = 68782664 (65.59626007080078MB)
    ? ?48.75292181968689% used



    jmap -histo:live pid


    num ? ? #instances ? ? ? ? #bytes ?class name
    ----------------------------------------------
    ? ?1: ? ? ? 3148147 ? ? ?209172848 ?[B
    ? ?2: ? ? ? 2584345 ? ? ?144723320 ?java.lang.ref.SoftReference
    ? ?3: ? ? ? 2578827 ? ? ?123783696 ?sun.misc.CacheEntry
    ? ?4: ? ? ? ?781560 ? ? ?112544640 ?com.sun.net.ssl.internal.ssl.SSLSessionImpl
    ? ?5: ? ? ? 1385200 ? ? ? 89970592 ?[C
    ? ?6: ? ? ? ?783287 ? ? ? 87807200 ?[Ljava.util.Hashtable$Entry;
    ? ?7: ? ? ? 1421399 ? ? ? 56855960 ?java.lang.String
    ? ?8: ? ? ? ? ? ?12 ? ? ? 56828880 ?[Lsun.misc.CacheEntry;
    ? ?9: ? ? ? 2343358 ? ? ? 56240592 ?com.sun.net.ssl.internal.ssl.SessionId
    ? 10: ? ? ? ?783185 ? ? ? 50123840 ?java.util.Hashtable
    ? 11: ? ? ? ?783094 ? ? ? 50118016 ?java.lang.ref.Finalizer
    ? 12: ? ? ? ?287243 ? ? ? 36086720 ?[Ljava.lang.Object;
    ? 13: ? ? ? ?263376 ? ? ? 33712128 ?org.apache.commons.pool.impl.GenericObjectPool



    jstat


    jstat -gccause 31169 60000 1000


    (sweep 1,2) (Eden) (Old) (Perm) (Young GC, GCTime)(Full GC, GCTime)

    ? S0 ? ? ? ? S1 ? ? E ? ? ? ? O ? ? ? ? P ? ? YGC ? ? YGCT ? ? FGC ? ?FGCT ? ? ?GCT ? ? ? ? ? ? LGCC ? ? ? ? ? ? ? ? GCC ? ? ? ? ? ? ? ??
    ?48.80 ? 0.00 ?68.94 ?69.55 ?48.86 ?30202 ?725.319 51835 5083.298 5808.616 unknown GCCause ? ? ?No GC ? ? ? ? ? ? ??
    ?47.98 ? 0.00 ?37.47 ?69.61 ?48.86 ?30206 ?725.385 51835 5083.298 5808.682 unknown GCCause ? ? ?No GC ? ? ? ? ? ? ??
    ?50.73 ? 0.00 ?51.72 ?69.65 ?48.86 ?30210 ?725.459 51835 5083.298 5808.757 unknown GCCause ? ? ?No GC ? ? ? ? ? ? ??
    ? 0.00 ?50.02 ?82.67 ?69.60 ?48.84 ?30213 ?725.508 51836 5091.572 5817.081 unknown GCCause ? ? ?No GC ? ? ? ? ? ? ??


    jstat -gcutil $pid


    ? S0 ? ? ? ? S1 ? ? E ? ? ? ? O ? ? ? P ? ? ? YGC ? ? YGCT ? ?FGC ? ?FGCT ? ? GCT ??
    ?74.79 ? 0.00 ?95.15 ? 0.86 ?37.35 ? ? ?2 ? ? ? ?0.112 ? ? 0 ? ? ? ?0.000 ? ? ?0.112


    O = old occupied

    YGC = young gc time ( new part )

    YGCT = young gc total cost time

    FGC = full gc time ( old part )

    FGCT = full gc total cost time

    GCT = all gc cost time


    ?

    jvisualvm

    window下啟動遠程監控,并在被監控服務端,啟動jstatd服務。


    創建安全策略文件,并命名為jstatd.all.policy
    grant codebase "file:${java.home}/../lib/tools.jar" {
    ??? permission java.security.AllPermission;
    };

    jstatd -J-Djava.security.policy=jstatd.all.policy -p 8080 &


    ======================== Tunning =================
    典型配置: -server -Xmx2g -Xms2g -Xmn512m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true
    http://java.sun.com/performance/reference/whitepapers/tuning.html

    http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

    +AggressiveOpts 激進優化,默認開啟,使用java新特性優化
    1. 默認使用串行收集器, 單個cpu時適用
    2. 吞吐收集器(throughput collector):命令行參數:-XX:+UseParallelGC。在新生代使用并行清除收集策略,在舊生代和默認收集器相同。 適用:a、擁有2個以上cpu, b、臨時對象較多的程序 -XX:ParallelGCThreads 并行收集線程數量,最好和cpu數量相當

    3. 并發收集器(concurrent low pause collector):命令行參數:-XX:+UseConcMarkSweepGC。在舊生代使用并發收集策略,大部分收集工作都是和應用并發進行的, 在進行收集的時候,應用的暫停時間很短。默認配套打開 -XX:+UseParNewGC,會在新生代使用并行復制收集。 適用:a、擁有多個cpu, b、老對象較多的程序
    如果使用了UseParNewGC,那么同時使用CMSParallelRemarkEnabled參數可以降低標識暫停
    -XX:+UseCMSCompactAtFullCollection:打開對年老代的壓縮。可能會影響性能,但是可以消除碎片
    -XX:+UseFastAccessorMethods 原始類型的快速優化 -XX:SurvivorRatio 新生區中,eden&survivor的比例,設置為8 -XX:TargetSurvivorRatio 生存區需要做垃圾回收的比例值,默認為50%,設置高些可以更好的利用該區


    各個垃圾收集器之間的區別: http://www.javaperformancetuning.com/news/qotm026.shtml


    新生代,單獨區域單獨收集,不會影響老生代,因為區域小,且允許漏收集,采用復制清除的方法,更快。

    The?(original) copying collector?(Enabled by default). When this collector kicks in, all application threads are stopped, and the copying collection proceeds using one thread (which means only one CPU even if on a multi-CPU machine). This is known as a stop-the-world collection, because basically the JVM pauses everything else until the collection is completed.

    The?parallel copying collector?(Enabled using -XX:+UseParNewGC). Like the original copying collector, this is a stop-the-world collector. However this collector parallelizes the copying collection over multiple threads, which is more efficient than the original single-thread copying collector for multi-CPU machines (though not for single-CPU machines). This algorithm potentially speeds up young generation collection by a factor equal to the number of CPUs available, when compared to the original singly-threaded copying collector.

    The?parallel scavenge collector?(Enabled using -XX:UseParallelGC). This is like the previous parallel copying collector, but the algorithm is tuned for gigabyte heaps (over 10GB) on multi-CPU machines. This collection algorithm is designed to maximize throughput while minimizing pauses. It has an optional adaptive tuning policy which will automatically resize heap spaces. If you use this collector, you can only use the the original mark-sweep collector in the old generation (i.e. the newer old generation concurrent collector cannot work with this young generation collector).

    ?

    UserParallelGC使用了更高效的算法,用于處理大規模內存>10G場景,提供了大吞吐量功能。但是,同時在老生代,只能使用串行的標記清除方法。


    老生代,必須做fullgc,必須從root開始全面標識收集。

    ?

    • The?(original) mark-sweep collector?(Enabled by default). This uses a stop-the-world mark-and-sweep collection algorithm. The collector is single-threaded, the entire JVM is paused and the collector uses only one CPU until completed.
    • The?concurrent collector?(Enabled using -XX:+UseConcMarkSweepGC). This collector tries to allow application processing to continue as much as possible during the collection. Splitting the collection into six phases described shortly, four are concurrent while two are stop-the-world:
      1. the initial-mark phase (stop-the-world, snapshot the old generation so that we can run most of the rest of the collection concurrent to the application threads);
      2. the mark phase (concurrent, mark the live objects traversing the object graph from the roots);
      3. the pre-cleaning phase (concurrent);
      4. the re-mark phase (stop-the-world, another snapshot to capture any changes to live objects since the collection started);
      5. the sweep phase (concurrent, recycles memory by clearing unreferenced objects);
      6. the reset phase (concurrent).
      If "the rate of creation" of objects is too high, and the concurrent collector is not able to keep up with the concurrent collection, it falls back to the traditional mark-sweep collector.
    • The?incremental collector?(Enabled using -Xincgc). The incremental collector uses a "train" algorithm to collect small portions of the old generation at a time. This collector has higher overheads than the mark-sweep collector, but because small numbers of objects are collected each time, the (stop-the-world) garbage collection pause is minimized at the cost of total garbage collection taking longer. The "train" algorithm does not guarantee a maximum pause time, but pause times are typically less than ten milliseconds.

    轉載于:https://www.cnblogs.com/taz372436/p/5240495.html

    總結

    以上是生活随笔為你收集整理的JVM原理和性能调优的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    99久e精品热线免费 99国产精品久久久久久久久久 | 91久久精品一区二区三区 | 日韩精品高清不卡 | 特级西西444www大胆高清无视频 | a亚洲视频 | 一区三区视频在线观看 | 日韩av视屏在线观看 | 日韩精品一区二区不卡 | 伊人久久国产 | 天天操天天射天天 | 91成品视频| 激情在线免费视频 | 999日韩 | 国产区欧美| 中文在线中文资源 | 国产96精品 | 深爱激情av | 国产亚洲精品久久网站 | 国产精品18久久久久久不卡孕妇 | 日日日网 | 视频一区在线播放 | 成年人视频在线观看免费 | 国内精品久久影院 | 久久精品人人做人人综合老师 | 深夜免费小视频 | 视频成人免费 | 中文字幕在线观看视频一区 | 亚洲综合色丁香婷婷六月图片 | 天天干天天干 | 国产精品免费一区二区 | 97国产视频 | 欧美精品久久人人躁人人爽 | 国产va在线 | 在线不卡a| 精品免费一区二区三区 | 91精品国产欧美一区二区成人 | 中文字幕影片免费在线观看 | 成人一区在线观看 | 国产涩涩网站 | 久久精品99国产精品酒店日本 | 国产精品一区二区免费看 | 国产三级香港三韩国三级 | 久久精品在线 | 一级欧美黄 | 精品女同一区二区三区在线观看 | 国产99久久久精品 | 国产香蕉久久精品综合网 | 最新av在线播放 | 手机在线免费av | 中文字幕精品一区二区精品 | 久久人人爽人人爽人人 | 国产vs久久| 四虎影视国产精品免费久久 | av资源在线观看 | 久久影院亚洲 | 九色琪琪久久综合网天天 | www成人av| 国产成人免费观看 | 人人爽人人干 | 六月色婷婷| 国产精品wwwwww | 欧美日韩综合在线 | 四虎影视国产精品免费久久 | 久久精品视频99 | 久久久99精品免费观看乱色 | 夜又临在线观看 | 探花视频在线版播放免费观看 | av短片在线观看 | 精品美女久久久久久免费 | 成人精品国产免费网站 | 成人av网站在线 | 五月天激情在线 | 日本韩国精品在线 | 欧美精品xx| 国产福利一区二区三区视频 | 久久久久久久久久影视 | 日韩乱色精品一区二区 | 久草影视在线 | 中文字幕资源站 | 麻豆影视在线免费观看 | 青草视频免费观看 | 国产一线在线 | 国产第页 | 欧美a级在线免费观看 | 2023天天干 | 亚洲第一伊人 | 免费av网址在线观看 | 国产一区二区久久精品 | 日韩免费高清 | 免费在线观看av不卡 | 91免费日韩| 免费欧美精品 | 欧美精品一区二区三区一线天视频 | 麻豆传媒视频在线免费观看 | 四虎成人在线 | 中文字幕免 | 国产青草视频在线观看 | 国产69精品久久99不卡的观看体验 | 91在线成人 | 久草在线中文888 | 欧美做受69 | 黄色资源在线观看 | 91私密保健 | 在线日本v二区不卡 | 日本女人b | 中文字幕在线视频国产 | 欧美日本不卡视频 | 人人看人人 | 久久久久这里只有精品 | 亚洲精品国精品久久99热一 | 一级一片免费观看 | 欧美aaa一级 | 免费看污污视频的网站 | 天天躁天天狠天天透 | 成年人国产精品 | 99精品国自产在线 | 日韩精品一区二区在线观看视频 | 狠狠狠色丁香综合久久天下网 | 国产美女网站在线观看 | 一级做a视频 | 亚洲资源视频 | 久久精品视频日本 | 久久五月情影视 | 亚洲国产成人在线 | 亚洲精品黄网站 | 青春草视频在线播放 | 婷婷色吧| 99免费视频 | 正在播放国产一区 | 超碰人人在线观看 | 青青草在久久免费久久免费 | 超级碰碰碰视频 | 久久久久久久久久影视 | 一区二区三区免费看 | 国产又粗又猛又黄又爽 | 黄色免费在线视频 | 欧美日韩一区二区三区在线观看视频 | 午夜在线看片 | 日本一区二区三区视频在线播放 | 国偷自产视频一区二区久 | 激情久久久 | 欧美一二区在线 | 中文字幕免费一区二区 | 伊人久久国产精品 | 日韩理论片| aaa免费毛片 | 麻豆传媒视频观看 | 久久久久久久久久久久久久免费看 | 日韩免费中文字幕 | 国产精品久久三 | 久久综合免费视频 | 日韩视 | 九色精品免费永久在线 | 伊人五月天.com | av成人免费在线 | 成人午夜免费剧场 | 国产精品美女久久 | 色视频网址 | 久久草草热国产精品直播 | 爱射综合 | 国产精品日韩高清 | 18国产精品福利片久久婷 | 在线免费观看羞羞视频 | 亚洲每日更新 | 夜又临在线观看 | 一区二区三区高清在线 | 日本丶国产丶欧美色综合 | 国产在线超碰 | 99精品一区 | 午夜精品一区二区三区免费视频 | 国产高清第一页 | 精品免费观看 | а中文在线天堂 | 五月天色综合 | 五月开心色| 日韩理论视频 | 黄色免费网站 | 精品理论片| 婷婷亚洲综合 | 日韩在线观看中文 | 黄色日本片 | 国产一线二线三线性视频 | 日本精品久久久久久 | 日韩av女优视频 | 久久字幕精品一区 | 中文字幕 欧美性 | 精品福利视频在线观看 | 久久久久草 | 久久激情日本aⅴ | 日本黄色黄网站 | 日韩欧美在线播放 | 日韩一区二区免费播放 | 成年人免费电影 | 人人澡视频 | 欧美一区影院 | 亚洲.www | 久久精品亚洲综合专区 | 国产经典 欧美精品 | 毛片一级免费一级 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲视频综合 | 亚洲aⅴ乱码精品成人区 | 在线有码中文字幕 | 欧美一级电影 | 成人a免费看 | 欧美精品免费在线观看 | 色五丁香 | 欧美日韩aaaa | 国产不卡在线视频 | 伊人亚洲综合网 | 91精品秘密在线观看 | 欧美日产一区 | 看v片| 亚洲一区二区精品视频 | www.com在线观看 | 亚洲国产三级在线观看 | 96在线 | av中文电影 | 亚洲精品在线资源 | 在线观看久久 | 日韩69av | 国产精品中文字幕在线 | 麻豆影视在线观看 | 久久久久国产精品www | 日韩二区三区在线 | 激情网站 | 欧美日韩一区三区 | 网址你懂的在线观看 | 粉嫩av一区二区三区四区五区 | 亚洲区视频在线观看 | 久久永久视频 | 欧美午夜性 | 一区二区视频在线观看免费 | 亚洲日韩欧美一区二区在线 | 国产99区| 精品久久久999 | 一区二区在线不卡 | 在线观看的av | 中文字幕av日韩 | 全黄网站| 96香蕉视频 | 国产黄色精品在线 | 婷婷中文字幕在线观看 | av中文字幕日韩 | 日韩三级免费观看 | 亚洲人人爱 | 久久久久亚洲精品中文字幕 | 狠狠的干狠狠的操 | 九九热精品在线 | 久久精品亚洲一区二区三区观看模式 | 欧美a√大片 | 国产女人免费看a级丨片 | 婷婷视频导航 | 久久国产精品电影 | 日韩精品资源 | 91视频91色| 久久精品99国产精品亚洲最刺激 | 久久久久99精品成人片三人毛片 | 正在播放国产一区 | 不卡av在线| 欧美视频国产视频 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产精品毛片一区二区三区 | 日韩在线观看a | 亚洲一区二区天堂 | 日韩在线播放欧美字幕 | 日韩色中色 | 日韩在线观看一区二区三区 | 午夜视频黄 | 日韩欧美一区二区三区视频 | 婷婷久久五月天 | av观看久久久 | 国产不卡在线观看视频 | 久久久国产电影 | 操操爽| 久久九九九九 | www.888av| 麻豆94tv免费版 | 日日夜夜天天久久 | 天天射,天天干 | 97超碰人人澡 | 999精品在线 | 国产97在线视频 | 99久高清在线观看视频99精品热在线观看视频 | 欧美日韩国产免费视频 | 国产精品久久久久久久久久久免费 | 成人av网站在线观看 | 日韩欧美高清一区二区 | 欧美激情精品久久久久久免费印度 | 久久久久国产成人精品亚洲午夜 | 涩五月婷婷 | 狠狠色香婷婷久久亚洲精品 | 国产又粗又猛又色又黄视频 | 一区二区精品视频 | 天天看天天干天天操 | 亚洲 欧美 精品 | 四虎小视频 | 六月色婷 | 中文字幕 国产专区 | 日日夜夜添 | 久久久久久久久久网站 | 看片网站黄 | 欧美激情视频在线免费观看 | 亚洲激情视频 | 久操伊人 | 99在线免费观看 | 99热99| 97**国产露脸精品国产 | av网站手机在线观看 | 中文国产在线观看 | www.亚洲在线 | 亚洲婷婷网 | 97视频人人免费看 | 一区二区视频免费在线观看 | 日韩免费av在线 | 天天做天天射 | 免费福利影院 | 在线观看国产91 | 国产剧情av在线播放 | 91成人在线观看高潮 | 999成人| 美女免费黄网站 | 中国黄色一级大片 | 国产传媒中文字幕 | 国产精品久久久久久久久费观看 | 99视频网址| 人成在线免费视频 | 日本巨乳在线 | 久草视频免费观 | 国产精品久久一区二区无卡 | 免费黄色在线播放 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 日日躁你夜夜躁你av蜜 | 国产视频在线观看一区二区 | 国内精品视频在线播放 | 亚洲第一中文网 | 激情综合亚洲精品 | 日韩精品aaa | 在线小视频你懂得 | 97视频总站| 在线免费观看麻豆视频 | 国产极品尤物在线 | 午夜精品福利一区二区三区蜜桃 | 在线观看国产中文字幕 | 欧美日韩高清国产 | 国产v在线观看 | 国产香蕉av | 国产成人精品女人久久久 | 日韩三级视频在线观看 | 91资源在线观看 | 日韩欧美69| 日韩av免费一区二区 | 最近高清中文在线字幕在线观看 | 亚洲精品视频偷拍 | 国产美女视频免费观看的网站 | 国产在线传媒 | 国产精品久久久久久久久久久久久久 | 亚洲视屏| 午夜私人影院 | 99热99| 国产精品麻豆视频 | 狠狠干中文字幕 | 男女啪啪视屏 | 国产婷婷精品av在线 | 婷婷中文字幕综合 | 国内精品视频久久 | 婷婷色吧 | 九九亚洲视频 | 午夜精品一区二区三区在线播放 | 天天操夜夜操天天射 | 久久国产亚洲精品 | 国产精品一区二区三区久久久 | 日韩三级av | 白丝av免费观看 | 国产在线色站 | 精品五月天 | 中文字幕日韩一区二区三区不卡 | www.99久久.com | 久久久国产精品一区二区中文 | 国产亚洲精品久久久久久电影 | 亚洲成a人片在线观看网站口工 | 国产午夜精品一区二区三区在线观看 | 丁香花五月 | 久久综合精品一区 | 久久精品视频3 | 麻豆小视频在线观看 | 黄色片软件网站 | 午夜精品久久久久久久久久久久久久 | 亚洲精品乱码久久久久久蜜桃动漫 | 国产成人综合在线观看 | 伊人久久国产精品 | 91中文字幕在线播放 | 亚洲国产av精品毛片鲁大师 | 三级av在线播放 | 国产中文字幕免费 | 久久艹精品 | 欧美日韩亚洲在线观看 | 亚洲人成影院在线 | 色开心| 免费a视频在线 | 亚洲精品国产欧美在线观看 | 99re热精品视频 | 天天做天天爱夜夜爽 | 久久成人高清 | 国产九色视频在线观看 | 香蕉精品在线观看 | 国产精品99久久久久久武松影视 | 97在线精品视频 | 久久成年视频 | 99精品乱码国产在线观看 | 国产精品igao视频网入口 | 欧美精品乱码久久久久 | 亚洲免费av观看 | 四虎在线永久免费观看 | 天天插综合 | 亚洲区另类春色综合小说 | 欧美日韩69| 亚洲va欧美va人人爽 | av高清一区二区三区 | 激情五月开心 | 中文字幕字幕中文 | 亚洲黄a | 国产区网址 | 国产精品99在线播放 | 91网免费观看 | 国产资源av | 国产精品视频在线看 | 久久免费福利 | 日本成人黄色片 | 在线精品一区二区 | 国产成人av一区二区三区在线观看 | 亚洲人在线视频 | 精品福利在线观看 | 欧美伦理一区二区 | 欧美激情综合五月色丁香 | 免费在线观看亚洲视频 | 亚洲欧美在线综合 | 91精品夜夜 | 久久成人高清视频 | 热久久国产 | 国产精品破处视频 | 韩国av一区 | 四虎在线观看精品视频 | 日韩v欧美v日本v亚洲v国产v | 久久精品一区八戒影视 | 精品一区二区在线免费观看 | 中文字幕一区二区三区乱码不卡 | 一二三四精品 | av电影不卡 | 天天操天天操天天 | av三级在线播放 | 中文字幕免费高 | 亚洲精品久久久久久国 | 中文字幕免费播放 | 欧洲一区二区三区精品 | 天天狠狠干| 欧美 日韩 视频 | 最近2019年日本中文免费字幕 | 国产精品一区二区在线观看免费 | 综合色久 | 国产精品久久久网站 | 国产黄在线观看 | 国产黄色在线 | 极品国产91在线网站 | 中文字幕一区二区三区四区视频 | 国产成人精品在线播放 | 久久99久久99 | 一级一级一片免费 | 蜜臀一区二区三区精品免费视频 | 欧美美女激情18p | 国产精品免费av | av免费看在线 | 激情小说网站亚洲综合网 | 国产亚洲精品女人久久久久久 | 亚州精品成人 | 国产精品嫩草影院99网站 | 日韩精选在线观看 | 免费a现在观看 | 国产综合精品一区二区三区 | 97香蕉久久超级碰碰高清版 | 亚洲激精日韩激精欧美精品 | 人人狠狠综合久久亚洲 | 超碰97人人干 | 亚洲精品国产精品国自产观看浪潮 | 成人免费视频免费观看 | 午夜体验区 | 97视频免费观看2区 亚洲视屏 | 久久精品亚洲 | 免费在线观看视频一区 | 国产91丝袜在线播放动漫 | 超碰人人干人人 | 操操操人人 | 国产精品粉嫩 | 欧美久久久久久久久久久久久 | 97精品国产97久久久久久免费 | 天无日天天操天天干 | 女人18毛片a级毛片一区二区 | 国产免费又爽又刺激在线观看 | 亚洲精品456在线播放 | 高清不卡一区二区在线 | 久久理论影院 | 国产精品久久久久永久免费观看 | 午夜男人影院 | 精品久久久免费 | 精品嫩模福利一区二区蜜臀 | 97成人在线免费视频 | 国产成人亚洲在线观看 | 国产黄影院色大全免费 | 曰韩精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品伊人久久久 | 精品视频| 久久久久亚洲精品国产 | 在线天堂中文在线资源网 | 天堂激情网 | 日韩视频一 | 色姑娘综合天天 | 亚洲精品小区久久久久久 | 99久久久国产精品美女 | 成年人免费看的视频 | 99视频这里只有 | 日韩精品视频在线观看免费 | 国产成人综合图片 | 99精品视频免费观看视频 | 国产视频91在线 | 久久99久久99精品中文字幕 | 日韩欧美一二三 | bbb搡bbb爽爽爽 | 在线免费色视频 | www婷婷 | 久久国际影院 | 午夜久久 | 亚洲免费小视频 | 五月婷婷一级片 | 国产精品第2页 | 91在线91拍拍在线91 | 在线 国产 亚洲 欧美 | 久久久久免费精品国产小说色大师 | 午夜精品一区二区三区在线视频 | 久久久久久精 | 久久久久电影网站 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 六月丁香社区 | 97视频在线免费播放 | 中文字幕一区2区3区 | 日韩精品在线免费播放 | 欧美日韩高清一区二区 国产亚洲免费看 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲v欧美v国产v在线观看 | 一区二区精品在线 | av在线看网站 | 最近2019好看的中文字幕免费 | 精品一二 | 91免费黄视频 | 色婷婷亚洲婷婷 | 国产综合福利在线 | av线上免费观看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 成人国产精品久久久 | 探花视频在线观看 | 免费看黄的 | 丁香激情网| av中文字幕免费在线观看 | 天天综合中文 | 免费日韩一区二区三区 | 人人躁| 91精品国自产拍天天拍 | 亚洲国产成人精品久久 | 色一级片| 久久精品视频播放 | av免费在线观看1 | 欧美精品久久久久久久久久 | 在线观看黄av | 中文字幕视频免费观看 | 黄色小网站在线 | 999热视频| 日韩免费看视频 | 日韩一区二区免费在线观看 | 欧美一级艳片视频免费观看 | 亚洲三级黄色 | 果冻av在线 | 伊人激情综合 | 久久精品一二三 | 亚洲人人精品 | 日韩免费在线一区 | 丁香婷婷色综合亚洲电影 | av黄色国产 | a天堂中文在线 | 久草在线视频在线 | 欧美一区二区三区不卡 | 久久国产剧场电影 | 久久久午夜剧场 | 超碰在线观看97 | 久久久999精品视频 国产美女免费观看 | 日日夜夜狠狠干 | 精品伦理一区二区三区 | 免费黄色激情视频 | 国内精品久久久精品电影院 | 美女免费视频观看网站 | 99久久综合精品五月天 | 日韩二区在线播放 | 久久久国产精品一区二区三区 | 婷婷亚洲综合 | 果冻av在线 | 在线观看视频三级 | 91视频高清 | 日韩理论片中文字幕 | 91香蕉视频好色先生 | 国产精品不卡在线播放 | 久久成人国产精品入口 | 毛片1000部免费看 | 精品色999 | 黄色大全免费网站 | 91原创在线观看 | 久久99久久久久久 | 亚洲综合涩 | 亚洲一区天堂 | 亚洲精品久久久蜜臀下载官网 | 亚洲天堂精品视频在线观看 | 精品国产乱码久久久久久1区2匹 | 四虎国产永久在线精品 | 日韩欧美区 | 国产色网| 日韩毛片在线播放 | 99久久超碰中文字幕伊人 | 成人av观看 | 99爱国产精品 | 国产精品精品国产 | 国产在线精品一区二区不卡了 | 在线观看av中文字幕 | 一区二区三区在线免费播放 | 亚洲精品ww| 成年人在线电影 | 天堂av免费观看 | 久久女教师 | 综合色播| 欧美日韩精品电影 | 在线看国产 | 久久福利影视 | 波多野结衣综合网 | 青青河边草免费直播 | 91精品一 | 国产精品亚洲精品 | 久久久久女人精品毛片九一 | 欧美日韩在线网站 | 国内精品久久久久国产 | 国模视频一区二区三区 | 日韩色爱| 深夜激情影院 | 精品欧美一区二区精品久久 | av日韩国产 | 久久久久久在线观看 | www.97色.com | 中文字幕影视 | 最近高清中文字幕 | 久一久久 | 亚洲无吗视频在线 | 射综合网| 国产高清视频在线播放一区 | 久久精选视频 | 日韩黄色免费电影 | 免费福利在线播放 | 亚洲激情一区二区三区 | 91成年人网站 | 欧美性春潮 | 丝袜美腿亚洲综合 | 久在线观看 | 亚洲日b视频 | 久久久久久久久久伊人 | 伊人伊成久久人综合网小说 | 91亚洲精品久久久蜜桃借种 | 深爱激情五月网 | 欧美亚洲成人xxx | 午夜精品成人一区二区三区 | av网站地址 | 人人澡超碰碰 | 国产高清av | 国产一级精品在线观看 | 欧美粗又大| 色网站在线免费 | 手机看国产毛片 | www.大网伊人 | 超碰人人做 | 免费91在线观看 | 久久免费公开视频 | 在线观看一级片 | 91精品视频导航 | 蜜臀av性久久久久蜜臀aⅴ四虎 | www.国产毛片 | 欧美一区二区三区特黄 | 日韩在线视频播放 | 国产精品久久久久aaaa九色 | 日韩天天综合 | 久久精品视频网站 | 日韩欧美视频在线观看免费 | 91亚洲网站 | 激情www | 久久99网| 不卡日韩av | 免费a v视频 | 亚洲综合色丁香婷婷六月图片 | 美女久久久久久 | 视频一区在线免费观看 | 久久精品国产一区 | 亚洲欧美国产精品va在线观看 | 99久热在线精品视频 | 中文字幕在线日亚洲9 | 在线观看日韩一区 | 99精品视频免费观看 | 亚洲人成综合 | 久青草国产在线 | 91麻豆福利 | 国产成人一区二区三区在线观看 | 91在线产啪 | 91中文字幕在线视频 | av免费看看| 狠狠躁夜夜躁人人爽超碰91 | 亚洲情感电影大片 | av电影免费在线播放 | 在线最新av | 国产午夜一区 | www.啪啪.com | 精品国产一二三 | 激情视频一区二区三区 | 成人av一区二区兰花在线播放 | 日韩一级黄色片 | 国产精品不卡av | 国产精品白丝jk白祙 | 亚洲天堂网在线观看视频 | 中文字幕第一页在线vr | 99久久99久久精品国产片 | 狠狠五月婷婷 | 99爱在线观看| 狠狠躁日日躁 | 国产很黄很色的视频 | 日韩免费看的电影 | 天天拍天天爽 | 国产亚洲欧美日韩高清 | 国产a级片免费观看 | 亚洲成人黄色av | 99爱在线观看 | 黄色大片入口 | 成人h在线| 久久高清免费观看 | 久久99精品久久久久久清纯直播 | 日韩精品一区二区三区免费观看视频 | 亚洲免费在线观看视频 | 玖玖玖精品 | 天天操天天摸天天干 | 99精品视频在线观看免费 | 中文资源在线官网 | 91精品中文字幕 | 欧美精品免费在线观看 | 亚洲午夜久久久影院 | 激情小说久久 | 日本色小说视频 | 天天干人人干 | 国产精品福利小视频 | 在线va视频| 91高清免费观看 | 在线成人短视频 | 免费在线观看一级片 | 国产一级一级国产 | 在线播放亚洲 | 欧美在线一二区 | 天天干天天射天天插 | 黄色在线成人 | 免费视频91蜜桃 | 亚洲精品观看 | 国产我不卡 | 91九色国产在线 | 久久久久久久综合色一本 | 日韩色区| 欧美日本不卡高清 | 97在线视频免费播放 | 狠狠色丁香婷婷综合久小说久 | 国产精品美女久久久久久2018 | 日韩黄色免费看 | 91探花在线| 久久无码av一区二区三区电影网 | 国产亚洲精品久久久久久移动网络 | 超碰97国产精品人人cao | 国产精品美女免费看 | 成年人免费在线观看网站 | 国产精品久久久久婷婷 | 久久成 | www蜜桃视频| 亚洲九九九在线观看 | 美女在线免费观看视频 | 国产精品视频永久免费播放 | 九九久久久久久久久激情 | 免费观看mv大片高清 | 日韩成人在线一区二区 | 国产精品自产拍在线观看蜜 | 99久久精品免费看国产 | 一级黄色大片在线观看 | 亚洲不卡123 | 日本黄色免费在线观看 | 超碰在线观看97 | 91桃色国产在线播放 | 99国产视频在线 | 日韩视频一二三区 | 五月开心综合 | 97久久久免费福利网址 | 精品久久综合 | 在线观看91精品国产网站 | 成人免费共享视频 | 久久久久国产免费免费 | 天天视频亚洲 | 日韩免| 精品日韩在线 | 二区三区av| 99久久精品免费看国产四区 | 91视频3p | 精品美女在线视频 | 人人爽人人澡人人添人人人人 | 在线观看一区 | 丁香六月av| 久艹视频免费观看 | 国产精品久久久久久久久免费看 | 亚洲成熟女人毛片在线 | 色综合中文综合网 | 综合色在线观看 | 99久久激情视频 | 正在播放国产一区二区 | 久草久热 | 在线观看资源 | 日韩另类在线 | 欧美色噜噜 | 91av视频在线观看免费 | 日日天天av | 精品久久久久久久久久久院品网 | 激情久久综合网 | 婷婷丁香久久五月婷婷 | 81国产精品久久久久久久久久 | av在线电影播放 | 91成人破解版 | 中文国产成人精品久久一 | 欧美超碰在线 | 国产精品视频资源 | 手机看片99| 欧美性生活一级片 | 国产精品成人免费精品自在线观看 | 丝袜足交在线 | 成人黄色免费在线观看 | 狠狠的日| 在线黄色国产电影 | 国产亚洲精品久久19p | 欧美 激情 国产 91 在线 | 午夜av在线免费 | 日韩啪啪小视频 | 国产专区视频在线观看 | 一区二区三区在线免费观看 | 精品一二三四视频 | av在线免费观看不卡 | 久章草在线观看 | 国产成人精品午夜在线播放 | 天堂av一区二区 | 在线观看www91 | 色资源二区在线视频 | 人人射人人插 | 婷婷伊人五月天 | 亚洲视频免费在线观看 | 99热日本| 国产高清视频 | 精品99视频 | 久久91网| 亚洲成人精品 | 国产精品免费看久久久8精臀av | 久久精品一区二区三区视频 | 五月婷婷开心中文字幕 | 在线播放一区二区三区 | 超碰个人在线 | 国内精品久久久久久久久 | 色婷婷在线视频 | av黄色免费在线观看 | 国产不卡精品 | 午夜婷婷在线观看 | 手机看国产毛片 | 91在线91| 亚洲作爱视频 | 97色在线| 国产一级片一区二区三区 | 久草电影在线 | 日韩免费观看高清 | 日本中文字幕在线观看 | 国产精品久久久久一区二区三区 | 午夜123| 免费毛片一区二区三区久久久 | 日韩视频中文字幕在线观看 | 亚洲成av人影院 | 伊人官网 | 日本黄色免费看 | 久久久在线视频 | 91影视成人| 九九热只有精品 | 亚洲精选在线观看 | 国产色黄网站 | 人人爱人人爽 | 欧美激情在线看 | 91av影视| 天天插天天 | 高清不卡毛片 | 色综合色综合久久综合频道88 | 最新日韩在线观看视频 | 人人爽久久久噜噜噜电影 | 在线观看91精品视频 | 国产精品白浆视频 | 国产日韩欧美在线 | 亚洲成色 | 欧洲一区二区三区精品 | 美女免费视频网站 | 久草在线在线精品观看 | 日韩在线视频一区二区三区 | 精品一二 | 欧美一区二视频在线免费观看 | 骄小bbw搡bbbb揉bbbb | 九九热视频在线 | 日韩精品一区二区三区电影 | 午夜国产福利视频 | 免费毛片一区二区三区久久久 | 久久综合免费视频 | 精品一区二区电影 | 一区二区三区精品在线视频 | 三级黄色网址 | 激情综合狠狠 | 国产日韩精品一区二区在线观看播放 | 精品国产一区二区三区四 | 97超碰资源总站 | 在线亚洲精品 | 五月天综合激情网 | 久久久久久久久影院 | 极品美女被弄高潮视频网站 | 久久久久久久久久久久久久免费看 | 日韩免费电影在线观看 | av在线直接看 | 国精产品999国精产品视频 | 成人亚洲欧美 | 国产精品久久久久久久婷婷 | 96精品视频 | 日韩免费在线观看 | 黄色大片入口 | 亚洲另类视频在线 | 69欧美视频 | 国产视频18 | 五月婷婷激情六月 | 奇米影视8888 | 精品一区二区免费视频 | 奇米网444| 国产一区二区在线精品 | av免费电影网站 | 日韩欧美v | 91在线porny国产在线看 | 久久看免费视频 | 日韩91在线| 久草在线视频看看 | 日韩中文字幕第一页 | 午夜精品福利影院 | 成人av资源| 国产精品免费高清 | 四虎在线观看视频 | 在线激情影院一区 | 日韩v在线 | 麻豆视频免费网站 | 97国产精品亚洲精品 | 91| 奇米网在线观看 | 亚洲情感电影大片 | 欧美一级片 | 欧美精品中文在线免费观看 | 99视频免费在线观看 | 草久久久久久 | 人人爽人人爽人人片av免 | 日韩在线视 | 国产一区二区电影在线观看 | 人人躁| 久久tv视频 | 亚洲综合五月天 | 99视频在线精品 | 97精品国产97久久久久久 | 草久草久| 香蕉视频在线免费看 | 国产午夜av | 国产一区二区三区在线免费观看 | 日韩久久精品一区二区三区 | 丁香六月五月婷婷 | 日本在线视频网址 | 色综合久久88色综合天天免费 | 欧美成年人在线视频 | www.国产毛片| 日本99干网 | 中文字幕二区在线观看 | 亚洲国产高清在线观看视频 | 97免费在线观看视频 | 国产精品少妇 | 三级av黄色 | 天天操导航 | 国产专区精品视频 |