99久久久久久久久96久久,青青操在线视频免费播放,亚洲黄色天堂视频网,91国产原创精品人妻,2020亚洲欧美国产日韩,亚洲三级免费观看网址,免费女人高潮又粗肛交毛片,啊啊啊嗯呢啊啊啊官网首页,免费av三级在线观看

聯(lián)系我們 - 廣告服務(wù) - 聯(lián)系電話:
您的當(dāng)前位置: > 關(guān)注 > > 正文

Java進(jìn)階1-JVM虛擬機(jī) JVM在字節(jié)碼上的使用方法

來(lái)源:CSDN 時(shí)間:2023-04-06 10:06:28

1. JVM簡(jiǎn)述


(資料圖片)

JVM是Java Virtual Machine的縮寫(xiě)。它是一種基于計(jì)算設(shè)備的規(guī)范,是一臺(tái)虛擬機(jī),即虛構(gòu)的計(jì)算機(jī)。 JVM屏蔽了具體操作系統(tǒng)平臺(tái)的信息(顯然,就像是我們?cè)陔娔X上開(kāi)了個(gè)虛擬機(jī)一樣),當(dāng)然,JVM執(zhí)行字節(jié)碼時(shí)實(shí)際上還是要解釋成具體操作平臺(tái)的機(jī)器指令的。 如類加載機(jī)制、運(yùn)行時(shí)數(shù)據(jù)區(qū)、垃圾回收機(jī)制等; 官網(wǎng):https://www.oracle.com/java/technologies/javase/vmoptions-jsp.html

2. 字節(jié)碼

2.1 字節(jié)碼由來(lái)

Java 所有的指令有 200 個(gè)左右,一個(gè)字節(jié)( 8 位)可以存儲(chǔ) 256 種不同的指令信息,一個(gè)這樣的字節(jié)稱為字節(jié)碼( Bytecode )

JVM 將字節(jié)碼解釋執(zhí)行,屏蔽對(duì)底層操作系統(tǒng)的依賴,JVM也可以將字節(jié)碼編譯執(zhí)行,如果是熱點(diǎn)代碼,會(huì)通過(guò)JIT 動(dòng)態(tài)地編譯為機(jī)器碼,提高執(zhí)行效率

JVM在字節(jié)碼上也設(shè)計(jì)了一套操作碼助記符,使用特殊單詞來(lái)標(biāo)記這些數(shù)字。 加載或存儲(chǔ)指令 、運(yùn)算指令、類型轉(zhuǎn)換指令、對(duì)象創(chuàng)建與訪問(wèn)指令、操作棧管理指令、方法調(diào)用與返回指令。

2.2 源碼轉(zhuǎn)化成字節(jié)碼

詞法解析是通過(guò)空格分隔出單詞 、操作符、控制符等信息 , 將其形成 token 信息流 ,傳遞給語(yǔ)法解析器。 在語(yǔ)法解析時(shí),把詞法解析得到的 token 信息流按照 Java 語(yǔ)法規(guī)則組裝成一棵語(yǔ)法樹(shù) , 如圖 4-2 虛線框所示。 在語(yǔ)義分析階段 , 需要檢查關(guān)鍵字的使用是否合理、類型是否匹配、作用域是否正確等。 當(dāng)語(yǔ)義分析完成之后,即可生成字節(jié)碼。

2.2 執(zhí)行三種模式

字節(jié)碼必須通過(guò)類加載過(guò)程加載到 JVM 環(huán)境后,才可以執(zhí)行。執(zhí)行有三種模式:第一,解釋執(zhí)行;第二,JIT 編譯執(zhí)行;第三, JIT 編譯與解釋混合執(zhí)行(主流 JVM默認(rèn)執(zhí)行模式)。混合執(zhí)行模式的優(yōu)勢(shì)在于解釋器在啟動(dòng)時(shí)先解釋執(zhí)行,省去編譯時(shí)間。隨著時(shí)間推進(jìn) , JVM 通過(guò)熱點(diǎn)代碼統(tǒng)計(jì)分析 , 識(shí)別高頻的方法調(diào)用、循環(huán)體、公共模塊等,基于強(qiáng)大的 JlT 動(dòng)態(tài)編譯技術(shù),將熱點(diǎn)代碼轉(zhuǎn)換成機(jī)器碼,直接交給 CPU執(zhí)行。 JIT 的作用是將 Java 字節(jié)碼動(dòng)態(tài)地編譯成可以直接發(fā)送給處理器指令執(zhí)行的機(jī)器碼。簡(jiǎn)要流程如圖 4-3 所示。 注意解釋執(zhí)行與編譯執(zhí)行在線上環(huán)境微妙的辯證關(guān)系。機(jī)器在熱機(jī)狀態(tài)可以承受的負(fù)載要大于冷機(jī)狀態(tài)(剛啟動(dòng)時(shí) ),如果以熱機(jī)狀態(tài)時(shí)的流量進(jìn)行切流 , 可能使處于冷機(jī)狀態(tài)的服務(wù)器因無(wú)法承載流量而假死。 剛啟動(dòng)的 JVM 均是解釋執(zhí)行,還沒(méi)有進(jìn)行熱點(diǎn)代碼統(tǒng)計(jì)和 JIT 動(dòng)態(tài)編譯。

3. 類加載過(guò)程

3.1 類加載流程

1、Load加載(讀取二進(jìn)制流轉(zhuǎn)特定數(shù)據(jù)結(jié)構(gòu)) 2、Link鏈接( 驗(yàn)證-詳細(xì)校驗(yàn)如類型、常量、靜態(tài)變量等。 準(zhǔn)備-為靜態(tài)變量分配內(nèi)存。 解析-確保類與類之間的相互引用正確性,完成內(nèi)存結(jié)構(gòu)布局) 3、Init初始化(執(zhí)行類構(gòu)造器完成類的初始化) 4、解析執(zhí)行直接給CPU、JIT動(dòng)態(tài)編譯機(jī)器碼再給CPU 類加載是一個(gè)將 . class 字節(jié)碼文件實(shí)例化成 Class 對(duì)象并進(jìn)行相關(guān)初始化的過(guò)程。 全小寫(xiě)的 class 是關(guān)鍵字,用來(lái)定義類,而首字母大寫(xiě)的 Class ,它是所有 class 的類。** 問(wèn)題:**為什么這個(gè)抽象還是另外一個(gè)類 Class 的對(duì)象? 示例代碼如下:

/** * @author cmy * @version 1.0 * @date 2022/6/29 0029 13:43 * @description 類加載過(guò)程測(cè)試 */public class ClassTest {//數(shù)組類型有一個(gè)魔法屬性:length來(lái)獲取數(shù)組長(zhǎng)度    private static int[] array=new int[3];    private static int length=array.length;    //任何小寫(xiě)class定義的類,也有一個(gè)魔法屬性:class,來(lái)獲取此類的大寫(xiě)Class類對(duì)象    private static Classone=One.class;    private static Classanother=Another.class;    public static void main(String[] args) throws Exception {//通過(guò)newInstance方法創(chuàng)建One和 Another的類對(duì)象(第1處)        One oneObject=one.newInstance();        oneObject.call();        Another anotherObject=another.newInstance();        anotherObject.speak();                //通過(guò)one這個(gè)大寫(xiě)的Class對(duì)象,反射方式獲取私有成員屬性對(duì)象Field(第2處)        Field privateFieldInOne = one.getDeclaredField("inner");                //設(shè)置私有對(duì)象可以訪問(wèn)和修改(第3處)        privateFieldInOne.setAccessible(true);        privateFieldInOne.set(oneObject,"world changed");        //成功修改類的私有屬性inner變量值為world changed.        System.out.println(oneObject.getInner());    }}class One{private String inner="time files.";    public void call(){System.out.println("hello world");    }    public String getInner(){return inner;    }}class Another{public void speak(){System.out.println("easy coding");    }}

第1處說(shuō)明new 是強(qiáng)類型校驗(yàn) , 可以調(diào)用任何構(gòu)造方法 , 在使用new 操作的時(shí)候,這個(gè)類可以沒(méi)有被加載過(guò)。 Class 類下的 newInstance是弱類型,只能調(diào)用無(wú)參數(shù)構(gòu)造方法,如果沒(méi)有默認(rèn)構(gòu)造方法,就拋出InstantiationException 異常,如果此構(gòu)造方法沒(méi)有權(quán)限訪問(wèn),則拋出IllegalAccessException 異常。 第2處說(shuō)明使用類似的方式獲取其他聲明 , 如注解、方法等,如圖4.5所示。 第3處說(shuō)明問(wèn)題:private 成員在類外是否可以修改?通過(guò) setAccessible(true) 操作,即可使用大寫(xiě) C lass 類的 set 方法修改其值。

3.2 類加載器實(shí)現(xiàn)機(jī)制

/**         * 查看本地類加載器的方式如下         */        //正在使用得類加載器sun.misc.Launcher$AppClassLoader@18b4aac2        ClassLoader c = One.class.getClassLoader();        //AppClassLoader的父類加載器是ExtensionClassLoader JDK1.9之前        ClassLoader c1 = c.getParent();        //ExtClassLoader父類加載器(最高一層)Bootstrap C++實(shí)現(xiàn) 返回null        ClassLoader c2 = c1.getParent();        System.out.println(c);        System.out.println(c1);        System.out.println(c2);

低層次的當(dāng)前類加載器,不能覆蓋更高層次類加載器已經(jīng)加載的類。 如圖 4-6 所示,左側(cè)綠色箭頭向上逐級(jí)詢問(wèn)是否已加載此類,直至 Bootstrap ClassLoader ,然后向下逐級(jí)嘗試是否能夠加載此類,如果都加載不了,則通知發(fā)起加載請(qǐng)求的當(dāng)前類加載器 ,準(zhǔn)予加載。 通過(guò)如下代碼可以查看 Bootstrap 所有已經(jīng)加載的類庫(kù):

/**         * 通過(guò)如下代碼可以查看BootstrapClassLoader所有已經(jīng)加載的類庫(kù):         */        URL[] urLs = Launcher.getBootstrapClassPath().getURLs();        for (java.net.URL url:urLs) {System.out.println(url.toExternalForm());        }

在JVM中增加如下啟動(dòng)參數(shù) , 則能通過(guò) Class.forName 正常讀取到指定類 , 說(shuō)明此參數(shù)可以增加Bootstrap 的類加載路徑:

- Xbootclasspath/a:/Users/yangguanbao/book/easyCoding/byJdk11/src

如果想在啟動(dòng)時(shí)觀察加載了哪個(gè)jar包中的哪個(gè)類 ,可以增加-XX:+TraceClassLoading參數(shù)

- XX:+TraceClassLoading

3.3 自定義類加載器

學(xué)習(xí)類加載器的實(shí)現(xiàn)機(jī)制后 , 雙親委派模型并非強(qiáng)制模型, 用戶可以自定義類加載器 。問(wèn)題:在什么情況下需要自定義類加載器呢? ** ** 隔離加載類、修改類加載方式、擴(kuò)展加載源、防止源碼泄露。

實(shí)現(xiàn)自定義類加載器的步驟,繼承ClassLoader,重寫(xiě) findClass()方法,調(diào)用defineClass()方法。一個(gè)簡(jiǎn)單的類加載器實(shí)現(xiàn)的示例代碼如下:

/** * @author cmy * @version 1.0 * @date 2022/6/29 0029 15:34 * @description 自定義類加載器 * * 自定義類加載器步驟: * 繼承ClassLoader * 重寫(xiě)findClass()方法 * 調(diào)用defineClass()方法 */public class CustomClassLoader extends ClassLoader {private String classpath;    public CustomClassLoader(String classpath) {this.classpath = classpath;    }    @Override    protected Class findClass(String name) throws ClassNotFoundException {try {byte[] bytes = getClassFromCustomPath(name);            return defineClass(name, bytes, 0, bytes.length);        } catch (IOException e) {e.printStackTrace();            throw new ClassNotFoundException();        }    }    private byte[] getClassFromCustomPath(String name) throws IOException {//從自定義路徑中加載指定類        FileInputStream fis = new FileInputStream(classpath + File.separator + name.replace(".", File.separator).concat(".class"));        byte[] bytes = new byte[fis.available()];        fis.read(bytes);        fis.close();        return bytes;    }    public static void main(String[] args) {CustomClassLoader customClassLoader = new CustomClassLoader("F:\\IDEA2022\\workmenu\\SoftwareTools\\src\\main\\java");        try {Class clazz = customClassLoader.loadClass("Test");            //調(diào)用的靜態(tài)方法            clazz.getDeclaredMethod("say").invoke(clazz);            Object o = clazz.newInstance();            Method print = clazz.getDeclaredMethod("print", String.class);            print.invoke(o, "調(diào)用的對(duì)象方法");            //自定義類加載器            System.out.println(clazz.getClassLoader());            //AppClassLoader            System.out.println(clazz.getClassLoader().getParent());            //ExtClassLoader            System.out.println(clazz.getClassLoader().getParent().getParent());            //BootstrapLoader            System.out.println(clazz.getClassLoader().getParent().getParent().getParent());        }catch (Exception e){e.printStackTrace();        }    }}//https://blog.csdn.net/weixin_42759726/article/details/114030153

//javac編譯后,記得刪除Test.java比較路徑尋找和Test.class沖突public class Test {public static void say() {System.out.println("this is a static method!");    }     public void print(String s) {System.out.println("printing:"+s);    }}

按某種規(guī)則 jar 包的版本被統(tǒng)←指定 ,導(dǎo)致某些類存在包路徑、類名相同 的情況 , 就會(huì)引起類沖突 ,導(dǎo)致應(yīng)用程序出現(xiàn)異常。主流的容器類框架都會(huì)自定義類加載器,實(shí)現(xiàn)不同中間件之間的類隔離 , 有效避免了類沖突。

4. 內(nèi)存布局(運(yùn)行時(shí)數(shù)據(jù)區(qū)域)

前面回顧連接

在類加載過(guò)程第二步Link鏈接的解析階段,解析類和方法確保類與類之間的相互引用正確性,完成內(nèi)存 結(jié)構(gòu)布局。

4.1 內(nèi)存布局簡(jiǎn)介

Java 程序在運(yùn)行時(shí),會(huì)為 JVM 單獨(dú)劃出一塊內(nèi)存區(qū)域,而這塊內(nèi)存區(qū)域又可以再次劃分出一塊運(yùn)行時(shí)數(shù)據(jù)區(qū),運(yùn)行時(shí)數(shù)據(jù)區(qū)域大致可以分為五個(gè)部分:

4.2 Heap堆區(qū)

**Heap堆區(qū)作用:**Heap 是 OOM 故障最主要的發(fā)源地 , 它存儲(chǔ)著幾乎所有的實(shí)例對(duì)象, 堆由垃圾收集器自動(dòng)回收 , 堆區(qū)由各子線程共享使用。 堆的內(nèi)存空間既可以固定大小 , 也可以在運(yùn)行時(shí)動(dòng)態(tài)地調(diào)整。

比如 -Xms256M -Xmxl024M ,其中 -X 表示它是 JVM 運(yùn)行參數(shù), ms 是 memory start 的簡(jiǎn) 稱, mx 是 memory max 的簡(jiǎn)稱,分別代表最小堆容量和最大堆容量。 一般最大和最小一樣。避免在GC后調(diào)整堆大小時(shí)帶來(lái)的額外壓力。

堆分成兩大塊:新生代和老年代。新生代= 1 個(gè) Eden 區(qū)+ 2 個(gè)Survivor 區(qū)。

當(dāng) Eden區(qū)裝填滿的時(shí)候 , 會(huì)觸發(fā) Young Garbage Collection , 即 YGC。垃圾回收的時(shí)候 , 在 Eden 區(qū)實(shí)現(xiàn)清除策略 , 沒(méi)有被引用的對(duì)象則直接回收。依然存活的對(duì)象會(huì)被移送到 Survivor 區(qū)。

**問(wèn)題:**Survivor 區(qū)分為 S0和 S1兩塊內(nèi)存空間 , 送到哪塊空間呢? 每次 YGC 的時(shí)候, 它們將存活的對(duì)象復(fù)制到未使用的那塊空間,然后將當(dāng)前正在使用的空間完全清除 , 交換兩塊空間的使用狀態(tài)。

**問(wèn)題:**如何防止對(duì)象沒(méi)有進(jìn)取心? 每個(gè)對(duì)象都有一個(gè)計(jì)數(shù)器,每次 YGC 都會(huì)加1。 -XX:MaxTenuringThreshold 參數(shù)能配置計(jì)數(shù)器的值到達(dá)某個(gè)閥值的時(shí)候 , 對(duì)象從新生代晉升至老年代。

對(duì)象分配與簡(jiǎn)要GC流程圖如圖4-9所示。 圖 的 中,如果 Survivor 區(qū)無(wú)法放下,或者超大對(duì)象的鬧值超過(guò)上限,則嘗試在老年代中進(jìn)行分配 ; 如果老年代也無(wú)法放下,則會(huì)觸發(fā) Full Garbage Collection , 即FGC。如果依然無(wú)法放下, 則拋出 OOM。堆內(nèi)存出現(xiàn) OOM 的概率是所有內(nèi)存耗盡異常中最高的。出錯(cuò)時(shí)的堆內(nèi)信息對(duì)解決問(wèn)題非常有幫助 , 所以給JVM設(shè)置運(yùn)行參數(shù) -XX:+HeapDumpOnOutOfMemoryError,讓JVM遇到OOM 異常時(shí)能輸出堆內(nèi)信息,特別是對(duì)相隔數(shù)月才出現(xiàn)的 OOM 異常尤為重要。

4.3 Metaspace (元空間)

元空間作用:存儲(chǔ)常量池、方法元信息、類元信息。字符串常量String存在堆內(nèi)存。

元空間發(fā)展:源碼解析和示例代碼基本采用 JDK11版本, JVM則為 Hotspot。在 JDK7 及之前的版本中,只有 Hotspot才有 Perm 區(qū),譯為永久代 , 它在啟動(dòng)時(shí)固定大小,很難進(jìn)行調(diào)優(yōu)。動(dòng)態(tài)加載類過(guò)多,容易產(chǎn)生 Perm 區(qū)的 OOM。為了解決Perm 區(qū)的 OOM, 需要設(shè)定運(yùn)行參數(shù) -XX:MaxPermSize= 1280m。

永久代在垃圾回收過(guò)程中還存在諸多問(wèn)題。 JDK8 使用元空間替換永久代。在 JDK8 及以上版本中,設(shè)定 MaxPermSize 參數(shù), JVM在啟動(dòng)時(shí)并不會(huì)報(bào)錯(cuò)。

區(qū)別于永久代 , 元空間在本地內(nèi)存中分配。在 JDK8 里, Perm 區(qū) 中的所有內(nèi)容 中字符串常量移至堆內(nèi)存,其他內(nèi)容包括類元信息、字段、靜態(tài)屬性、方法、常量等 都移動(dòng)至無(wú)空間內(nèi)。

圖 4-10 中顯示在常量池中的 String, 其實(shí)際對(duì)象是被保存在堆內(nèi)存中的。

4.4 JVM Stack (虛擬機(jī)棧)

**虛擬機(jī)棧作用:描述JAVA方法執(zhí)行的內(nèi)存區(qū)域。**方法調(diào)用到執(zhí)行完成~入棧到出棧的過(guò)程。棧頂?shù)膸Q為棧幀,正在執(zhí)行的方法稱為當(dāng)前方法,棧幀是方法運(yùn)行的基本結(jié)構(gòu)。StackOverflowError表示請(qǐng)求的棧溢出,內(nèi)存耗盡。 棧幀在整個(gè) JVM 體系中的地位頗高, 包括局部變量表、操作棧、動(dòng)態(tài)連接、方法返回地址等。

1 局部變量表2 操作棧

public int simpleMethod(){//將常量13壓入操作棧、保存到局部變量表的slot_1中    int x=13;     //將常量14壓入操作棧、保存到局部變量表的slot_2中    int y=14;     //將slot_1元素壓入操作棧,將slot_2元素壓入操作棧,    //再取出來(lái)到CPU中加法,并壓回操作棧,把棧頂結(jié)果保存到局部變量表的slot_3中    int z= x+y;     //返回棧頂元素值    return z;}

** 3 動(dòng)態(tài)鏈接** 每個(gè)枝幀中包含一個(gè)在常量池中對(duì)當(dāng)前方法的引用 , 目的是支持方法調(diào)用過(guò)程的動(dòng)態(tài)連接。 4 方法返回地址

4.5 Native Method Stacks (本地方法棧)

本地方法棧作用:虛擬機(jī)?!爸鲀?nèi) ”, 而本地方法?!爸魍狻?。本地方法棧為 Native 方法服務(wù)。本地方法可以通過(guò) JNI ( Java Native Int rface )來(lái)訪問(wèn)虛擬機(jī)運(yùn)行時(shí)的數(shù)據(jù)區(qū) ,甚至可以調(diào)用寄存器,具有和 JVM 相同的能力和權(quán)限。對(duì)于內(nèi)存 不足的情況 本地方法枝還是會(huì)拋出 native heap OutOfMemory。

4.6 Program Counter Register(程序計(jì)數(shù)寄存器)

程序計(jì)數(shù)寄存器作用:CPU 只有把數(shù)據(jù)裝載到寄存器才能夠運(yùn)行。保證在多線程并發(fā)執(zhí)行過(guò)程中,保證分毫無(wú)差。**問(wèn)題:**由于CPU時(shí)間片輪限制,眾多線程在并發(fā)執(zhí)行過(guò)程中,導(dǎo)致經(jīng)常中斷或恢復(fù),如何保證分毫無(wú)差呢? 每個(gè)線程在創(chuàng)建后,都會(huì)產(chǎn)生 自己的程序計(jì)數(shù)器和棧幀,程序計(jì)數(shù)器用來(lái)存放執(zhí)行指令的偏移量和行號(hào)指示器等, 線程執(zhí)行或恢復(fù)都要依賴程序計(jì)數(shù)器。程序計(jì)數(shù)器在各個(gè)線程之間互不影響,此區(qū)域 也不會(huì)發(fā)生內(nèi)存溢出異常。

4.7 運(yùn)行時(shí)數(shù)據(jù)區(qū)域總結(jié)

1 Heap堆區(qū)作用:Heap 是 OOM 故障最主要的發(fā)源地 ,它存儲(chǔ)著幾乎所有的實(shí)例對(duì)象。堆由垃圾收集器自動(dòng)回收 , 堆區(qū)由各子線程共享使用。 堆的內(nèi)存空間既可以固定大小 , 也可以在運(yùn)行時(shí)動(dòng)態(tài)地調(diào)整。 2 元空間作用:存儲(chǔ)常量池、方法元信息、類元信息。字符串常量String存在堆內(nèi)存。3 虛擬機(jī)棧作用:描述JAVA方法執(zhí)行的內(nèi)存區(qū)域。方法調(diào)用到執(zhí)行完成~入棧到出棧的過(guò)程。棧頂?shù)膸Q為棧幀,正在執(zhí)行的方法稱為當(dāng)前方法,棧幀是方法運(yùn)行的基本結(jié)構(gòu)。StackOverflowError表示請(qǐng)求的棧溢出,內(nèi)存耗盡。 4 本地方法棧作用:虛擬機(jī)?!爸鲀?nèi) ”, 而本地方法?!爸魍狻薄1镜胤椒?Native 方法服務(wù)。本地方法可以通過(guò) JNI ( Java Native Int rface )來(lái)訪問(wèn)虛擬機(jī)運(yùn)行時(shí)的數(shù)據(jù)區(qū) ,甚至可以調(diào)用寄存器。 5 程序計(jì)數(shù)寄存器作用:CPU 只有把數(shù)據(jù)裝載到寄存器才能夠運(yùn)行。保證在多線程并發(fā)執(zhí)行過(guò)程中,保證分毫無(wú)差。每個(gè)線程在創(chuàng)建后,都會(huì)產(chǎn)生 自己的程序計(jì)數(shù)器和棧幀,程序計(jì)數(shù)器用來(lái)存放執(zhí)行指令的偏移量和行號(hào)指示器等。

5. 對(duì)象實(shí)例化

Java 是面向?qū)ο蟮撵o態(tài)強(qiáng)類型語(yǔ)言,根據(jù)某個(gè)類聲明一個(gè)引用變量指向被創(chuàng)建的對(duì)象。 問(wèn)題:在實(shí)例化對(duì)象的過(guò)程中,JVM會(huì)發(fā)生什么化學(xué)反應(yīng)?

5.1 從字節(jié)碼的進(jìn)行分析

1、NEW類加載 2、DUP棧頂復(fù)制引用變量 3、INVOKESPECIAL初始化

5.2 從執(zhí)行步驟的角度分析

1、確認(rèn)類元信息是否存在 2、分配對(duì)象內(nèi)存 3、設(shè)定默認(rèn)值 4、設(shè)置對(duì)象頭 5、執(zhí)行init方法

6. 垃圾回收

垃圾回收( Garbage Collection, GC )。垃圾回收的主要目的是清除不再使用的對(duì)象,自動(dòng)釋放內(nèi)存。

6.1 對(duì)象是否存活的標(biāo)準(zhǔn)

問(wèn)題:GC 是如何判斷對(duì)象是否可以被回收的呢?為了判斷對(duì)象是否存活 , JVM 引人了GC Roots。某個(gè)失去任何引用的對(duì)象,或者兩個(gè)互相環(huán)島狀循環(huán)引用的對(duì)象等,可以直接回收。 問(wèn)題:什么對(duì)象可以作為 GC Roots 呢?比如類靜態(tài)屬性中引用的對(duì)象、常量引用的對(duì)象、虛擬機(jī)棧中尋引用的對(duì)象、本地方法棧中引用的對(duì)象等。

6.2 垃圾回收的相關(guān)算法

“標(biāo)記-清除算法”。

該算法從GC Roots出發(fā),依次標(biāo)記有引用關(guān)系的對(duì)象,將沒(méi)有被標(biāo)記的對(duì)象清除。此算法會(huì)帶來(lái)大量的空間碎片,要分配較大連續(xù)空間容易出現(xiàn)FGC。

“標(biāo)記-整理算法”。

該算法從GC Roots出現(xiàn)標(biāo)記存活對(duì)象,然后將存活對(duì)象整理導(dǎo)內(nèi)存空間的一端,形成已使用的連續(xù)空間,最后把已使用空間外的部分全部清理掉。

“Mark-Copy算法”(主流YGC算法新生代垃圾回收)。也稱標(biāo)記-復(fù)制

為了并行地標(biāo)記和整理,將空間分為兩塊,每次只激活一塊。垃圾回收時(shí)只需要把存活對(duì)象復(fù)制到另一塊未激活空間,將未激活空間標(biāo)記為已激活,將已激活空間標(biāo)記為未激活,然后清除原空間對(duì)象,如此反復(fù)置換清除。每次只使用堆區(qū)一塊Eden區(qū)和Survior區(qū),減少了內(nèi)存空間的浪費(fèi)。

6.2 垃圾回收器

垃圾回收器( Garbage Collector )是實(shí)現(xiàn)垃圾回收算法并應(yīng)用在 JVM 環(huán)境中的內(nèi)存管理模塊 。

Serial 回收器

Serial 回收器是一個(gè)主要應(yīng)用于 YGC 的垃圾回收器,采用串行單線程的方式完成 GC 任務(wù)。其中"Stop The World"簡(jiǎn)稱STW,即垃圾回收的某個(gè)階段會(huì)暫停整個(gè)應(yīng)用程序的執(zhí)行。標(biāo)記-復(fù)制算法YGC

CMS 回收器

CMS 回收器 (Concurrent Mark Sweep Collector) 是回收停頓時(shí)間比較短、目前比較常用的垃圾回收器,采用"標(biāo)記-清除算法"。 通過(guò)初始標(biāo)記(Initial Mark) 、并發(fā)標(biāo)記(Concurrent Mark )、重新標(biāo)記(Remark)、并發(fā)清除(Concurrent Sweep)四個(gè)步驟完成垃圾回收工作。

G1回收器

Hotspot 在 JDK7 中 推出了新一代 G1 ( Garbage-First Garbage Collector ) 垃圾回收 ,通過(guò)去-XX:+UseG1GC參數(shù)啟用。G1采用"Mark-Copy算法"。 GI 將 Java 堆空間分割成了若干相同大小的 區(qū)域,即 region ,包括 Eden 、Survivor 、 Old 、 Humongous 四種類型。

7. JVM監(jiān)控工具

7.1 jconsole

Jconsole(Java Monitoring and Management Console)是從 java5 開(kāi)始,在 JD K中自帶的 java 監(jiān)控和管理控制臺(tái),用于對(duì) JVM 中內(nèi)存,線程和類等的監(jiān)控,是一個(gè)基于 JMX(java management extensions)的 GUI 性能監(jiān)測(cè)工具。

7.2 VisualVM

VisualVM(All-in-One Java Troubleshooting Tool)是功能最強(qiáng)大的運(yùn)行監(jiān)視和故障處理程序之一,曾經(jīng)在很長(zhǎng)一段時(shí)間內(nèi)是 Oracle 官方主力發(fā)展的虛擬機(jī)故障處理工具。

8. JVM 調(diào)優(yōu)選擇

8.1 選擇合適的垃圾回收器

CPU 單核:那么毫無(wú)疑問(wèn) Serial 垃圾收集器是你唯一的選擇;CPU 多核:關(guān)注吞吐量 ,那么選擇 PS+PO 組合;JDK8默認(rèn)CPU 多核:關(guān)注用戶停頓時(shí)間,JDK 版本 1.6 或者 1.7,那么選擇 CMS;CPU 多核:關(guān)注用戶停頓時(shí)間,JDK1.8 及以上,JVM 可用內(nèi)存 6G 以上,那么選擇 G1。

參數(shù)配置:

//設(shè)置Serial垃圾收集器(新生代)開(kāi)啟:-XX:+UseSerialGC//設(shè)置PS+PO,新生代使用功能Parallel Scavenge 老年代將會(huì)使用Parallel Old收集器開(kāi)啟 -XX:+UseParallelOldGC//CMS垃圾收集器(老年代)開(kāi)啟 -XX:+UseConcMarkSweepGC//設(shè)置G1垃圾收集器 開(kāi)啟 -XX:+UseG1GC

8.2 調(diào)整內(nèi)存大小

現(xiàn)象:垃圾收集頻率非常頻繁。 原因:如果內(nèi)存太小,就會(huì)導(dǎo)致頻繁的需要進(jìn)行垃圾收集才能釋放出足夠的空間來(lái)創(chuàng)建新的對(duì)象,所以增加堆內(nèi)存大小的效果是非常顯而易見(jiàn)的。 注意:如果垃圾收集次數(shù)非常頻繁,但是每次能回收的對(duì)象非常少,那么這個(gè)時(shí)候并非內(nèi)存太小,而可能是內(nèi)存泄露導(dǎo)致對(duì)象無(wú)法回收,從而造成頻繁 GC。 參數(shù)配置:

//設(shè)置堆初始值 指令1:-Xms2g 指令2:-XX:InitialHeapSize=2048m  //設(shè)置堆區(qū)最大值 指令1:`-Xmx2g`  指令2: -XX:MaxHeapSize=2048m  //新生代內(nèi)存配置 指令1:-Xmn512m 指令2:-XX:MaxNewSize=512m

8.3 設(shè)置符合預(yù)期的停頓時(shí)間

現(xiàn)象:程序間接性的卡頓 原因:如果沒(méi)有確切的停頓時(shí)間設(shè)定,垃圾收集器以吞吐量為主,那么垃圾收集時(shí)間就會(huì)不穩(wěn)定。 注意:不要設(shè)置不切實(shí)際的停頓時(shí)間,單次時(shí)間越短也意味著需要更多的 GC 次數(shù)才能回收完原有數(shù)量的垃圾. 參數(shù)配置:

//GC停頓時(shí)間,垃圾收集器會(huì)嘗試用各種手段達(dá)到這個(gè)時(shí)間 -XX:MaxGCPauseMillis

8.4 調(diào)整內(nèi)存區(qū)域大小比率

現(xiàn)象:某一個(gè)區(qū)域的GC頻繁,其他都正常。 原因:如果對(duì)應(yīng)區(qū)域空間不足,導(dǎo)致需要頻繁GC來(lái)釋放空間,在JVM堆內(nèi)存無(wú)法增加的情況下,可以調(diào)整對(duì)應(yīng)區(qū)域的大小比率。 注意:也許并非空間不足,而是因?yàn)閮?nèi)存泄造成內(nèi)存無(wú)法回收,從而導(dǎo)致 GC 頻繁。 參數(shù)配置:

//survivor區(qū)和Eden區(qū)大小比率 指令:-XX:SurvivorRatio=6  //S區(qū)和Eden區(qū)占新生代比率為1:6,兩個(gè)S區(qū)2:6  //新生代和老年代的占比 -XX:NewRatio=4  //表示新生代:老年代 = 1:4 即老年代占整個(gè)堆的4/5;默認(rèn)值=2

8.5 調(diào)整對(duì)象升老年代的年齡

現(xiàn)象:老年代頻繁 GC,每次回收的對(duì)象很多。 原因:如果升代年齡小,新生代的對(duì)象很快就進(jìn)入老年代了,導(dǎo)致老年代對(duì)象變多,而這些對(duì)象其實(shí)在隨后的很短時(shí)間內(nèi)就可以回收,這時(shí)候可以調(diào)整對(duì)象的升級(jí)代年齡,讓對(duì)象不那么容易進(jìn)入老年代解決老年代空間不足頻繁 GC 問(wèn)題。 注意:增加了年齡之后,這些對(duì)象在新生代的時(shí)間會(huì)變長(zhǎng)可能導(dǎo)致新生代的 GC 頻率增加,并且頻繁復(fù)制這些對(duì)象新生的 GC 時(shí)間也可能變長(zhǎng)。 配置參數(shù):

//進(jìn)入老年代最小的GC年齡,年輕代對(duì)象轉(zhuǎn)換為老年代對(duì)象最小年齡值,默認(rèn)值7 -XX:InitialTenuringThreshol=7

8.6 調(diào)整大對(duì)象的標(biāo)準(zhǔn)

現(xiàn)象:老年代頻繁 GC,每次回收的對(duì)象很多,而且單個(gè)對(duì)象的體積都比較大。 原因:如果大量的大對(duì)象直接分配到老年代,導(dǎo)致老年代容易被填滿而造成頻繁 GC,可設(shè)置對(duì)象直接進(jìn)入老年代的標(biāo)準(zhǔn)。 注意:這些大對(duì)象進(jìn)入新生代后可能會(huì)使新生代的 GC 頻率和時(shí)間增加。 配置參數(shù):

//新生代可容納的最大對(duì)象,大于則直接會(huì)分配到老年代,0代表沒(méi)有限制。  -XX:PretenureSizeThreshold=1000000

8.7 調(diào)整GC的觸發(fā)時(shí)機(jī)

現(xiàn)象:CMS,G1 經(jīng)常 Full GC,程序卡頓嚴(yán)重。 原因:G1 和 CMS 部分 GC 階段是并發(fā)進(jìn)行的,業(yè)務(wù)線程和垃圾收集線程一起工作,也就說(shuō)明垃圾收集的過(guò)程中業(yè)務(wù)線程會(huì)生成新的對(duì)象,所以在 GC 的時(shí)候需要預(yù)留一部分內(nèi)存空間來(lái)容納新產(chǎn)生的對(duì)象,如果這個(gè)時(shí)候內(nèi)存空間不足以容納新產(chǎn)生的對(duì)象,那么JVM就會(huì)停止并發(fā)收集暫停所有業(yè)務(wù)線程(STW)來(lái)保證垃圾收集的正常運(yùn)行。這個(gè)時(shí)候可以調(diào)整GC觸發(fā)的時(shí)機(jī)(比如在老年代占用 60% 就觸發(fā) GC),這樣就可以預(yù)留足夠的空間來(lái)讓業(yè)務(wù)線程創(chuàng)建的對(duì)象有足夠的空間分配。 注意:提早觸發(fā) GC 會(huì)增加老年代 GC 的頻率。 配置參數(shù):

//使用多少比例的老年代后開(kāi)始CMS收集,默認(rèn)是68%,如果頻繁發(fā)生SerialOld卡頓,應(yīng)該調(diào)小 -XX:CMSInitiatingOccupancyFraction  //G1混合垃圾回收周期中要包括的舊區(qū)域設(shè)置占用率閾值。默認(rèn)占用率為 65% -XX:G1MixedGCLiveThresholdPercent=65

8.8 調(diào)整 JVM本地內(nèi)存大小

現(xiàn)象:GC 的次數(shù)、時(shí)間和回收的對(duì)象都正常,堆內(nèi)存空間充足,但是報(bào) OOM 原因:JVM 除了堆內(nèi)存之外還有一塊堆外內(nèi)存,這片內(nèi)存也叫本地內(nèi)存,可是這塊內(nèi)存區(qū)域不足了并不會(huì)主動(dòng)觸發(fā) GC,只有在堆內(nèi)存區(qū)域觸發(fā)的時(shí)候順帶會(huì)把本地內(nèi)存回收了,而一旦本地內(nèi)存分配不足就會(huì)直接報(bào) OOM 異常。 注意:本地內(nèi)存異常的時(shí)候除了上面的現(xiàn)象之外,異常信息可能是 OutOfMemoryError:Direct buffer memory。解決方式除了調(diào)整本地內(nèi)存大小之外,也可以在出現(xiàn)此異常時(shí)進(jìn)行捕獲,手動(dòng)觸發(fā) GC(System.gc())。 配置參數(shù):

XX:MaxDirectMemorySize

9. JVM 調(diào)試實(shí)戰(zhàn)

為什么要調(diào)整JVM

JVM調(diào)優(yōu)背景

生產(chǎn)環(huán)境中的問(wèn)題 生產(chǎn)環(huán)境發(fā)生了內(nèi)存溢出該如何處理? 生產(chǎn)環(huán)境應(yīng)該給服務(wù)器分配多少內(nèi)存合適? 如何對(duì)垃圾回收器的性能進(jìn)行調(diào)優(yōu)? 生產(chǎn)環(huán)境 CPU 負(fù)載飆高該如何處理? 生產(chǎn)環(huán)境應(yīng)該給應(yīng)用分配多少線程合適? 不加 log,如何確定請(qǐng)求是否執(zhí)行了某一行代碼? 不加 log,如何實(shí)時(shí)查看某個(gè)方法的入?yún)⑴c返回值?

為什么要調(diào)優(yōu)

防止出現(xiàn) OOM解決 OOM減少 Full GC 出現(xiàn)的頻率

不同階段的考慮

上線前項(xiàng)目運(yùn)行階段線上出現(xiàn) OOM

JVM調(diào)優(yōu)方案

監(jiān)控的依據(jù)

運(yùn)行日志異常堆棧GC 日志線程快照堆轉(zhuǎn)儲(chǔ)快照

調(diào)優(yōu)的大方向

合理地編寫(xiě)代碼充分并合理的使用硬件資源合理地進(jìn)行 JVM 調(diào)優(yōu)

JVM性能優(yōu)化的步驟

第 1 步:性能監(jiān)控

GC 頻繁 cpu load 過(guò)高 OOM 內(nèi)存泄露 死鎖 程序響應(yīng)時(shí)間較長(zhǎng)

第 2 步:性能分析

打印 GC 日志,通過(guò) GCviewer 或者 Universal JVM GC analyzer - Java Garbage collection log analysis made easy 來(lái)分析異常信息 靈活運(yùn)用命令行工具、jstack、jmap、jinfo 等 dump 出堆文件,使用內(nèi)存分析工具分析文件 使用阿里 Arthas、jconsole、JVisualVM 來(lái)實(shí)時(shí)查看 JVM 狀態(tài) jstack 查看堆棧信息

第 3 步:性能調(diào)優(yōu)

適當(dāng)增加內(nèi)存,根據(jù)業(yè)務(wù)背景選擇垃圾回收器優(yōu)化代碼,控制內(nèi)存使用增加機(jī)器,分散節(jié)點(diǎn)壓力合理設(shè)置線程池線程數(shù)量使用中間件提高程序效率,比如緩存、消息隊(duì)列等其他……

性能評(píng)價(jià)/測(cè)試指標(biāo)

**1 停頓時(shí)間(或響應(yīng)時(shí)間):**提交請(qǐng)求和返回該請(qǐng)求的響應(yīng)之間使用的時(shí)間,一般比較關(guān)注平均響應(yīng)時(shí)間。常用操作的響應(yīng)時(shí)間列表:

2 垃圾回收環(huán)節(jié):

暫停時(shí)間:執(zhí)行垃圾收集時(shí),程序的工作線程被暫停的時(shí)間。-XX:MaxGCPauseMillis 表示每次GC最大的停頓毫秒

3 吞吐量

對(duì)單位時(shí)間內(nèi)完成的工作量(請(qǐng)求)的量度在 GC 中:運(yùn)行用戶代碼的事件占總運(yùn)行時(shí)間的比例(總運(yùn)行時(shí)間:程序的運(yùn)行時(shí)間+內(nèi)存回收的時(shí)間)吞吐量為 1-1/(1+n),其中-XX::GCTimeRatio=n

4 并發(fā)數(shù)

同一時(shí)刻,對(duì)服務(wù)器有實(shí)際交互的請(qǐng)求數(shù)

5 內(nèi)存占用

Java 堆區(qū)所占的內(nèi)存大小

6 相互間的關(guān)系

以高速公路通行狀況為例

吞吐量:每天通過(guò)高速公路收費(fèi)站的車輛的數(shù)據(jù)并發(fā)數(shù):高速公路上正在行駛的車輛的數(shù)目響應(yīng)時(shí)間:車速

9.1 網(wǎng)站流量瀏覽量暴增后,網(wǎng)站反應(yīng)頁(yè)面響很慢

1、問(wèn)題推測(cè):在測(cè)試環(huán)境測(cè)速度比較快,但是一到生產(chǎn)就變慢,所以推測(cè)可能是因?yàn)槔占瘜?dǎo)致的業(yè)務(wù)線程停頓。 2、定位:為了確認(rèn)推測(cè)的正確性,在線上通過(guò) jstat -gc 指令 看到 JVM 進(jìn)行 GC 次數(shù)頻率非常高,GC 所占用的時(shí)間非常長(zhǎng),所以基本推斷就是因?yàn)?GC 頻率非常高,所以導(dǎo)致業(yè)務(wù)線程經(jīng)常停頓,從而造成網(wǎng)頁(yè)反應(yīng)很慢。 3、解決方案:因?yàn)榫W(wǎng)頁(yè)訪問(wèn)量很高,所以對(duì)象創(chuàng)建速度非???,導(dǎo)致堆內(nèi)存容易填滿從而頻繁 GC,所以這里問(wèn)題在于新生代內(nèi)存太小,所以這里可以增加 JVM 內(nèi)存就行了,所以初步從原來(lái)的 2G 內(nèi)存增加到 16G 內(nèi)存。 4、第二個(gè)問(wèn)題:增加內(nèi)存后的確平常的請(qǐng)求比較快了,但是又出現(xiàn)了另外一個(gè)問(wèn)題,就是不定期的會(huì)間斷性的卡頓,而且單次卡頓的時(shí)間要比之前要長(zhǎng)很多。 5、問(wèn)題推測(cè):之前的優(yōu)化加大了內(nèi)存,所以推測(cè)可能是因?yàn)閮?nèi)存加大了,從而導(dǎo)致單次 GC 的時(shí)間變長(zhǎng)從而導(dǎo)致間接性的卡頓。 6、定位:還是通過(guò) jstat -gc 指令 查看到 的確 FGC 次數(shù)并不是很高,但是花費(fèi)在 FGC 上的時(shí)間是非常高的,根據(jù) GC 日志 查看到單次 FGC 的時(shí)間有達(dá)到幾十秒的。 7、解決方案:因?yàn)?JVM 默認(rèn)使用的是 PS+PO 的組合,PS+PO 垃圾標(biāo)記和收集階段都是 STW,所以內(nèi)存加大了之后,需要進(jìn)行垃圾回收的時(shí)間就變長(zhǎng)了,所以這里要想避免單次 GC 時(shí)間過(guò)長(zhǎng),所以需要更換并發(fā)類的收集器,因?yàn)楫?dāng)前的 JDK 版本為 1.7,所以最后選擇 CMS 垃圾收集器,根據(jù)之前垃圾收集情況設(shè)置了一個(gè)預(yù)期的停頓的時(shí)間,上線后網(wǎng)站再也沒(méi)有了卡頓問(wèn)題。

9.2 后臺(tái)導(dǎo)出數(shù)據(jù)引發(fā)的 OOM

問(wèn)題描述:公司的后臺(tái)系統(tǒng),偶發(fā)性的引發(fā) OOM 異常,堆內(nèi)存溢出。 1、因?yàn)槭桥及l(fā)性的,所以第一次簡(jiǎn)單的認(rèn)為就是堆內(nèi)存不足導(dǎo)致,所以單方面的加大了堆內(nèi)存從 4G 調(diào)整到 8G。 2、但是問(wèn)題依然沒(méi)有解決,只能從堆內(nèi)存信息下手,通過(guò)開(kāi)啟了 -XX:+HeapDumpOnOutOfMemoryError 參數(shù) 獲得堆內(nèi)存的 dump 文件。 3、VisualVM 對(duì)堆 dump 文件進(jìn)行分析,通過(guò) VisualVM 查看到占用內(nèi)存最大的對(duì)象是 String 對(duì)象,本來(lái)想跟蹤著 String 對(duì)象找到其引用的地方,但 dump 文件太大,跟蹤進(jìn)去的時(shí)候總是卡死,而 String 對(duì)象占用比較多也比較正常,最開(kāi)始也沒(méi)有認(rèn)定就是這里的問(wèn)題,于是就從線程信息里面找突破點(diǎn)。 4、通過(guò)線程進(jìn)行分析,先找到了幾個(gè)正在運(yùn)行的業(yè)務(wù)線程,然后逐一跟進(jìn)業(yè)務(wù)線程看了下代碼,發(fā)現(xiàn)有個(gè)引起我注意的方法,導(dǎo)出訂單信息。 5、因?yàn)橛唵涡畔?dǎo)出這個(gè)方法可能會(huì)有幾萬(wàn)的數(shù)據(jù)量,首先要從數(shù)據(jù)庫(kù)里面查詢出來(lái)訂單信息,然后把訂單信息生成 excel,這個(gè)過(guò)程會(huì)產(chǎn)生大量的 String 對(duì)象。 6、為了驗(yàn)證自己的猜想,于是準(zhǔn)備登錄后臺(tái)去測(cè)試下,結(jié)果在測(cè)試的過(guò)程中發(fā)現(xiàn)到處訂單的按鈕前端居然沒(méi)有做點(diǎn)擊后按鈕置灰交互事件,結(jié)果按鈕可以一直點(diǎn),因?yàn)閷?dǎo)出訂單數(shù)據(jù)本來(lái)就非常慢,使用的人員可能發(fā)現(xiàn)點(diǎn)擊后很久后頁(yè)面都沒(méi)反應(yīng),結(jié)果就一直點(diǎn),結(jié)果就大量的請(qǐng)求進(jìn)入到后臺(tái),堆內(nèi)存產(chǎn)生了大量的訂單對(duì)象和 EXCEL 對(duì)象,而且方法執(zhí)行非常慢,導(dǎo)致這一段時(shí)間內(nèi)這些對(duì)象都無(wú)法被回收,所以最終導(dǎo)致內(nèi)存溢出。 7、知道了問(wèn)題就容易解決了,最終沒(méi)有調(diào)整任何 JVM 參數(shù),只是在前端的導(dǎo)出訂單按鈕上加上了置灰狀態(tài),等后端響應(yīng)之后按鈕才可以進(jìn)行點(diǎn)擊,然后減少了查詢訂單信息的非必要字段來(lái)減少生成對(duì)象的體積,然后問(wèn)題就解決了。

9.3 Window JVM調(diào)優(yōu)

查詢JDK所用虛擬機(jī)

java version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)//支持 Java 8, 使用的是 Oracle 的64位HotSpot虛擬機(jī)。//HotSpot VM 是 OracleJDK / SunJDK 以及 OpenJDK 里的 JVM 實(shí)現(xiàn)。使用最廣泛,JDK默認(rèn)安裝的。

Java問(wèn)題診斷和排查工具(查看JVM參數(shù)、內(nèi)存使用情況及分析等)

常用查詢命令

JPS (打印Java進(jìn)程信息)

使用場(chǎng)景 : 查看當(dāng)前機(jī)器的所有Java進(jìn)程信息(可追蹤到應(yīng)用進(jìn)程ID 、啟動(dòng)類名、文件路徑。)。jps 顯示當(dāng)前所有java進(jìn)程pid的命令jps -v 輸出傳遞給JVM的參數(shù)

jstack(JVM線程信息監(jiān)控)

使用場(chǎng)景: 查看JVM線程信息 和生成線程快照。jstack pid 主要用于生成指定進(jìn)程當(dāng)前時(shí)刻的線程快照,線程快照是當(dāng)前java虛擬機(jī)每一條線程正在執(zhí)行的方法堆棧的集合。分析線程棧

Jmap(JVM內(nèi)存占用信息和快照)

使用場(chǎng)景: 監(jiān)控堆內(nèi)存使用情況和對(duì)象占用情況, 生成堆內(nèi)存快照文件,查看堆內(nèi)存區(qū)域配置信息。**jmap **打印指定java進(jìn)程的共享對(duì)象內(nèi)存映射或堆內(nèi)存細(xì)節(jié)。堆Dump是反映堆使用情況的內(nèi)存鏡像,其中主要包括系統(tǒng)信息、虛擬機(jī)屬性、完整的線程Dump、所有類和對(duì)象的狀態(tài)等。

**jmap pid **共享對(duì)象的起始地址、映射大小、共享對(duì)象路徑的全程。 jmap -heap pid:查看堆使用情況jmap -histo pid:查看堆中對(duì)象數(shù)量和大小

Jstat (JVM內(nèi)存信息統(tǒng)計(jì))

使用場(chǎng)景 :用于查看各個(gè)功能和區(qū)域的統(tǒng)計(jì)信息(如:類加載、編譯相關(guān)信息統(tǒng)計(jì),各個(gè)內(nèi)存區(qū)域GC概況和統(tǒng)計(jì))jstat-gc pid: 統(tǒng)計(jì)垃圾回收堆的行為

Jinfo(JVM參數(shù)查看和修改)

使用場(chǎng)景: 查看和調(diào)整JVM啟動(dòng)和運(yùn)行參數(shù)。

Jinfo pid 查看JVM整個(gè)系統(tǒng)參數(shù)信息jinfo -flag [參數(shù)名] pid 查看某個(gè)具體參數(shù)jinfo -flag啟動(dòng)某個(gè)配置

java查詢JVM配置參數(shù)

查詢JVM配置參數(shù)java -XX:+PrintCommandLineFlags

C:\Program Files\Java\jdk1.8.0_91\bin>java -XX:+PrintCommandLineFlags-XX:InitialHeapSize=199690240  //初始堆大小bytes 這里23M-XX:MaxHeapSize=3195043840     //最大堆大小bytes 這里380M-XX:+PrintCommandLineFlags     //PrintCommandLineFlags 是打印那些被新值覆蓋的項(xiàng)-XX:+UseCompressedClassPointers //UseCompressedClassPointers:類指針壓縮-XX:+UseCompressedOops //UseCompressedOops:普通對(duì)象指針壓縮-XX:-UseLargePagesIndividualAllocation //關(guān)閉減少處理器 TLB 緩存壓力的技術(shù)-XX:+UseParallelGC //設(shè)置并行收集器 “Parallel Scavenge” + "Parallel Old"組合

查詢JVM配置參數(shù)java -XX:+PrintFlagsFinal -version |FINDSTR /i “:”

C:\Program Files\Java\jdk1.8.0_91\bin>java -XX:+PrintFlagsFinal -version |FINDSTR /i ":"    intx CICompilerCount                          := 3                                   {product}    uintx InitialHeapSize                          := 201326592 //初始堆大小bytes                          {product}    uintx MaxHeapSize                              := 3196059648 //最大堆大小bytes                         {product}    uintx MaxNewSize                               := 1065353216 //新生代分配內(nèi)存最大上限,小于-Xmx的值;                         {product}    uintx MinHeapDeltaBytes                        := 524288 //要擴(kuò)容或者縮容最小擴(kuò)/縮多少                             {product}    uintx NewSize                                  := 67108864  //新生代初始內(nèi)存的大小,應(yīng)該小于-Xms的值;                         {product}    uintx OldSize                                  := 134217728  //老年代的默認(rèn)大小                         {product}     bool PrintFlagsFinal                          := true //打印所有的默認(rèn)參數(shù)設(shè)置                             {product}     bool UseCompressedClassPointers               := true                                {lp64_product}     bool UseCompressedOops                        := true                                {lp64_product}     bool UseLargePagesIndividualAllocation        := false                               {pd product}     bool UseParallelGC                            := true                                {product}java version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b14)Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

配置Windows JVM參數(shù)

1、系統(tǒng)環(huán)境中配置(推薦)

虛擬機(jī)內(nèi)存的大小除了在web容器中設(shè)置,我們還可以通過(guò)系統(tǒng)環(huán)境變量來(lái)設(shè)置,下面看看設(shè)置步驟: 打開(kāi)windows系統(tǒng)環(huán)境變量,在系統(tǒng)變量中,新建變量JAVA_OPTS,值設(shè)置為:

8G物理內(nèi)存JVM虛擬機(jī)配置idea優(yōu)化命令-XX:+UseG1GC -XX:+UseStringDeduplication -XX:MaxGCPauseMillis=95 -Xms5120m -Xmx5120m -Xmn1024m -Xss128k -XX:MaxTenuringThreshold=0jdk8 使用G1垃圾回收器-XX:-UseParallelGC -Xms3550m -Xmx3550m -Xmn1024m -Xss128k -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+UseStringDeduplication -XX:MaxGCPauseMillis=95     -XX:NewRatio=4         -XX:SurvivorRatio=4             -XX:MatespaceSize=6

優(yōu)化前啟動(dòng)優(yōu)化前jmeter測(cè)試

優(yōu)化后啟動(dòng)優(yōu)化后jmeter測(cè)試

jvm中常用的參數(shù)含義:

每個(gè)對(duì)象都有一個(gè)計(jì)數(shù)器,每次YGC 都會(huì)加1,配置計(jì)數(shù)器的值到達(dá)某個(gè)闡值的時(shí)候, 對(duì)象從 新生代晉升至老年。 -XX:MaxTenuringThreshold

為功能點(diǎn)比較多,在運(yùn)行過(guò)程中,要不斷動(dòng)態(tài)加載很多的類,經(jīng)常出現(xiàn)致命錯(cuò)誤。為了解決該問(wèn)題, 需要設(shè)定運(yùn)行參數(shù) -XX: MaxPermSize= 1280m ,

以給NM 設(shè)置運(yùn)行參數(shù)讓JVM 遇到OOM 異常時(shí)能輸出堆內(nèi)信息。 -XX:+HeapDumpOnOutOfMemoryError

1: -Xmx指定 jvm 的最大內(nèi)存大小 , 如 :-Xmx=2048M(根據(jù)設(shè)備物理內(nèi)存以及實(shí)際情況設(shè)定,建議為物理內(nèi)存的80%) 2: -Xms指定 jvm 的初始內(nèi)存大小 , 如 :-Xms=2048M, 高并發(fā)應(yīng)用, 建議和-Xmx一樣, 防止因?yàn)閮?nèi)存收縮/突然增大帶來(lái)的性能影響. 3: -Xmn指定 jvm 中 New Generation (堆空間的新生代空間)的大小 , 如 :-Xmn=256m。 這個(gè)參數(shù)很影響性能, 如果你的程序需要比較多的臨時(shí)內(nèi)存, 建議設(shè)置到512M, 如果用的少, 盡量降低這個(gè)數(shù)值, 一般來(lái)說(shuō)128/256足以使用了。 4: -XX:PermSize (java7,java8移除)指定 jvm 中 Perm Generation (永久存儲(chǔ)區(qū))的最小值 , 如 :-XX:PermSize=32m。 這個(gè)參數(shù)需要看你的實(shí)際情況??梢酝ㄟ^(guò)jmap 命令看看到底需要多少。 5: -XX:MaxPermSize(java7,java8移除)指定 Perm Generation 的最大值 , 如 :-XX:MaxPermSize=64m 6: -Xss指定線程桟大小 , 如 :-Xss=128k, 一般來(lái)說(shuō),webx框架下的應(yīng)用需要256K。 如果程序中有大規(guī)模的遞歸行為,請(qǐng)考慮設(shè)置到512K/1M。 這個(gè)需要全面的測(cè)試才能知道。 不過(guò),256K已經(jīng)很大了。 這個(gè)參數(shù)對(duì)性能的影響比較大的。 7:-XX:MatespaceSize(java8)和-XX:MatespaceSize(java8)JVM加載類的時(shí)候,需要記錄類的元數(shù)據(jù),這些數(shù)據(jù)會(huì)保存在一個(gè)單獨(dú)的內(nèi)存區(qū)域內(nèi),在Java 7里,這個(gè)空間被稱為永久代(Permgen),在Java 8里,使用元空間(Metaspace)代替了永久代。由于調(diào)整元空間的大小需要Full GC,這是非常昂貴的操作,如果應(yīng)用在啟動(dòng)的時(shí)候發(fā)生大量Full GC,通常都是由于永久代或元空間發(fā)生了大小調(diào)整,基于這種情況一般建議在JVM參數(shù)中將MetaspaceSize和MaxMetaspaceSize設(shè)置成一樣的值,并設(shè)置得比初始值要大,對(duì)于8G物理內(nèi)存的機(jī)器來(lái)說(shuō),一般我會(huì)將這兩個(gè)值都設(shè)置為512M。

2、使用命令配置

java命令配置

8G物理內(nèi)存JVM虛擬機(jī)配置java -XX:+UseG1GC-Xms3550m -Xmx3550m -Xmn1024m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MatespaceSize=512m -XX:MaxMetaspaceSize=512m -XX:MaxTenuringThreshold=0

使用 -Xms 設(shè)置堆的初始空間大小 java -Xms20m -Xmx30m GCDemo

JVM 提供了參數(shù) -Xmn 來(lái)設(shè)置年輕代內(nèi)存的大小 java -Xms20m -Xmn10M GCDemo

使用 -XX:SurvivorRatio 這個(gè)參數(shù),該參數(shù)設(shè)置 eden / from 空間的比例關(guān)系 -XX:SurvivorRatio = eden/from = eden/to java -Xms20m -Xmn10M -XX:SurvivorRatio=2 -XX:+PrintGCDetails GCDemo

永久代(JDK1.7)所加載的類信息都放在永久代中。用 -XX:PermSize 設(shè)置永久代初始大小,用 -XX:MaxPermSize 設(shè)置永久代最大大小。 java -XX:PermSize=10m -XX:MaxPermSize=50m -XX:+PrintGCDetails GCDemo

元空間(JDK1.8)在 JDK1.8 之時(shí),永久代被移除,取而代之的是元空間 java -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=50m -XX:+PrintGCDetails GCDemo

棧空間是每個(gè)線程各自有的一塊區(qū)域,如果??臻g太小,也會(huì)導(dǎo)致 StackOverFlow 異常。而要設(shè)置??臻g大小,只需要使用 -Xss 參數(shù)就可以。 java -Xss2m GCDemo

在 JVM 中還有一塊內(nèi)存,它獨(dú)立于 JVM 的堆內(nèi)存,它就是:直接內(nèi)存。 java -XX:MaxDirectMemorySize=50m GCDemo

實(shí)時(shí)修改JVM參數(shù):jinfo -flag name = value PID 如果要對(duì)參數(shù)進(jìn)行實(shí)時(shí)調(diào)整:則需要看到參數(shù)后面有manageable的才能被實(shí)時(shí)調(diào)整

9.4 Linux JVM調(diào)優(yōu)

基本同windows,只是命令上大同小異。 使用命令配置

8G物理內(nèi)存JVM虛擬機(jī)配置java -XX:+UseG1GC-Xms3550m -Xmx3550m -Xmn1024m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MatespaceSize=512m -XX:MaxMetaspaceSize=512m -XX:MaxTenuringThreshold=0

參考鏈接

jmeter

https://cloud.tencent.com/developer/article/1633626 https://blog.csdn.net/wust_lh/article/details/86095924 https://blog.csdn.net/qq_37453279/article/details/107990659 https://zhuanlan.zhihu.com/p/142897766

獲取jvm日志

https://blog.csdn.net/zlzlei/article/details/46471627 https://blog.csdn.net/S1124654/article/details/125467265 https://www.jianshu.com/p/0167a0fc8063 [https://zhuanlan.zhihu.com/p/355765061[https://blog.csdn.net/qq_35925558/article/details/116464460

jvm監(jiān)控調(diào)優(yōu)關(guān)注參數(shù)指標(biāo)

[https://blog.csdn.net/weixin_41605937/article/details/121704836https://blog.csdn.net/weixin_43935927/article/details/109233111 [https://zhuanlan.zhihu.com/p/269597178[https://zhuanlan.zhihu.com/p/267381560

jvm調(diào)優(yōu)

https://blog.csdn.net/augsm/article/details/109272205 https://tianweichang.blog.csdn.net/article/details/109712806 https://heapdump.cn/ https://mp.weixin.qq.com/s?__biz=MzkwNjMwMTgzMQ==&mid=2247495919&idx=1&sn=71010d91e376270afc31bbe61c8326aa&chksm=c0e82807f79fa111d7c339832f48c9542d5fc1540c1a619c1a3281040fc1631616e016d0dc36&mpshare=1&scene=23&srcid=0630pKVRvfxq3GMy1Oa2Wxda&sharer_sharetime=1656582521218&sharer_shareid=4b447a3cb6ab5d3443a5fc9771951705#rd https://www.cnblogs.com/z-sm/p/6745375.html https://www.cnblogs.com/zhi-leaf/p/10629033.html https://blog.csdn.net/weixin_43474695/article/details/108248756

https://blog.csdn.net/weixin_28864057/article/details/119661743 https://blog.csdn.net/qq_40902067/article/details/106003880

idea中設(shè)置JVM參數(shù)

https://zhuanlan.zhihu.com/p/117627812

Java自定義類加載器

https://blog.csdn.net/weixin_42759726/article/details/114030153

查詢JVM配置參數(shù)分析參考

https://blog.csdn.net/m0_45406092/article/details/110766297 https://www.cnblogs.com/milton/p/6134251.html https://blog.csdn.net/qq13933506749/article/details/120187991 https://www.cnblogs.com/yidaixiaohui/p/10216180.html

JVM關(guān)鍵參數(shù)

https://www.cnblogs.com/bapiera/p/13592525.html https://www.cnblogs.com/GtShare/p/9767768.html https://jishuin.proginn.com/p/763bfbd66a1c https://blog.csdn.net/a469517790/article/details/104916916 https://blog.csdn.net/a469517790/article/details/104916916 https://blog.csdn.net/m0_45406092/article/details/110766297

JVM參數(shù)之堆棧空間配置

https://blog.csdn.net/qq_40902067/article/details/106003880 https://blog.csdn.net/weixin_28864057/article/details/119661743

JDK8使用G1無(wú)效

https://blog.csdn.net/weixin_42629445/article/details/120717860 https://bbs.huaweicloud.com/blogs/247828 https://www.jianshu.com/p/7dd309cc3442 https://www.cnblogs.com/frankyou/p/15048531.html https://blog.csdn.net/Megustas_JJC/article/details/105470675 https://zhuanlan.zhihu.com/p/458098236

java程序輸出jvm參數(shù)

https://blog.csdn.net/sjl110/article/details/41516745

JDK1.8默認(rèn)垃圾回收器

https://blog.csdn.net/qq_27500493/article/details/108063108

JVM垃圾收集器【Serial、ParNew、PS、CMS、Serial Old、PO、G1】總結(jié)

https://blog.csdn.net/qq_43661709/article/details/122793803

windows配置jVM

https://blog.csdn.net/qq_38776582/article/details/109738067 https://blog.csdn.net/mhqyr422/article/details/79691042

責(zé)任編輯:

標(biāo)簽:

相關(guān)推薦:

精彩放送:

新聞聚焦
Top 精品麻豆国产综合在线9| caoporn97超碰| 欧洲码亚洲码一区二区三区四区| 东京热tokyo黑人系列| 精品少妇在线观看视频| 久久免费视频精品8| 亚洲91精选一区二区在线| 17c日韩在线观看| 午夜激情片免费在线观看| 91福利在线观看免费| v888av精品少妇| 午夜两性操一操在线观看嗯嗯啊| 少妇张开腿让我爽了一夜视频| 日本久久久久久久久人妻视频| 白丝高中生被靠操在观看| 蜜桃少妇视频在线观看| JK白丝喷白嫩嫩久久久| 国产一区二区三区黄片欧美| 2017夜夜操天天操| 亚洲欧美久久精品免费| 免费观看亚洲女同性恋一区二区| 久亚洲aⅴ一区二区三区写真| 熟女人妻 在线观看| 日韩人妻熟妇精品xxx| 日日夜夜精品视频观看| 日本老熟女人体艺术| 成人区人妻精品一区二区不卡蜜臀| 日韩欧美精品熟妇视频播放| 蜜臀av在线观看一区| 色婷婷综合久久精品一区二区三区| 粗大挺进朋友人妻身体里国产| 亚洲精品日韩中文久久91| 国产婷婷色三区二区一区| 男女上下差差发哈插插插| 人妻少妇精品视中文字幕国语| 夜夜撸夜夜干夜夜操| 国产av国片精品jk制服| 日本欧美黄色网站免费| 亚洲国产长腿丝袜av天堂| 青青操一区二区三区| 老太熟妇乱淫aaaaa片免费| 亚洲av高清一区二区三区色| 韩国三级国产精品一区| 色yeye香蕉人妻凹凸一区二区| 少妇花园流浆嗯嗯张开视频| 中文在线天堂中文在线天堂| 亚洲mv在线免费观看| 亚洲精品一区二区三区av| 天天爽天天爽免费视频| 最近最新中文字幕资源在线| 黄色av网址免费观看| 欧美亚洲污视频网站| 成人自拍在线观看视频| 日本xxxxx久久| 成年免费毛片视频不卡| 日本 高清 中文字幕| 亚洲欧洲日韩av专区| 最新日韩成人av电影| 欧美精品视频一卡二卡| 91九色国产自拍视频| 男生殖器插女生殖器视频欧美| 中文字幕乱码精品一区二区三区| 国产大女露脸自拍大叫| 污污污的视频免费在线观看 | 国产精品视频综合一区二区| 亚洲午夜在线亚洲午夜在线| 亚洲国产精品va在线观看香蕉| 好大好粗好爽好黄c黄片| 亚洲成电影在线观看青青| 91九色在线视频入口| 韩国美女视频在线观看18+| 国产97日韩在线观看| 久久久精品欧美一区二| 日韩黄色a影视在线免费观看网站| 国产午夜在线观看不卡| 嗯嗯呐插进来嘛吸奶| 日韩毛片免费视频观看| 成人专区禁18处网站| 亚洲综合一区二区在线视频| 男女裸交无套啪啪激情高潮| 亚洲av狠狠的爱一区二区| 精品少妇人妻大乳av| 成人av在线国产精品| 超级黄的有肉视频在线观看| 91中文日韩免费精品| 性色av一区二区三区咪爱四| 懂色av蜜臀av绯色| 乱色熟女综合一区二区三区四| 一区二区三区麻豆蜜桃视频| 人妻性奴隶免费观看| 熟女人妻av完整一区二区三区| 一区二区啪视频在线观看| 亚洲日韩色欧另类欧美色吊丝| 日韩激情小说在线播放| chinese熟女熟妇1老熟妇| 精品少妇人妻大乳av| 国产精品自产拍在线观| 真人一级一97片成人片| 国产精品国产自产拍在线| 亚洲欧美另类离制服丝袜| 欧美大香蕉一区二区三区| 中文字幕在线精品的视频| 久久精品亚洲一区二区三| 免费精产国品一二三产区区大学生| 国产婷婷色三区二区一区| 亚洲av乱码国产精品观看麻豆| 人妻一区二区三区中文字幕免费| 蜜桃精品噜噜噜av| 在线视频在线观看你懂的| 日日夜夜精品视频观看| 色五月婷婷综合国产在线 | 漂亮人妻久久被公侵犯| 麻豆传媒视频区一区二| 久久精品乱码中文字幕| 欧美在线中文字幕第一页| 婷婷热re99久久精品国产| 中文字幕不卡在线视频极品| 台湾性dvd性色av| 欧美大香蕉一区二区三区| 77777色婷婷av一区二区三| 亚洲情色成人一二三区| 免费精产国品一二三产区区大学生| 久久精品乱码中文字幕| 国产又粗又猛又大爽又黄香借| 五十六十日本老熟妇牲| 国产又黄又高潮又a的视频| 182tv免费福利中文字幕| 天天干天天日少妇网| 日本在线观看公司入口视频| 男人的天堂在线免费av | 樱桃国产成人精品视频| 天天干天天操天天射天天日| 亚洲天堂中文字幕手机在线| 17c日韩在线观看| 91tsav人妻国产| 国产美女视频网久久69| 黄色古装操逼小视频| 在线精品亚洲欧美日韩| 欧美日韩高清无毒不卡| 国产 欧美 五月 激情| 91免费一区二区久久| 99精品国产中文字幕| 欧美精品色呦呦首页| 天天摸天天舔天天透| 国产av剧情网址大全| 2017夜夜操天天操| 九一欧洲国产无码在线| 欧美午夜免费福利视频| 精品人妻熟女a62v久久| 一级黄色片特级黄色片| 日本一区二区伦理在线观看| 欧美国产亚洲自拍偷拍| 中文字幕久久久aⅴ大片| 超碰在线97观看国产| 亚洲熟女乱色综合小说| 日本最新区免费中文字幕| 秋霞网av一区二区三区中文字幕| 亚洲一区二区婷婷久久| 最近中文字幕版2019日本 | 国产午夜精华视频在线| 亚洲区欧美区自拍偷拍区| av精品一区二区三区免费观看| 77字幕网77中文字幕| 天天干天天做天天摸| 黑人中出日本人妻系列| 成人欧美久久久久美婷婷| 中文字幕中文字幕一区三区| 床戏高潮呻吟声片段大全| 五月天久草亚洲香蕉| 9999国产精品免费| 女友97年白嫩漂亮在线看| 天天插天天射天天日天天干| 国产精品视频自拍一区| 美女叉开腿让男人桶视频| 综合日韩人妻一区二区三区| 动漫卡通一区二区三区| 伊人网av在线观看| 操死你 骚货 视色| 天天干人人干天天操| 啪啪啪在线免费视频| 77字幕网77中文字幕| 日韩av在线免费观看中文字幕| 午夜国产精品福利一二| 免费精品国产人妻国语| 欧美图区一区二区三区| 国产亚洲高清在线观看| 加勒比久久综合久久678| av天堂中文版www在线| 日本亚洲美女视频一区| 日日躁夜夜躁狠狠躁av蜜臀| 在线视频播放免费网站| 日韩激情小说在线播放| 日本道高清免费在线视频| 91精选一区二区三区四区| 91麻豆天美精东蜜桃专区| 国产精品久久久久久电| 欧美一区二区三区视频在线观看| 免费av在线亚洲精品| 国产视频在线观看一区二区极品| 97超碰人人澡香蕉| 伊人国产精品成人在线| av自拍偷拍一区二区| 亚洲熟女资源一区二区| 日本jizzjizz少妇| 老熟妇乱一区二区三区| 亚洲清纯国产com| 一区二区三区视频直播| 国产不卡剧情在线观看| 人人妻,人人干,在线| 亚洲中文有码字幕青青| 人妻出轨av中文字幕| 欧洲老妇人一区二区三区| 日本最新区免费中文字幕| 青青操在线超碰传媒| 久久香蕉欧美日韩av蜜桃| 韩国女主播一区二区福利视频| 91九色成人原创视频| 中文字幕激情亚洲精品| 人妻 日韩 制服 中文 在线| 日韩不卡免费一区二区三区视频| 91综合久久久久久久久久久| a区精品视频在线观看| 超碰青青草原免费在线观看97| 国产av一区二区最新精品| 东京热tokyo黑人系列| 18免费1000视频国产| 欧美码一二三区线观看| 老熟妇乱一区二区三区| 亚洲国产长腿丝袜av天堂| youjizzcom精品少妇| 少妇张开腿让我爽了一夜视频| 精品国产一区二区三区欧美精品| 玩弄放荡人妻少妇免费视频| 九色视频在线观看网址| 美女扒开腿让男人桶网站 | 欧美国产一区二区三区| 色少妇精品一区二区三区网站| 中文乱码在线观看一区| 几把操女的逼喷水视频| 小少妇久久久久久久| 狼人 成人 综合 亚洲| 免费在线视频 中文字幕| 色视频网在线视频观看| 免费午夜在线看福利片| 东京不太热在线观看视频| 亚洲中文精品第一页| 亚洲精品日韩中文久久91| 17c久久精品国产亚洲av蜜柚| 日韩黄色a影视在线免费观看网站| 熟女俱乐部五十路 六十路| 国产加勒比精品蜜臀在线观看 | 白丝骚逼美女被操到逼水直流| 国产精品免费手机在线观看| 欧美日韩激情图片视频另类| 亚洲精品一区二区三区av| 精品在线观看一区二区视频| 激情91久久婷婷综合| 99热精品夜夜爽伊人| v888av精品少妇| 91日本av在线观看| 四季亚洲中文专区av| 午夜久久在线观看视频| 国内人妻自拍视频在线| 男女裸交无套啪啪激情高潮| 床戏高潮呻吟声片段大全| 最新日韩成人av电影| 亚洲午夜短视频在线| av制服国产丝袜黑丝网站| 亚洲天堂aaa一区二区| 大胸美女黄网站色片大全亚洲| 91:久久久久久久久久| 免费av在线亚洲精品| 国产黄色片在线观看网站| 性美女毛片久久a区| 中文字幕 亚洲轻轻av| 国产欧美亚洲精品第一页青草| 91热精品视频在线播放| 玩弄放荡人妻少妇免费视频| 538精品视频国产| 小岳母在线观看完整版| 色姑娘天天干天天操| 高潮少妇高潮久久精品99| 日韩一级片黄色av| 国产精品网在线观看| 欧美日本一区二区三区精品| 可以免费直接观看的av| 在线观看视频一区二区精品| 天天看天天舔天天摸| 国产精品8888在线观看| 2021国产麻豆剧传媒精品入口| a在线观看免费久不卡精品| 亚洲码和欧洲码的尺码| 亚洲一区二区嗯好爽快点| 亚洲欧美另类离制服丝袜| 韩国美女视频在线观看18+| 色丁香国产精品综合久久| 国内老熟妇精品露脸视频| 亚洲va欧美va人人爽2| 人妻少妇资源网av| 成人教育av在线网站| 欧美老熟妇乱子伦视频在线观看| 大伊香蕉精品一区视频在线| 天天日天天草天天插| 2017在线免费观看中文a| 三级视频欧美视频亚洲视频| 国产精品蜜臀在线观看| av熟女乱一区二区三区| 加勒比人妻av系列专区| 91免费福利视频专区| 亚洲美女啪啪邪恶视频| 粗大挺进朋友人妻身体里国产| 国产精品视频中文无码| 亚洲第一中文视频 | 亚洲av免费观看网站在线观看| 各种玩小处雌女视频| 又粗又硬又黄又色的| 国产亚洲精品视频久久久| 久久久精品欧美一区二| 亚洲第一中文视频 | 美女和猛男诱惑操逼捅鸡鸡| 可以在线观看的av网站| 色综合天天综合网天天狠天| 中文字幕亚洲精品八区| 欧美亚洲自拍偷拍xxx| 弄爽新婚人妻第五部美妙人妻 | 日韩黄色a影视在线免费观看网站| 久久人人妻人人做人人爽涩爱| 在线观看国产区一区二| 色婷亚洲五月在线观看| 日本乱理三级在线观影视频| 国产黄片一区在线观看| 欧美三级不卡不毒视频| 黄片激情视频国产免费| 国内在线精品视频在线观看| 亚洲欧美清纯另类图片小说| 中文亚洲字幕国产剧情| 91久久久久久久蜜桃| 成年永久免费播放平台| 一级av中文字幕在线观看| 夜夜撸夜夜干夜夜操| 大胸美女黄网站色片大全亚洲 | 成人涩涩小片视频日本| 免费一级特黄特色黄录像| 精品久久久免费av| 韩国的黄萝卜是怎么腌制的| 国内亚洲一区二区视频| 91最新资源在线观看| 老窝鸭av一区二区三区| 日韩一二三区免费播放视频| 男人的天堂av成人网| 亚洲影视精品一区二区| 中文字幕_第1页_绿茶av| 91久久人澡人妻天天做天天爽| 最新久久久久久久久久久| 日韩精品性色一区二区在线观看| 中文字幕人妻不卡久久| 免费观看在线黄色大片| 激情91久久婷婷综合| 美女被鸡操黄片入口| 91九色免费在线观看| 在线观看欧美日一区二区 | 成人在线视频日韩国产| 自拍偷拍亚洲色图经典三级| 97人妻人人爱人人澡人人爽| 人妻少妇麻豆中文字幕久久精品| 97人妻少妇熟女av| 老太熟妇乱淫aaaaa片免费| 91九色黑丝长腿美女| 日本jizzjizz少妇| 午夜天堂网在线观看资源网站| 亚洲激情四射在线观看视频| 50岁老熟女高潮喷水了| 操骚逼啊啊啊叫一区二区三区| 91热精品视频在线播放| 国产精品免费视频22| ntr人妻セックス在线| 中文字幕99精品一区| 国产午夜精品一区二区不| av一区二区在线播放色婷婷精品| 午夜小视频免费在线| 大香蕉久久久久久久久| 91精品久久久久久久99蜜臀| 国产婷婷色三区二区一区| 毛片中文aaa五月天| 把鸡鸡伸进去的视频| 污污污的视频免费在线观看| 午夜小视频免费在线| 中文字幕在线观看观看av? | 欧美日韩中文国产一区| 性色av不卡一区二区三区| 啪啪啪啪一区二区三区四区三级片| 日本 高清 中文字幕| 国产呻吟揉丰满一区三六区| 天堂久久精品无码一区二区| 在线人妻中文av导航| 色丁香国产精品综合久久| 精品黄色一级久久久久久久久 | 在线不卡无毒你懂得| 色尼玛图片亚洲综合| 午夜激情片免费在线观看| 国产97精品在线免费看| 麻豆免费成人小视频| 黑人中出日本人妻系列| 日本不卡视频免费播放| 激情啪啪理论片中文字幕| 11yyy国产成人综合在线观看| 自拍偷拍在线福利视频| 亚洲一点不卡福利视频| 日韩一区=区三区四区| 免费国产一区二区三区在线播放| 91在线观看青青超碰| 亚洲69视频在线观看| 日本久久久久久久久人妻视频| 综合日韩人妻一区二区三区| 国产午夜在线观看不卡| 国产最好看的特效大片av| 人妻色噜噜噜噜一区二区| 日本伦精品一区二区三区免费| 天天爱天天插天天射| 91精品视频在线观看999| 宝贝腿开大点我添添公漫画| 成年女女子免费视频播放| 国产大女露脸自拍大叫| 天天操,天天射,天天日| 富婆按摩高潮一区二区三区91| 免费看日本特黄特色| 日韩激情又爽aaaaa级| 日本在线观看公司入口视频| 人妻熟女中文字幕电影| av色综合久久天堂av…| 亚洲91精选一区二区在线| 动漫黄网站在线观看| 欧美午夜免费福利视频| 精品色欲久久久青青青人人爽| 吃大咪咪操骚逼高清视频| 欧美一级特黄大片做受日本| 亚洲 欧美 日韩 另类在线| 久久热高清在线观看| 免费午夜在线看福利片| 大伊香蕉精品一区视频在线| 久亚洲aⅴ一区二区三区写真| 日本不卡视频免费播放| 北岛玲精品一区二区三| 麻豆免费成人小视频| 2017夜夜操天天操| 亚洲精品午夜福利久久| 无翼乌18禁本子全彩无遮| 天天操日日干夜夜操| 色五月婷婷综合国产在线| 中文字幕在线观看操穴视频| 亚洲av乱码一区二区三区观影| 粉嫩玉足夹茎视频在线看| 看国产剧的免费软件| 日韩av专场一区二区| 男插女下面真人视频| 熟女视频一区二区在线观看| 色少妇精品一区二区三区网站| 人妻少妇精品视频在线观看| 99久久精品岛国免费黄色网| 玩弄饥渴放荡美熟妇岳| 日本亚洲综合伊人久久| 欧美猛少妇色xxxxxhd| 凹凸视频这里只有精品| 欧美区一区一区三区| 特黄把女人弄爽又大又粗| 国产精品久久久久久无码不卡| 久久热免费在线观看视频| 中文字幕在线观看观看av?| 五月激情网激情五月| 在线精品亚洲欧美日韩| 国产97日韩在线观看| 国产在线免费av观看| 国产99热这里有精品| 熟女人妻av完整一区二区三区| 密臂av性久久久久蜜臂av| 亚洲视频资源在线播放| 韩国美女主播福利在线| 亚洲 欧美 日韩 另类在线| 欧美三级不卡在线播放 | 亚洲久久久久久久久| jizz成人在线视频| 色少妇精品一区二区三区网站| 免费可以看黄页的视频| 99久久热只有国产精品| 最近最新高清欧美日韩中文字幕| 99在线只有精品视频| 国产免费午夜精品视频| 亚洲精品午夜福利久久| 人妻视频在线免费观看| 天堂免费av在线播放| 欧美在线中文字幕第一页| 欧美日韩精品亚洲欧美| 国产一级久久久久高清版| 7799精品视频免费观看| 北条麻妃超碰av在线播放| 九色视频在线观看网址| 啪啪啪啪啪啪啪在线观看| 美女和猛男诱惑操逼捅鸡鸡 | 精品人妻人人做人碰人人爽| 午夜无码精品一区二区三区 | 看全黄大黄大色大片美女| 免费av在线亚洲精品| 精品久久久久久无码中文野结衣 | 漂亮人妻久久被公侵犯| 小岳母在线观看完整版| 美女厕所撒尿偷拍视频| 漂亮人妻视频免费在线播放| 91精品丝袜人妻久久久久久| 精品亚洲国产亚洲国产| 91久久久久久久蜜桃| 男人的j插进女人的逼| 日韩不卡免费一区二区三区视频 | 亚洲人妻无吗中文字幕| 免费看亚洲av的网站| 国产寡妇又爽又紧又湿视频| 91精品国产在热久久| 少妇视频播放在线播放免费观看| 亚洲综合精品天堂丁香芒果| 欧美成人免费观看在线看| 中文字幕超碰18区| 91在线精品一区二区毛片| 最近2019日本中文字幕| 鲁久久无码五月天有码| 精品麻豆国产综合在线9| 中文字幕乱码人妻在线观看| 欧美一区二区三区视频在线观看 | 色尼玛图片亚洲综合| 九一欧洲国产无码在线| 最近2019日本中文字幕| 国产三级中文字幕av| 久久久亚洲av成人网人人| 日本熟妇三十熟女精品区| 亚洲国产成人久久无码| 蜜臀久久99精品久久久久久久久| 蜜臀国产精品久久久久久| 天天透天天插天天日| 午夜福利92一区二区三区久久| 亚洲免费不卡一区二区三区| 在线视频 中文字幕 一区二区| 天天操日日干夜夜射| 好紧好湿好爽好大A视频| 欧美日韩精品亚洲欧美| 国产美女视频网久久69| 99精品国产免费电影| 色尼玛图片亚洲综合| 日本黄色录像第1部播放器播放| 国产加勒比高清无码在线视频| 成人中文字幕在线高清| 免费国产一区二区三区在线播放| 午夜dj在线观看完整版| 91久久久久久久蜜桃| 黄色的视频黑丝网站| 大逼小逼操大屌视频| 无码丝袜人妻高跟鞋| 狠狠操狠狠操狠狠搞| 三级大尺度无码视频| 天天草天天日天天舔| 黄色小网站在线免费观看| youjizzcom精品少妇| 草莓视频精品在线观看| 美女精品一区二区三区| 中国黄页毛片免费视频| 大香蕉在线福利导航| 字幕人妻一区二区视频| 亚洲男人天堂2025| 人人爱精品人人艹人人干| 日韩人妻少妇av电影| 日本久道久久综合狠狠老| 日韩少妇中文字幕一区| 大香蕉国产手机在线观看| 中文字幕日韩一二区| 中文字幕久久久aⅴ大片| 中文字幕 亚洲轻轻av| 男女又黄又刺激a片免费| 卡通动漫中文字幕在线观看| 94老司机福利社精品视频| 中文字幕一区二区三区人妻| 色视频在线观看在线| 操骚逼啊啊啊叫一区二区三区| 蜜臀国产精品久久久久久| 成人污视频在线免费观看网址| 人成免费视频一区二区三区| 色视频在线观看在线| 日韩午夜小视频合集| 青青草手机免费在线视频| gogo大尺度二区三区| 欧美美女色视频免费看| 亚洲大胆综合在线观看| 一卡二卡成人久久精品| 亚洲日韩色欧另类欧美色吊丝| 无码丝袜人妻高跟鞋| 91激情视频在线视频| 99久热精品视频在线播放| 日本老熟女人体艺术| 日本国产精品第一页久久| 亚洲人成网站在线播放| 国产精品久久久免费99| 一级av中文字幕在线观看| 国产午夜精品在线播放| 国产精品国产三级区别第一集 | 国产精品久久性欧美| 啪啪啪啪啪啪啪啪啪日本| xxxxxx日本少妇| 97se狠狠狠狠狼鲁亚洲综合色| 看全黄大黄大色大片美女| 日日日日日日日夜夜夜夜夜| 最新69视频在线观看| 亚洲av永久无码精品尤物| 秋霞网av一区二区三区中文字幕| 日本丰满老熟妇bbw| 久久久久免费特级黄片| 人妻女教师的沦陷大明| 国产精品国三级国产av无密码| 日本精品一区二区三区四区| 污污污的视频免费在线观看| 综合日韩人妻一区二区三区| 日本少妇不卡狠狠狠| 久久人人添人人爽添人人片va| 无码丝袜人妻高跟鞋| 亚洲人成在线1国产盗拍| 黄色片在线免费观看日韩不卡| 一区二区三区四区蜜桃在线| 久久精品日产第一区二区三区| 日韩人妻少妇av电影| 男女啪啪自拍露脸视频| 国产91色婷婷手机在线| 女人的小鸡鸡真人免费视频 | 日韩在线网站一区二区三区| 国产婷婷综合丁香亚洲欧洲| 啪啪啪在线观看免费视频| 国产一区二区精品调教| 91激情视频在线视频| 中文字幕+乱码+中文| 日本国产福利视频在线观看| 视频一区二区亚洲欧美| 久久久国产亚洲精品黑人| 午夜激情片免费在线观看| 亚洲熟女少妇 精品| 色综合天天综合网天天狠天| 黄色的视频黑丝网站| 好色av一区二区三区四区| 欧美图区一区二区三区| 日韩美女av电影网| 国产精品福利视频资源| 国产福利一区二区三区久久久| 午夜天堂网在线观看资源网站| 啪啪啪啪一区二区三区四区三级片| 国产亚洲精品久久久久久电影| 精品国产成人在线免费| 自拍偷拍亚洲色图经典三级| 亚洲av狠狠的爱一区二区 | 国产日日夜夜精品视频免费| av色伊人久久综合一区二区| 日本99精品一区二区三区| 免费在线观看不卡高清av| 免费一级特黄特色大片88av| 欧美黄色网黄色欧美网| 色婷婷综合欧美日韩亚洲| 超碰国产极品尤物在线| 国产免费观看av在线| 99999精品视频在线观看| 国产高新无码在线观看| 91九色porny蝌蚪主页| 瑟瑟免费在线观看视频| 欧美成人免费观看在线看| 69久久夜色精品国产69| 日韩中文字幕一级乱码在线亚洲| 国内老熟妇精品露脸视频| 91精品一区二区三区蜜桃| 男男小视频在线观看| 国产精品自拍视频网站| 水蜜桃在线视频一区二区三区| 午夜福利无码一区二区三区| 熟妇人妻一区二区三区| 2020最新中文字幕在线| 国产婷婷综合丁香亚洲欧洲| 蜜臀av在线地址一地址二| 色老汉av一区二区三区| jizz成人在线视频| 人妻欲求不满作品番号| 朴妮唛无删减福利在线观看| 亚洲地址一区二区三区四区| 三级黄色在线播放网站| 91精品久久久久久久免费看| 国产精品v欧美精品v亚洲精品| 天天操日日干夜夜射| 成人专区禁18处网站| 亚洲欧美久久精品免费| 日本a v中文字幕网| japanese国产在线播放| 中文字幕一区二区三区人妻| 好好的日com中文视频| 日韩午夜福利三级经典| 丰满女人的毛片久久久久久| 日韩精品视频啊啊啊| 美女穿白丝被啪啪到高潮| 亚洲一区二区三区在线直播 | 免费看日本特黄特色| 国产精品免费观看91| 好色av一区二区三区四区| 偷拍亚洲图片欧美另类| 久久古典武侠第1页777| 国产成人自拍在线播放| 国产男女激情视频一区| 熟女国产一区二区三区| 精品熟妇丰满人妻视频| 中文字幕丰满人妻fsdss| 鲁久久无码五月天有码| 清纯国模自拍视频在线观看| 国产亚洲av网址大全| 中年美熟妇与少年的激情| 好色av一区二区三区四区| 大逼小逼操大屌视频| 日韩激情小说在线播放| 日本人妻偷人妻中文字幕| 美女摸自己下面出白浆的视频| 强d乱码中文字幕熟女导航 | 伊人网av在线观看| 丝袜 制服 国产 欧美 日韩| 一本久道久久综合狠狠躁| 亚洲av蜜臀在线观看| 狠狠躁夜夜躁人人爽天天BL| 国产精品福利视频资源| 日韩毛片在线观看网站| 熟妇人妻二区桃色av| 国产一区二区三区黄片欧美| 国产成年无码av片在线| 丝袜美腿一区二区三区jk| 玩弄人妻少妇精品视频在线| 免费看亚洲av的网站| 国产 精品 日韩 人妻| 91久久人澡人妻天天做天天爽| gogo大尺度二区三区| 亚洲制服丝袜日韩欧美制服| 中文字幕亚洲天堂av在线| 五月开心六月伊人色婷婷| 日本激情床震无遮掩视频| 欧美欧美欧美欧美欧美欧美| 亚洲av熟女av熟女| 国产精选黄片免费观看| 夜夜撸夜夜干夜夜操| 亚洲夫妻另类在线视频| 亚洲天堂av在线免费看| 天天日,天天干,天天舔| 欧美日韩中文国产一区| 18禁止看免费120秒试看| 国产女人AAA级久久久级| 午夜激情片免费在线观看| 色综合天天综合高清网国产在线| 日本二区三区精品免费| 美女被插免费视频网站| 老头插进去好多水'视频| 亚洲av丝袜诱惑在线| 成人教育av在线网站| 裸体一区二区三区av| 宝贝腿开大点我添添公漫画| 91青青青青艹视频在线观看| 97国产精品人人爽人人做| 在线精品亚洲欧美日韩| 欧美亚洲变态另类在线观看| 一区二区三区日韩高清| 亚洲国产成人久久无码| 中文视频久久在线观看| 精品久久久免费av| 777精品久久久久久久| 凹凸视频这里只有精品| 精品一区二区三区别视频| 国产高清 国产av| 中文在线播放一区二区三区| 影音先锋婷婷五月青青草视频在线| 在线观看成人欧美一区| 少妇高潮一区二区三区在线| 蜜臀国产精品久久久久久| 国产交换乱淫99视频| 九九re热这里只有精品视频| 九色91在线只有精品| 自拍偷拍 欧美亚洲| 熟女人妻伊人蜜桃视频| 182tv免费福利中文字幕| 黑人巨大欧美一区二区视频| 婷婷热re99久久精品国产 | 青青草手机免费在线视频| japanese国产在线播放| 免费在线视频 中文字幕| 久久与久久最新视频| 青青色在线视频精品观看| 男女边摸边吃奶边做视频免费看 | 亚洲影视精品一区二区| 9l视频自拍蝌蚪9l成人熟妇| 91在线视频免费亚洲| 精品suv一区二区33| 午夜精品久久十八禁| 好大好粗好爽好黄c黄片| 国产精品久久久久久电 | 亚洲av 综合一区| 中文字幕少妇av一区二区三区| 免费一级特黄特色大片88av| 91精品免费在线播放| 久操高清在线免费视频| 丝袜美腿av一区二区| av自拍偷拍一区二区| 国产精品久久久久久电| 中文字幕成熟丰满人妻| 日韩一区=区三区四区| 网友自拍+人妻丝袜+制服诱惑| 啪啪啪啪啪啪啪啪啪日本 | 日本精品一区二区三区四区| 中文字幕在线aⅴ免费观看| 亚洲欧美码免费观看视频| 国产小视频在线播放| 成年人午夜网站在线播放| 午夜激情片免费在线观看| 欧美精品视频一卡二卡| 国产在线观看av专区| av亚洲天堂中文字幕| 77字幕网77中文字幕| 熟女成人国产精品视频| 欧美视频一区二区三区三州| 欧美裸体xxxxx极品少妇| 粉嫩玉足夹茎视频在线看| 国产一区二区三区黄片欧美| 大香蕉在线福利导航| 蜜臀久久99精品久久久久久久久| 漂亮人妻口爆深喉免费视频| 老窝鸭av一区二区三区| 性色蜜月av一区二区三区| 国产亚洲av网址大全| 久操高清在线免费视频| 91精品免费在线播放| 无码伊人久久大杳蕉中文无码| 人人爽人人爽人人妻| 一区二区啪视频在线观看| 少妇厨房激情做爰欧美| xxxxxx日本少妇| 狠狠综合久久亚洲av蜜臀| 精品久久久中文字幕熟女| 成年人免费视频网站在线播放| 亚洲欧美激情人妻人妻综合| 韩国女主播一区二区福利视频| 大香蕉免费在线伊人| 四房波波-五月天-四房波波| 亚洲在线视频一区二区| 99精品午夜一区二区三区| 最近2019日本中文字幕| 亚洲大胆综合在线观看| 狠狠干在线视频观看| 91黄色大全免费观看| 中文乱码在线观看一区| 男人把女人桶到爽午夜视频| 欧洲码亚洲码一区二区三区四区| 啊!用力操我!好爽| 久久精品乱码中文字幕| 蜜桃系列一区二区观看| 亚洲国产自拍偷拍精品| 亚洲美女福利视频免费| 17c久久精品国产亚洲av蜜柚| 日韩一级黄色片免费在线观看| 国产精品v欧美精品v亚洲精品| 91午夜免费在线视频| 亚洲在线中文字幕av| 2021国产麻豆剧传媒精品入口| 一本v亚洲v天堂一区二区| 日产精品免费一区二区三区| 蜜臀av在线地址一地址二| 国产原创成人激情在线| 青青草大伊视频免费观看| 精品久久久免费av| 黄片激情视频国产免费| 国产剧情传媒av在线| 国产一级二级三级在线看| 国产成年无码av片在线| 91九色在线视频入口| 国产亚洲精品视频久久久| 弄爽新婚人妻第五部美妙人妻| 久久香蕉欧美日韩av蜜桃| 久久精品亚洲一区二区三| 人妻欧美制服中文字幕| 老鸭窝最新在线视频| 精品久久久中文字幕熟女| 天天日天天操天天干天天舔天天射 | 偷怕自拍在线免费观看| 日韩少妇中文字幕一区| 偷怕自拍在线免费观看| 视频在线免费观看97| 国产一级二级三级在线看| 人妻熟妇中文字幕免费视频| 粉嫩玉足夹茎视频在线看| 午夜精品婷婷午夜精品| 一区二区三区精品久久人妻| 自拍偷拍国产欧美精品| 看全黄大黄大色大片美女| 天天摸天天天天日少妇av| 91高清免费在线播放| 亚洲和黑人特黄色片| 欧美老熟妇乱子伦视频在线观看| 国产熟女福利资源导航| ntr人妻セックス在线| a区精品视频在线观看| 自拍偷拍 欧美亚洲| 久久香蕉欧美日韩av蜜桃| 99精品在线免费观看| 亚洲激情四射在线观看视频| 久久久精品欧美一区二| 久操高清在线免费视频| 91精品久久久久久久99蜜臀| 最近免费中文字幕日韩| 一级毛片试看三分钟| 77字幕网77中文字幕| 999精品欧美一区二区三区黑人| 三级大尺度无码视频| 色偷偷东京热男人的天堂| 丰满熟妇人妻一区二区三区| 黄免费在线观看视频| 中国男人肏女人大屄的视频| 99热在线这里只有精品| 亚洲天堂av成人在线观看| 91精品综合一区二区三区| 亚洲久久久久久久久| 男生和女生哪个更色| 国产精品国产三级区别第一集 | 久久精品乱码中文字幕| 日本熟妇三十熟女精品区| 无套内谢少妇一二三四| 538精品新视频在线观看| 网友自拍+人妻丝袜+制服诱惑| 亚洲免费不卡一区二区三区| 国产美女精品久久久有奶水 | 成年人免费视频网站在线播放| 99国产精品视频播放| 熟女人妻视频观看一区二区三区 | 强d乱码中文字幕熟女导航| 91手机免费在线视频| 999精品欧美一区二区三区黑人| 亚洲91精选一区二区在线| 熟女人妻视频观看一区二区三区| 在线观看国产剧情av| 欧美精品色呦呦首页| 四十路の五十路熟女网址| av亚洲欧美一区二区| 亚洲人成网站在线播放| 成年视频短视频在线播放| 男人天堂中文字幕av| 粗大挺进朋友人妻身体里国产| 日本少妇一二三视频| 精品suv一区二区33| 男女啪啪自拍露脸视频| 91激情视频在线视频| 国产成年女人在线观看| 9久久久久久久久久久| 熟女老骚91porn九色| 在线观看成人欧美一区| 日本少妇一二三视频| 国产精品永久免费在线网站观看| 凹凸视频这里只有精品| 亚洲第一中文视频 | 午夜小视频 在线观看| 青青国产的视频在线播放| 丰满的人妻免费在线观看| 日韩精品视频网站免费观看| 精品中文字幕高清久久久久三级| 全国av一卡二卡三卡免费| 黄色av网址免费观看| 国产最好看的特效大片av| 日本国产一区二区精品| 日本成人av在线免费看| 久久久精品欧美一区二| 日韩亚洲中文在线视频| 9色porny人妻| 色综合天天综合网天天狠天| 综合日韩人妻一区二区三区| 黄色片在线免费观看日韩不卡| 大香蕉免费在线伊人| 91九色p精品久久久| 中文字幕 亚洲轻轻av| 亚洲国产自拍偷拍精品| 国产大屁股影音在线播放| 大伊香蕉精品一区视频在线| 欧美区一区一区三区| 7799精品视频免费观看| 最新国产剧情在线一区| 欧美日韩高清无毒不卡| 99在线只有精品视频| 国产乱人伦Av在线麻豆A| 免费可以看黄页的视频| 天天日天天草天天插| 亚洲va欧美va国产综合久久| 四季av在线一区二区三区| 欧美码一二三区线观看| 成人午夜福利视频镇东影视| 男人午夜视频在线观看| 青青草毛片在线观看| 久久精品aⅴ无码中文字字幕蜜桃| 日韩亚洲欧美中文在线电影| 日日夜夜精品视频观看| 亚洲国产成人久久无码| av在线免费观看一区| 无翼乌18禁本子全彩无遮| av自拍偷拍一区二区| 三级视频欧美视频亚洲视频| 久久人人添人人爽添人人片va| av精品一区二区三区免费观看| 免费在线观看成人激情视频| 131美女午夜免费视频| 亚洲地址一区二区三区四区 | 富婆按摩高潮一区二区三区91| 黄色小网站在线免费观看| 91精品久久久久久久免费看| 国产女人AAA级久久久级| 男女视频一区在线观看| 日本午夜色视频在线观看| 伊人激情综合视频网| 中文字幕99精品一区| 亚洲av在线观看久久久| 视频在线免费观看97| 丰满熟妇人妻一区二区三区| 欧美 国产 一区二区三区| 日日日日日日日夜夜夜夜夜| 国产最好看的特效大片av| 爱妃视频av一区二区| 3p人妻一区二区三区| 亚洲av综合在线观看免费| 三级大尺度无码视频| 三级视频欧美视频亚洲视频| 色偷偷东京热男人的天堂| 91久久久久久久电影| 182tv免费福利中文字幕| 国产一级久久久久高清版| 亚洲中字幕日产AV片在线| 亚洲码欧洲码在线观看| 亚洲激情四射在线观看视频| 久久久国产亚洲精品黑人| 最新黄色天堂av在线资源| 中文字字幕在线中文乱码2019| 999精品欧美一区二区三区黑人| 国产亚洲精品久久久久久电影| 亚洲精品视频在线99| 中文字幕在线精品的视频| 男人的天堂av成人网| 成年大片免费视频播放二级| 男生殖器插女生殖器视频欧美| 日本欧美视频免费观看| 一区二区三区水蜜桃视频| 亚洲 欧美 日韩 另类在线| 亚洲一级中文字黄色片| 欧美国产一级在线免费观看| 午夜激情片免费在线观看| 亚洲情色欧美日韩在线| 国产一区二区三区在线资源| 自拍偷拍 欧美亚洲| 亚洲地址一区二区三区四区| 蜜桃视频app网站入口| 四季亚洲中文专区av| 男女啪啪自拍露脸视频| 久久ri精品诱惑日韩| 亚洲风情 国内自拍av| 久久热高清在线观看| 韩国美女视频在线观看18+| 日本a v中文字幕网| 亲爱的请你原谅我 中文字幕| 老太熟妇乱淫aaaaa片免费| 综合日韩人妻一区二区三区| 中文字幕中文字幕一区三区| 亚洲无码免费一二三区视频| 国产精品剧情在线视频| 动漫黄网站在线观看| 99久久国产综合精品五月天| 五月婷婷丁香中文字幕亚洲一区| 中文字幕亚洲精品八区| 丰满熟妇xxxx性久久久| 一区二区三区精品久久人妻| 综合日韩人妻一区二区三区| 免费一级特黄特色大片88av| 丰满人妻一区二区三区免费视频棣| 另类激情国产专区在线观看免费| 中文字幕福利在线观看| 久久热免费在线观看视频| 爱毛片在线成人免费看| 青青青久免费在线视频| 偷拍亚洲图片欧美另类| 几把操女的逼喷水视频| 久操高清在线免费视频| 全国最大成人 中文字幕| 91网在线视频中文字幕| 少妇性感美女一区二区三区四区| 精品一区二区三区别视频| 九色porny蝌蚪少妇| 中年美熟妇与少年的激情| 欧美精品色呦呦首页| 中文字幕av不卡一区二区| 亚洲欧洲久久av日日更新| 天堂av2025一区| 国产在线精品免费视频| 少妇喷水视频在线观看| 日韩精品视频啊啊啊| 精品少妇人妻av免费麻豆| 日本激情内射一区二区三区| 欧美色视频日本片免费看| 99久久99久久综合| 91九色在线视频入口| 免费高清视频亚洲熟女| 五十六十日本老熟妇牲| 日本在线观看公司入口视频| 国产加勒比高清无码在线视频| 天天透天天插天天日| 三级大尺度无码视频| 中年美熟妇与少年的激情| 五月婷婷六月久久久| 天天操日日干夜夜操| 91久久人澡人妻天天做天天爽| 在线播放三级黄色日韩av| 亚洲最大av无码国产网址| 国产福利一区二区三区久久久 | 亚洲天堂av在线免费看| 亚洲视频资源在线播放| 粉嫩玉足夹茎视频在线看| 国产一级特黄aaa片做受小说| 床戏高潮呻吟声片段大全| 91精品丝袜久久久| 国产手机av免费在线看片不卡| 麻豆免费成人小视频| 国产亚洲av网址大全| 91精品视频在线观看999| 国产精品免费观看91| 人妻在线一区二区三区| 黄片网址在线观看视频| 国产+精品+在线观看| 欲求不满的邻居人妻一区二区三区| 国产91色婷婷手机在线| 国产午夜精品1区2区3区| 欧美美女色视频免费看| 999精品视频免费看| av一区二区在线播放色婷婷精品| 777爽死你无码免费看一二区 | 国产55夜色66夜色男人的天堂| 狠狠色丁香久久综合频道日韩| 欧美亚洲国产第一二区| 久久久久久久亚洲精品中文| 台湾性dvd性色av| 色 小说 激情 图片| 狠狠操视频在线免费观看| 午夜久久在线观看视频| 激情91久久婷婷综合| 国内亚洲一区二区视频| 男人操女人逼视频免费| 在线观看免费的黄色片| 精品少妇人妻大乳av| 精品99久久久久久久久| 在线播放__91色| 在线观看欧美日一区二区 | 中文字幕亚洲精品八区| 18视频在线免费播放| 黑人久久一区二区三区| 91popny熟女九色| 香蕉视频免费看国产精品| 亚洲 欧美视频在线| 50岁熟女乱综合一区二区| 国产在线免费av观看| 欧美丝袜办公室在线91| 日本黄站一区二区在线观看| 日本一区二区三区成人| 色情按摩XXXXXX视频| 男人插女人逼视频播放| 亚洲欧洲视频一二三区| 最新国产剧情在线一区| 99久久久久久久久96久久| 欧美黑人一级性视频| 人妻少妇精品视中文字幕国语| 免费在线观看不卡高清av| 一级少妇精品久久久久| 亚国产亚洲亚洲精品视频| 国产在线av免费观看| 中文字幕第一区高清av| 国产亚洲精品免费观看| 亚洲 欧美视频在线| 亚洲的国产中文字幕的av| 大香蕉伊人久久在线观看| 亚洲欧美激情人妻人妻综合| 91精品青草福利久久午夜| 麻豆免费成人小视频| 黄色片在线免费观看日韩不卡| 久久综合精品五月天| 日韩一级高清免费播放| 日本少妇的秘密视频| 色婷婷综合久久精品一区二区三区| 免费在线观看不卡高清av| 青娱乐休闲在线观看视频| 一区二区三区精品久久人妻| 中文字幕乱码精品一区二区三区| 91桃色午夜福利视频| 天天玩天天摸天天舔| 欧美视频免费在线看| 四季av在线一区二区三区| 中文字幕亚洲专区婷婷| 人妻天天爽夜夜爽2区蜜a∨| 日韩中文字幕一级乱码在线亚洲| 免费一级特黄特色黄录像| 欧美亚洲另类综合网| 国产精选黄片免费观看| 天堂av在线一区少妇| 国产+精品+在线观看| 青青草手机免费在线视频 | 91精品久久一区二区| 男人天堂中文字幕av| 国产日日夜夜精品视频免费| 久久97久久97免视看| 性色蜜月av一区二区三区| 国产99热这里有精品| 一色桃子av人妻熟女完整版| 五月婷婷丁香中文字幕亚洲一区| 爱毛片在线成人免费看| 天天日天天爱天天玩| 人妻人妻干干干干人妻网站| 日本太黄视频免费看| 人妻 日韩 欧美 综合 制服| 老鸭窝最新在线视频| 老窝鸭av一区二区三区| 亚洲无码免费一二三区视频| 免费在线一区二区视频| 99热在线都是精品免费| 国产三级在线一区二区三区| 亚洲清纯国产com| 日本a v中文字幕网| 男人天堂中文字幕av| 精品人妻一二三区更新| 精品黄色一级久久久久久久久| 三级视频欧美视频亚洲视频| 亚洲综合网男人的天堂| 91福利在线观看免费| 青青操一区二区三区| 女友97年白嫩漂亮在线看| 国产精品一线二线三区| 91超碰在线免费播放| 欧美三级不卡在线播放 | 亚洲一区在线观看完整版| 国产午夜精品在线播放| 欧美亚洲日产国产综合| 中国精品视频在线观看一区二区| 几把操女的逼喷水视频| www人妻一区二区| 亚洲图片av伦理三级| 精品suv一区二区33| 亚洲激情四射在线观看视频| 亚洲国产精品日韩综合网| 亚洲情色欧美日韩在线| av一区二区在线播放色婷婷精品| 欧美日韩高清无毒不卡| 色综合天天综合网天天狠天| 日本成人av在线免费看| 2021国产麻豆剧传媒精品入口| 久久久久久久毛片5| 亚洲精品乱码久久久久99| 老窝鸭av一区二区三区| 亚洲午夜在线亚洲午夜在线| aaa夜夜夜精品视频| 男生捅女生逼的免费视频软件| 欧美一区二区三不卡| 51成人看片免费软件| 揉老熟女老熟妇aaa| 在线观看免费a级电影| 亚洲mv在线免费观看| 91超碰在线播放视频| 成人av影视一区二区三区 | 日本 高清 中文字幕| xxxxxx日本少妇| JK白丝喷白嫩嫩久久久| 青青操在线超碰传媒| av中文字幕巨乳人妻| 一级特黄夫妻生活大片| 色屁屁一区二区三区视频国产| 亚洲国产成人精品久久久久久久久| 亚洲av日韩美aⅴ| 亚洲欧美激情人妻人妻综合| 爱毛片在线成人免费看| 熟女人妻av完整一区二区三区| 国产精品久久久久久一级精品| 欧美国产一区二区三区在线看| 亚洲国产成人一区二区久久久| 一级毛片试看三分钟| 趣夜视频在线免费观看| 97国产精品人人爽人人做| 欧美一点不卡视频在线观看| 亚洲av综合在线观看免费| 少妇人妻系列500视频| 一级黄色片特级黄色片| 在线观看麻豆免费视频| 青青草原精品资源站| 国产精品亚洲精品久| 日韩中文av在线观看| 亚洲熟女乱色综合小说| 亚洲 自拍 色综合图区av网站| 17c久久精品国产亚洲av蜜柚| 成年人在线观看福利视频| 午夜欧美熟妇综合在线视频| 四季av在线一区二区三区| 国产老妇女免费视频| 中文字幕av不卡一区二区| 97超碰人人澡香蕉| 国产精品一级片免费看| 亚洲短视频自拍偷拍| 91九色国产自拍视频| 国内在线精品视频在线观看| 青青日常在线免费观看| 日本成年人大片免费观看| 美女福利在线观看视频| 男女上下差差发哈插插插| 欲求不满的邻居人妻一区二区三区| 91av在线网址观看| 日韩精品性色一区二区在线观看| 中文在线天堂中文在线天堂| 午夜高清在线观看免费| 日韩 欧美 在线 第一页| 少妇厨房激情做爰欧美| jizz成人在线视频| 麻豆精品传媒在线播放| 国产老妇女免费视频| 少妇被无套内谢免费观看| 在线亚洲视频免费看| 粗大挺进朋友人妻身体里国产 | 成人自拍在线观看视频| huangse网站免费观看| 中文字幕人妻不卡久久| 亚洲无码免费一二三区视频| 男人的j插进女人的逼| 国产美女精品久久久有奶水| 中文字幕少妇av一区二区三区| 7799精品视频免费观看 | 欧美大香蕉一区二区三区| 亲爱的请你原谅我 中文字幕| 日韩精品视频啊啊啊| v888av精品少妇| 大香蕉久久久久久久久| 国产一区二区三区黄片欧美| 9l视频自拍九色9l视频不卡| 日本一区二区三区成人| 精品黄色一级久久久久久久久 | 91九色成人原创视频| 国产91色婷婷手机在线| 大屁股熟女少妇一区二区| 91久久久久久久电影| 色情按摩XXXXXX视频| 少妇喷水视频在线观看| 午夜福利92一区二区三区久久| 精品黄色一级久久久久久久久| 少妇人妻系列500视频| 亚洲熟妇少妇一区二区| 亚洲AV永久青草无码士清品| 好吊一区二区三区视频| 成年大片免费视频播放二级| 天天干天天谢天天操| 日韩高清亚洲精品国产欧美| 日韩欧美在线综合网高清| 少妇性感美女一区二区三区四区| 懂色av蜜臀av绯色| 9久久久久久久久久久| 色婷亚洲五月在线观看| 日韩精品性色一区二区在线观看 | 色五月婷婷综合国产在线| 在线观看欧美日一区二区 | 日本a v中文字幕网| 中文字幕av一区二区三区不卡| 亚洲风情 国内自拍av| 一区二区三区四区蜜桃在线| 好色av一区二区三区四区| 中文字幕人妻不卡久久| 欧美日韩性生活视频在线| 啪啪啪在线观看免费视频| 可以免费直接观看的av| 九九re热这里只有精品视频| 黄色片网站国产精品| 老司机福利社免费视频| 老司机福利在线免费观看视频| 亚洲美女啪啪邪恶视频| 玩弄放荡人妻少妇免费视频| 91瑟瑟视频在线观看| 91免费免费观看在线| 色老汉av一区二区三区| 国产精品国产自产拍在线| 91精品人妻丰满熟妇| 欧美三级不卡在线播放 | 亚洲av免费观看网站在线观看| 狠狠综合久久亚洲av蜜臀| 精品国产不卡在线观看免费| 日韩欧美在线综合网高清| 91日本av在线观看| 被插到喷水视频在线观看| 亚洲综合网男人的天堂| 黑人久久一区二区三区| 久亚洲aⅴ一区二区三区写真| 天天综合网精品视频天天看| 邪恶老湿精品一区二区| 韩国的黄萝卜是怎么腌制的| 欲色天天网综合久久| 色综合天天综合网天天狠天| 国产精品视频自拍一区| 可以在线观看的av网站| 亚洲人妻无吗中文字幕| 亚洲和黑人特黄色片| 精品国精品国自产在产国产| 中文字幕人妻丝袜二区av| 天天日天天操天天干天天舔天天射| av男人天堂网在线观看| 91精品国产99久久| 国产精品国产自产拍在线| 男人插女人动漫视频| 久久永久免费专区人妻| 中文字幕日产av一二三区| 又大又黄又粗又爽少妇毛片| 丰满人妻一区二区三区免费视频棣| 亚洲黄色小视频网址| 最新欧美一级特黄大片| 日韩专区欧美专区第五页| 国产婷婷色一区二区三区| 偷怕自拍在线免费观看| 日韩夫妻性生活视频在线观看免费| 久久久久免费特级黄片| 免费看亚洲av的网站| 国产自拍福利视频在线观看| 深夜黄色福利网站在线观看| 91精品人妻丰满熟妇| 一区二区三区麻豆蜜桃视频| 中文字幕=中文字幕| 亚洲人妻无吗中文字幕| 亚洲黄片在线免费播放| 国产加勒比精品蜜臀在线观看| a区精品视频在线观看| 精品少妇在线观看视频| 欧美日本一区二区三区在线观看| 青青草手机免费在线视频| 亚洲欧洲日韩av专区| 小少妇久久久久久久| 最近2019日本中文字幕| 777精品久久久久久久| 天堂av在线男女av| 国产不卡剧情在线观看| 狠狠操狠狠操狠狠搞| 亚洲天堂男人天堂中文字幕| av天堂中文版www在线| 色姑娘天天干天天操| 91精选一区二区三区四区| 久久日99久久里面有精品| 国产手机av免费在线看片不卡| 2020最新中文字幕在线| 亚洲av蜜臀在线观看| 中文字幕人妻不卡久久| 免费精品国产人妻国语| 国产亚洲精品a77777| 美女主播一区二区三区| 国内自拍偷拍视频第一页| 欧美口爆吞精一区二区三区| 色综合天天综合网天天狠天| 中国精品视频在线观看一区二区| 精品人妻天天爽夜夜爽| 在线成人中文字幕网站| 放荡的丝袜美腿护士老师| 中文字幕乱码人妻在线观看| 午夜美女操逼高潮免费视频| 国产自拍福利视频在线观看| 日韩一区=区三区四区| av色综合久久天堂av…| kendralust熟女少妇| 国产精品久久久久久久综合av| 91免费福利视频专区| 91激情视频在线视频| 中文字幕_第1页_绿茶av| 中文字幕av影片免费在线观看| 168黄页网免费观看视频| 青娱乐休闲在线观看视频| 日本不卡视频免费播放| 爱毛片在线成人免费看| 日本黄色录像第1部播放器播放| 男人和女人哪个更色| 日本在线观看视频黄大片www| 亚洲国产自拍偷拍精品| 女人的小鸡鸡真人免费视频| 中文字幕亚洲情色在线观看| 99热在线都是精品免费| 国产日日夜夜精品视频免费| 国产福利一区二区三区久久久| 超碰国产极品尤物在线| 大香蕉国产手机在线观看| 日韩午夜福利三级经典| 亚洲熟女资源一区二区| 久久热高清在线观看| 欧美国产一区二区三区在线看| 成人专区禁18处网站| 国产精品久久久久久久综合av| 人妻熟妇久久久久久xxx| 天天插天天射天天日天天干| 日韩在线网站一区二区三区| 亚洲欧美久久精品免费| 都市激情亚洲春色男人皇宫| 日本激情在线看一区二区三区| 在线人妻中文av导航| 一区二区三区四区蜜桃在线| 亚洲 欧美 日韩 另类在线| 亚洲av乱码国产精品观看麻豆| 日韩中文av在线观看| 在线观看麻豆免费视频| 蜜桃av在线观看网站| av熟女乱一区二区三区| 欧美一区二区三区视频在线观看| 成人av网站在线观看| 久久免费视频精品8| 国产剧情传媒av在线| 人妻视频在线免费观看| 韩国三级国产精品一区| 亚洲国产成人久久无码| 亚洲图片偷拍30pxxx| 最新69视频在线观看| 熟女人妻视频观看一区二区三区 | 日本最新区免费中文字幕| 91popny熟女九色| 国产一级免费观看av网站| 老司机福利在线免费观看视频| 强行进女小姪女小芳| 青青国产成人在线看| 99via精品福利影视| 亚洲夫妻另类在线视频| 蜜桃视频app网站入口| 欧美一卡二卡3卡4卡无卡十| 在线播放__91色| 弄爽新婚人妻第五部美妙人妻| 国产三级在线一区二区三区| 成年人午夜网站在线播放| 午夜两性操一操在线观看嗯嗯啊 | 国产一区二区精品调教| 精品亚洲永久免费精品网站| 91日本av在线观看| 最新国产剧情在线一区| 9999精品久久久久| 男女边摸边吃奶边做视频免费看| 五月激情网激情五月| 欧美在线中文字幕第一页| 一区二区性视频在线观看| 国产人妖综合在线视频| 蜜桃精品噜噜噜av| av在线免费观看一区| 人妻少妇精品视频专区专区| 久久99国产精品久久99蜜月| 超级碰免费人妻97| 中文字幕在线观看观看av?| 中文字幕a区一区三区| 熟妇人妻一区二区三区| 男生和女生哪个更色| 女友97年白嫩漂亮在线看| 91九色porny蝌蚪主页| 人妻少妇精品视频在线观看| 男人午夜视频在线观看| 日本丰满老熟妇bbw| 91麻豆天美精东蜜桃专区| 狠狠添狠狠添狠狠添免费出高潮水 | 欧美一区二区三不卡| 男人的天堂av成人网| 欧美成人性生活一级片| 日本a v中文字幕网| 亚洲码和欧洲码的尺码| 中年美熟妇与少年的激情| 欧美午夜理论片1000在线播放 | 中文字幕激情亚洲精品| 亚洲国产欧美日韩综合| 加勒比久久综合久久678| 精品日产一匹二匹三匹四匹五匹| 日本中文字幕第三区| 久久古典武侠第1页777| 伊人激情综合视频网| 国内自拍偷拍视频第一页| 天天干天天日少妇网| 欧美亚洲日产国产综合| 人人爽人人爽人人妻| 亚洲精品一二三在线观看| 亚洲码欧洲码在线观看| 黄片一级黄片一级黄片| 午夜激情片免费在线观看| 熟女人妻伊人蜜桃视频| 日韩激情又爽aaaaa级| 操女人逼逼好爽啊操| 日本精品一区二区三区四区| 国产精品不卡在线播放| 另类激情国产专区在线观看免费| 欧美三级不卡在线播放 | 福利动态视频午夜日本免费| 欧洲码亚洲码一区二区三区四区| 五月开心六月伊人色婷婷| 日本不卡视频免费播放| 韩国的黄萝卜是怎么腌制的| 亚洲大胆综合在线观看| 成人av黄片免费在线观看专区| 熟妇人妻一区二区三区| 国产日日夜夜精品视频免费| 国产精品一国产精品免费| 欧美色视频日本片免费看| 91成人国产在线观看九色| 51成人看片免费软件| jizz成人在线视频| 色五月婷婷综合国产在线 | 91精品人妻丰满熟妇| 99999精品视频在线观看| 免费高清视频亚洲熟女| 天天操日日干夜夜射| xxxxxx日本少妇| 国内偷拍视频在线观看| 日本精品一区二区三区四区| 2017夜夜操天天操| 日韩在线视频观看你懂的| 人妻精品无码一区二区三区百花| 成人av网站在线观看| 天天操日日干夜夜射| 中文乱码在线观看一区| 日本老熟女人体艺术| 天天插天天射天天日天天干| av亚洲欧美一区二区| 成人网视频欧美在线观看| 懂色av蜜臀av绯色| 樱桃国产成人精品视频| 男人的天堂av 色噜噜| 一级视频在线观看高清国产免费| 人妻一区二区三区中文字幕免费| 51国精产品一区二区三| JK白丝喷白嫩嫩久久久| 男生和女生哪个更色| av大片免费观看网站| 91成人在线观看免费| 男女裸交无套啪啪激情高潮| 午夜狠狠干在线视频| 日本欧美黄色网站免费| 国产日韩欧美高清无网码| 精品熟妇丰满人妻视频| 久久久精品国产亚洲av水| 青草神马视频在线网址| 视频免费在线观看网| 日本精品一区二区三区不卡| 欧美18vide0sex性极品| 草莓视频精品在线观看| 亚洲欧美另类离制服丝袜| 欧美图区一区二区三区|