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

JVM內存模型總結和上手實踐,親測學完沒脫發!

存儲 存儲軟件 虛擬化
最近看到一篇文章,30歲有多難。文中的一些主人公好像在學業、工作、生活、愛情等方面都過的都不如意。要不是錯過這,要不是走錯那。總結來看,就像是很倒霉的一群倒霉蛋兒在跟生活對干!

 [[374276]]

本文轉載自微信公眾號「bugstack蟲洞棧」,作者小傅哥。轉載本文請聯系bugstack蟲洞棧公眾號。  

目錄

  • 一、前言
  • 二、面試題
  • 三、 JDK1.6、JDK1.7、JDK1.8 內存模型演變
  • 四、內存模型各區域介紹
    • 1. 程序計數器
    • 2. Java虛擬機棧
    • 3. 本地方法棧
    • 4. 堆和元空間
    • 5. 常量池
  • 五、手擼虛擬機(內存模型)
    • 1. 工程結構
    • 2. 重點代碼
  • 六、jconsole監測元空間溢出
    • 1. 找段持續創建大對象的代碼
    • 2. 調整元空間大小
    • 3. 設置監控參數
    • 4. 測試運行
  • 七、總結
  • 八、系列推薦

一、前言

看了一篇文章30歲有多難!

每篇文章的開篇總喜歡寫一些,從個人視角看這個世界的感悟。

最近看到一篇文章,30歲有多難。文中的一些主人公好像在學業、工作、生活、愛情等方面都過的都不如意。要不是錯過這,要不是走錯那。總結來看,就像是很倒霉的一群倒霉蛋兒在跟生活對干!

但其實每個人可能都遇到過生活中最難的時候,或早或晚。就像我剛畢業不久時一連串遇到;冬天里丟過第一部手機、修一個進了水的電腦、租的房子第一次被騙,一連串下來頭一次要趕在工資沒發的時候,選擇少吃早飯還是午飯,看看能扛過去那頓。

哈哈哈哈哈,現在想想還挺有意思的,不過這些亂遭的事很多是自己的意識和能力不足時做出的錯誤選擇而導致的。

人那,想開車就要考駕照,想走遠就要有能力。多提升認知,多拓寬眼界!生活的意義就是不斷的更新自己!

二、面試題

謝飛機,小記!,冬風吹、戰鼓擂。被窩里,誰怕誰。

「謝飛機」:歪?大哥,你在嗎?

「面試官」:咋了,大周末的,這么早打電話!?

「謝飛機」:我夢見,我去谷歌寫JVM了,給你們公司用,之后蹦了,讓我起來改bug!

「面試官」:啊!?啊,那我問你,JDK 1.8 與 JDK 1.7 在運行時數據區的設計上,你都怎么做的優化策略的?

「謝飛機」:我沒寫這,我不知道!

「面試官」:擦。。。

三、 JDK1.6、JDK1.7、JDK1.8 內存模型演變

圖 25-1 JDK1.6、JDK1.7、JDK1.8,內存模型演變

如圖 25-1 是 JDK 1.6、1.7、1.8 的內存模型演變過程,其實這個內存模型就是 JVM 運行時數據區依照JVM虛擬機規范的具體實現過程。

在圖 25-1 中各個版本的迭代都是為了更好的適應CPU性能提升,最大限度提升的JVM運行效率。這些版本的JVM內存模型主要有以下差異:

  • JDK 1.6:有永久代,靜態變量存放在永久代上。
  • JDK 1.7:有永久代,但已經把字符串常量池、靜態變量,存放在堆上。逐漸的減少永久代的使用。
  • JDK 1.8:無永久代,運行時常量池、類常量池,都保存在元數據區,也就是常說的元空間。但字符串常量池仍然存放在堆上。

四、內存模型各區域介紹

1. 程序計數器

較小的內存空間、線程私有,記錄當前線程所執行的字節碼行號。

如果執行 Java 方法,計數器記錄虛擬機字節碼當前指令的地址,本地方法則為空。

這一塊區域沒有任何 OutOfMemoryError 定義。

「以上」,就是關于程序計數器的定義,如果這樣看沒有感覺,我們舉一個例子。

定義一段 Java 方法的代碼,這段代碼是計算圓形的周長。

  1. public static float circumference(float r){ 
  2.         float pi = 3.14f; 
  3.         float area = 2 * pi * r; 
  4.         return area; 

接下來,如圖 25-2 是這段代碼的在虛擬機中的執行過程,左側是它的程序計數器對應的行號。

圖 25-2 程序計數器

這些行號每一個都會對應一條需要執行的字節碼指令,是壓棧還是彈出或是執行計算。

之所以說是線程私有的,因為如果不是私有的,那么整個計算過程最終的結果也將錯誤。

2. Java虛擬機棧

  • 每一個方法在執行的同時,都會創建出一個棧幀,用于存放局部變量表、操作數棧、動態鏈接、方法出口、線程等信息。
  • 方法從調用到執行完成,都對應著棧幀從虛擬機中入棧和出棧的過程。
  • 最終,棧幀會隨著方法的創建到結束而銷毀。

可能這么只從定義看上去仍然沒有什么感覺,我們再找一個例子。

這是一個關于斐波那契數列(Fibonacci sequence)求值的例子,我們通過斐波那契數列在虛擬機中的執行過程,來體會Java虛擬機棧的用途。

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1963年起出版了以《斐波納契數列季刊》為名的一份數學雜志,用于專門刊載這方面的研究成果。

圖 25-3 斐波那契數列在虛擬機棧中的執行過程

整個這段流程,就是方法的調用和返回。在調用過程申請了操作數棧的深度和局部變量的大小。

以及相應的信息從各個區域獲取并操作,其實也就是入棧和出棧的過程。

3. 本地方法棧

本地方法棧與Java虛擬機棧作用類似,唯一不同的就是本地方法棧執行的是Native方法,而虛擬機棧是為JVM執行Java方法服務的。

另外,與 Java 虛擬機棧一樣,本地方法棧也會拋出 StackOverflowError 和 OutOfMemoryError 異常。

JDK1.8 HotSpot虛擬機直接就把本地方法棧和虛擬機棧合二為一。

關于本地方法棧在以上的例子已經涉及了這部分內容,這里就不在贅述了。

4. 堆和元空間

圖 25-4 Java 堆區域劃分

  • JDK 1.8 JVM 的內存結構主要由三大塊組成:堆內存、元空間和棧,Java 堆是內存空間占據最大的一塊區域。
  • Java 堆,由年輕代和年老代組成,分別占據1/3和2/3。
  • 而年輕代又分為三部分,「Eden」、「From Survivor」、「To Survivor」,占據比例為8:1:1,可調。
  • 另外這里我們特意畫出了元空間,也就是直接內存區域。在 JDK 1.8 之后就不在堆上分配方法區了。
  • 「元空間」從虛擬機Java堆中轉移到本地內存,默認情況下,元空間的大小僅受本地內存的限制,說白了也就是以后不會因為永久代空間不夠而拋出OOM異常出現了。jdk1.8以前版本的 class和JAR包數據存儲在 PermGen下面 ,PermGen 大小是固定的,而且項目之間無法共用,公有的 class,所以比較容易出現OOM異常。
  • 升級 JDK 1.8后,元空間配置參數,-XX:MetaspaceSize=512M XX:MaxMetaspaceSize=1024M。教你個小技巧通過jps、jinfo查看元空間,如下:

通過命令查看元空間

通過jinfo查看默認MetaspaceSize大小(約20M),MaxMetaspaceSize比較大。

「其他:關于 JDK1.8 元空間的介紹:」 Move part of the contents of the permanent generation in Hotspot to the Java heap and the remainder to native memory. http://openjdk.java.net/jeps/122

5. 常量池

從 JDK 1.7開始把常量池從永久代中剝離,直到 JDK1.8 去掉了永久代。而字符串常量池一直放在堆空間,用于存儲字符串對象,或是字符串對象的引用。

五、手擼虛擬機(內存模型)

其實以上的內容,已經完整的介紹了JVM虛擬機的內存模型,也就是運行時數據區的結構。但是這東西看完可能就忘記了,因為缺少一個可親手操作的代碼。

「所以」,這里我給大家用Java代碼寫一段關于數據槽、棧幀、局部變量、虛擬機棧以及堆的代碼結構,讓大家更好的加深對虛擬機內存模型的印象。

1. 工程結構

運行時數據區

  1. 運行時數據區 
  2. ├── heap 
  3. │   ├── constantpool 
  4. │   ├── methodarea 
  5. │   │   ├── Class.java 
  6. │   │   ├── ClassMember.java 
  7. │   │   ├── Field.java 
  8. │   │   ├── Method.java 
  9. │   │   ├── MethodDescriptor.java 
  10. │   │   ├── MethodDescriptorParser.java 
  11. │   │   ├── MethodLookup.java 
  12. │   │   ├── Object.java 
  13. │   │   ├── Slots.java 
  14. │   │   └── StringPool.java 
  15. │   └── ClassLoader.java 
  16. ├── Frame.java 
  17. ├── JvmStack.java 
  18. ├── LocalVars.java 
  19. ├── OperandStack.java 
  20. ├── Slot.java 
  21. └── Thread.java 

以上這部分就是使用Java實現的部分JVM虛擬機功能,這部分主要包括如下內容:

  • Frame,棧幀
  • JvmStack,虛擬機棧
  • LocalVars,局部變量
  • OperandStack,操作數棧
  • Slot,數據槽
  • Thread,線程
  • heap,堆,里面包括常量池和方法區

2. 重點代碼

「操作數棧 OperandStack」

  1. public class OperandStack { 
  2.  
  3.     private int size = 0; 
  4.     private Slot[] slots; 
  5.  
  6.     public OperandStack(int maxStack) { 
  7.         if (maxStack > 0) { 
  8.             slots = new Slot[maxStack]; 
  9.             for (int i = 0; i < maxStack; i++) { 
  10.                 slots[i] = new Slot(); 
  11.             } 
  12.         } 
  13.     } 
  14.     //... 

「虛擬機棧 OperandStack」

  1. public class JvmStack { 
  2.  
  3.     private int maxSize; 
  4.     private int size
  5.     private Frame _top; 
  6.      
  7.     //... 

「棧幀 Frame」

  1. public class Frame { 
  2.  
  3.     //stack is implemented as linked list 
  4.     Frame lower
  5.  
  6.     //局部變量表 
  7.     private LocalVars localVars; 
  8.  
  9.     //操作數棧 
  10.     private OperandStack operandStack; 
  11.  
  12.     private Thread thread; 
  13.  
  14.     private Method method; 
  15.  
  16.     private int nextPC; 
  17.   
  18.     //... 
  • 關于代碼結構看到這有點感覺了嗎?
  • Slot數據槽,就是一個數組結構,用于存放數據的。
  • 操作數棧、局部變量表,都是使用數據槽進行入棧入棧操作。
  • 在棧幀里,可以看到連接、局部變量表、操作數棧、方法、線程等,那么文中說到的當有一個新的每一個方法在執行的同時,都會創建出一個棧幀,是不就對了上,可以真的理解了。
  • 如果你對JVM的實現感興趣,可以閱讀用Java實現JVM源碼:https://github.com/fuzhengwei/itstack-demo-jvm

六、jconsole監測元空間溢出

不是說 JDK 1.8 的內存模型把永久代下掉,換上元空間了嗎?但不測試下,就感受不到呀,沒有證據!

所有關于代碼邏輯的學習,都需要有數據基礎和證明過程,這樣才能有深刻的印象。走著,帶你把元空間干滿,讓它OOM!

1. 找段持續創建大對象的代碼

  1. public static void main(String[] args) throws InterruptedException { 
  2.      
  3.     Thread.sleep(5000); 
  4.      
  5.     ClassLoadingMXBean loadingBean = ManagementFactory.getClassLoadingMXBean(); 
  6.     while (true) { 
  7.         Enhancer enhancer = new Enhancer(); 
  8.         enhancer.setSuperclass(MetaSpaceOomMock.class); 
  9.         enhancer.setCallbackTypes(new Class[]{Dispatcher.class, MethodInterceptor.class}); 
  10.         enhancer.setCallbackFilter(new CallbackFilter() { 
  11.             @Override 
  12.             public int accept(Method method) { 
  13.                 return 1; 
  14.             } 
  15.             @Override 
  16.             public boolean equals(Object obj) { 
  17.                 return super.equals(obj); 
  18.             } 
  19.         }); 
  20.         System.out.println(enhancer.createClass().getName() + loadingBean.getTotalLoadedClassCount() + loadingBean.getLoadedClassCount() + loadingBean.getUnloadedClassCount()); 
  21.     } 

網上找了一段基于CGLIB的,你可以寫一些其他的。

Thread.sleep(5000);,睡一會,方便我們點檢測,要不程序太快就異常了。

2. 調整元空間大小

默認情況下元空間太大了,不方便測試出結果,所以我們把它調的小一點。

  1. -XX:MetaspaceSize=8m 
  2. -XX:MaxMetaspaceSize=80m 

3. 設置監控參數

基于 jconsole 監控,我們需要設置下參數。

  1. -Djava.rmi.server.hostname=127.0.0.1 
  2. -Dcom.sun.management.jmxremote 
  3. -Dcom.sun.management.jmxremote.port=7397 
  4. -Dcom.sun.management.jmxremote.ssl=false 
  5. -Dcom.sun.management.jmxremote.authenticate=false 

4. 測試運行

4.1 配置參數

「以上的測試參數」,配置到IDEA中運行程序里就可以,如下:

圖 25-5 設置程序運行參數,監控OOM

另外,jconsole 可以通過 IDEA 提供的 Terminal 啟動,直接輸入 jconsole,回車即可。

4.2 測試結果

  1. org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$bd2bb16e999099900 
  2. org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$9c774e64999199910 
  3. org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$cac97732999299920 
  4. org.itstack.interview.MetaSpaceOomMock$$EnhancerByCGLIB$$91c6a15a999399930 
  5. Exception in thread "main" java.lang.IllegalStateException: Unable to load cache item 
  6.  at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:79) 
  7.  at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) 
  8.  at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119) 
  9.  at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294) 
  10.  at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) 
  11.  at net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:337) 
  12.  at org.itstack.interview.MetaSpaceOomMock.main(MetaSpaceOomMock.java:34) 
  13. Caused by: java.lang.OutOfMemoryError: Metaspace 
  14.  at java.lang.Class.forName0(Native Method) 
  15.  at java.lang.Class.forName(Class.java:348) 
  16.  at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:467) 
  17.  at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:339) 
  18.  at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492) 
  19.  at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96) 
  20.  at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94) 
  21.  at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) 
  22.  at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) 
  23.  at java.util.concurrent.FutureTask.run(FutureTask.java) 
  24.  at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) 
  25.  ... 6 more 

要的就是這句,java.lang.OutOfMemoryError: Metaspace,元空間OOM,證明 JDK1.8 已經去掉永久代,換位元空間。

4.3 監控截圖

圖 25-6 jconsole監測元空間溢出

圖 25-6,就是監測程序OOM時的元空間表現。這回對這個元空間就有感覺了吧!

七、總結

本文從 JDK 各個版本關于內存模型結構的演變,來了解各個區域,包括:程序計數器、Java 虛擬機棧、本地方法棧、堆和元空間。并了解從 JDK 1.8 開始去掉方法區引入元空間的核心目的和作用。

在通過手擼JVM代碼的方式讓大家對運行時數據區有一個整體的認知,也通過這樣的方式讓大家對學習這部分知識有一個抓手。

最后我們通過 jconsole 檢測元空間溢出的整個過程,來學以致用,看看元空間到底在解決什么問題以及怎么測試。

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關推薦

2023-08-24 07:46:21

服務器JVM

2010-05-24 09:49:47

ADO.NET

2010-09-25 12:38:40

JVM內存模型

2023-01-28 08:32:04

Go內存分配

2025-03-04 10:45:19

JVM內存模型Java

2023-11-05 12:05:35

JVM內存

2018-07-04 14:43:55

對象模型內存結構內存模型

2018-11-01 10:34:37

JVM內存配置

2023-06-07 08:08:43

JVM內存模型

2025-07-21 06:00:00

JVMOOM編程

2010-02-22 08:58:35

JVM內存模型垃圾收集

2010-09-26 16:42:04

JVM內存組成JVM垃圾回收

2024-07-26 10:23:52

2020-12-03 15:05:41

Kubernetes工具開發

2023-10-23 12:28:04

數據AI

2022-02-04 22:05:19

JVM程序內存模型

2022-05-27 08:01:36

JVM內存收集器

2020-03-23 13:03:55

MacBook蘋果電腦

2017-09-20 08:48:09

JVM內存結構

2021-09-08 17:42:45

JVM內存模型
點贊
收藏

51CTO技術棧公眾號

亚洲第一福利网| 午夜亚洲福利老司机| 成人欧美一区二区三区黑人| 色在线观看视频| 都市激情亚洲| 欧美专区亚洲专区| av在线免费观看国产| 性xxxx18| 久久99在线观看| 国内精品久久久久影院 日本资源| 日韩精品电影一区二区| 国产精品亚洲综合在线观看| 精品久久在线播放| 在线观看18视频网站| 国产在线你懂得| 高清在线观看日韩| 91精品久久久久久久久久久久久久 | 日本一区二区在线视频观看| 国产夫妻在线观看| 免费成人性网站| 欧美在线免费观看| 国产一级在线免费观看| 日韩电影在线视频| 亚洲欧美国产精品| 无码任你躁久久久久久老妇| 欧洲亚洲精品久久久久| 日韩欧美视频一区二区三区| 精品视频在线观看一区二区| www.亚洲.com| 久久久久久久久久久黄色| 国产精品日韩高清| 国产极品999| 极品少妇xxxx精品少妇偷拍| 国产成人精品久久久| 亚洲精品国产精品乱码| 黄色综合网站| 欧美精品生活片| 免费精品在线视频| 欧美亚洲国产一区| 国产亚洲欧洲在线| 亚洲午夜久久久久久久国产| 亚洲成在人线免费观看| 亚洲精品国产品国语在线| 在线播放国产视频| 日韩一区二区三区高清在线观看| 欧美日韩国产高清一区二区三区| 黄色aaa级片| 日本一区免费网站| 色呦呦一区二区三区| 青青在线视频观看| 桃花岛tv亚洲品质| 欧美亚洲愉拍一区二区| 国产三级三级看三级| 国产成人毛片| 欧美区在线观看| 三级性生活视频| 成人永久在线| 精品国产免费一区二区三区香蕉| 中文字幕无码毛片免费看| 另类视频一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 久国产精品视频| 日本99精品| 亚洲国产成人精品电影| japanese在线观看| 最新国产一区| 中文字幕日韩在线观看| 天海翼在线视频| 午夜久久一区| 欧美激情一区二区三区在线视频观看 | 亚洲乱码国产乱码精品精的特点 | 一本一道久久综合狠狠老精东影业| 午夜免费久久久久| 天天干天天操天天操| 老司机精品视频在线| 91成人免费视频| 污污网站在线免费观看| 久久精品这里都是精品| 亚洲一区3d动漫同人无遮挡 | 99精品视频国产| 视频二区欧美毛片免费观看| 亚洲精品乱码久久久久久金桔影视 | 色一情一乱一乱一区91av| 久久综合色之久久综合| 一区二区精品国产| 国产后进白嫩翘臀在线观看视频| 欧美色播在线播放| 中日韩av在线播放| 红杏一区二区三区| 色噜噜久久综合伊人一本| 久久精品这里只有精品| 媚黑女一区二区| 成人亚洲激情网| 欧美女优在线| 亚洲免费看黄网站| 欧美 日韩 国产一区| 亚洲91在线| 亚洲乱码一区av黑人高潮| 美女视频久久久| 亚洲一区免费| 99re在线视频观看| av网站无病毒在线| 午夜精品久久久久影视| 香蕉视频999| 亚洲黄色录像| 美女精品视频一区| 国产精品成人久久久| 成人免费电影视频| 一区二区日本伦理| 综合久久2023| 精品国产免费一区二区三区香蕉| 日本美女bbw| 国产日韩欧美| 俄罗斯精品一区二区| 免费av在线| 在线观看日韩高清av| www.四虎在线| 综合久久精品| 国产欧美在线视频| 日本成人一区二区三区| 亚洲电影一级黄| japan高清日本乱xxxxx| 清纯唯美亚洲综合一区| 青草青草久热精品视频在线网站| 亚洲毛片欧洲毛片国产一品色| 国产精品色在线| 9久久婷婷国产综合精品性色 | 1级黄色大片儿| 精品一区免费av| 亚洲国产精品毛片| 亚洲日本在线观看视频| 精品一区二区电影| 国产免费观看av| 99久久综合色| 精品无码国模私拍视频| 成人在线超碰| 欧美激情视频在线观看| 国产日本精品视频| 自拍偷拍国产精品| 天天操狠狠操夜夜操| 大色综合视频网站在线播放| 日韩美女av在线免费观看| 亚洲三区在线观看无套内射| 精品久久久久久亚洲国产300| 少妇搡bbbb搡bbb搡打电话| 午夜激情一区| 97视频资源在线观看| 天堂av资源在线观看| 欧美一级xxx| 在线免费观看亚洲视频| 国产高清无密码一区二区三区| 亚洲精品偷拍视频| 国产一区二区高清在线| 欧美精品在线免费观看| 亚洲欧美激情另类| 午夜天堂影视香蕉久久| 欧美成人午夜精品免费| 日本中文字幕一区| 亚洲欧洲日本国产| 大胆国模一区二区三区| 色综合久久88| 天天操天天爱天天干| 欧美日韩亚洲高清| 蜜臀久久99精品久久久久久| 美女视频一区在线观看| 国产一二三四区在线观看| 中文在线综合| 国产成人精品一区二区在线| 999国产在线视频| 日韩一区和二区| 日韩美女黄色片| 久久精品视频一区| 久久精品视频在线观看免费| 激情欧美亚洲| 欧美婷婷久久| 宅男噜噜噜66国产精品免费| 久久久久久成人精品| 青青国产在线| 欧美精品在线一区二区三区| 欧美极品视频在线观看| 91视频在线观看免费| 亚欧激情乱码久久久久久久久| 久久久久免费av| 国产私拍一区| www.一区| 久久久这里只有精品视频| 免费播放片a高清在线观看| 欧美日韩aaaaa| 国产无遮挡aaa片爽爽| 久久久国产综合精品女国产盗摄| 图片区乱熟图片区亚洲| 午夜亚洲视频| 警花观音坐莲激情销魂小说| 亚欧洲精品视频在线观看| 国产欧美精品日韩精品| 大桥未久在线视频| 久久精品久久精品亚洲人| 亚洲av片在线观看| 欧美一区二区三区不卡| 91玉足脚交嫩脚丫在线播放| 亚洲情趣在线观看| 中文字幕免费高清| 成人污污视频在线观看| 污色网站在线观看| 国产欧美一级| 国产精品久久久久7777| 成人久久久久| 欧美一二三区| 91精品啪在线观看国产爱臀 | 久久久久久久电影| 少妇极品熟妇人妻无码| 青青草国产成人av片免费| 男女视频网站在线观看| 欧美黄色免费| 亚洲精品一区二区三| 免费成人蒂法| 国产高清精品一区二区| 成人不卡视频| 国产成人aa精品一区在线播放| ****av在线网毛片| 九九九久久久久久| 久久综合之合合综合久久| 亚洲性夜色噜噜噜7777| 午夜国产在线观看| 亚洲精品国产综合区久久久久久久| 国产精品无码天天爽视频| 在线观看一区日韩| 91麻豆精品在线| 色综合天天综合色综合av| 国产无遮挡aaa片爽爽| 一区二区三区精品视频在线| 一起操在线播放| 国产精品人成在线观看免费| 国产精品成人无码免费| 久久久亚洲精品一区二区三区| 久久久久国产精品无码免费看| 国产成人福利片| 能看毛片的网站| 国产成人免费高清| 日本中文字幕有码| 成人在线视频一区| www.美色吧.com| 成人动漫一区二区在线| 国产国语老龄妇女a片| 国产精品69毛片高清亚洲| 少妇愉情理伦片bd| 国产精品18久久久久久久网站| 杨幂一区二区国产精品| 国产剧情一区二区三区| 免费高清视频在线观看| 国产不卡在线一区| 午夜男人的天堂| 91免费在线播放| 中文字幕免费高清| 国产精品久久久久影院色老大| 人妻无码一区二区三区免费| 中文字幕亚洲电影| 91久久国产综合| 亚洲一区二区三区四区在线| 国产真实乱偷精品视频| 精品国产999| 黄色av网站免费| 欧美精品久久久久久久久老牛影院| 国产又粗又猛又黄又爽无遮挡| 91精品国产全国免费观看| 亚洲精品久久久久久久久久久久久久 | 久久要要av| 妞干网这里只有精品| 亚洲国产高清视频| 日韩av在线综合| 美女视频网站久久| 亚洲精品鲁一鲁一区二区三区 | 欧美激情久久久久久久| 亚洲免费观看高清完整| 日本中文字幕免费| 色综合久久综合| 国产精品亚洲lv粉色| 精品国产乱码91久久久久久网站| 三级av在线| www.日韩av.com| 黄色漫画在线免费看| 国产精品色视频| 白嫩白嫩国产精品| 日本在线免费观看一区| 欧美xxx在线观看| 欧美极品欧美精品欧美图片| 美女视频一区二区| 亚洲国产精品自拍视频| 中文字幕av不卡| 久青草视频在线观看| 在线观看一区日韩| 丰满岳乱妇国产精品一区| 亚洲欧美www| 欧美人与禽猛交乱配| 国产精品久久不能| 国产丝袜一区| 日日噜噜夜夜狠狠久久丁香五月| 午夜影院日韩| 色婷婷一区二区三区在线观看| www.亚洲人| 手机在线免费看片| 欧美亚洲国产一区二区三区va| 亚洲国产精品18久久久久久| 国产亚洲精品久久久久久牛牛 | 国产成人av免费观看| 国产日韩欧美高清在线| 日本一级淫片免费放| 制服丝袜亚洲色图| 黄网在线免费| 亚州欧美日韩中文视频| 欧美午夜网站| 亚洲综合网中心| 视频一区视频二区中文字幕| 亚洲色偷偷色噜噜狠狠99网| 亚洲视频在线一区观看| 国产成人av免费| 亚洲男人天堂2024| av资源在线看片| 痴汉一区二区三区| 中文字幕一区二区三三| 中文字幕av专区| 久久久不卡网国产精品一区| 日韩三级视频在线| 日韩女同互慰一区二区| 福利视频在线| 国产一区在线播放| 精品视频免费| 一本久道中文无码字幕av| www激情久久| 色婷婷在线观看视频| 欧美精品一区二区三| 日本高清在线观看| 99中文字幕| 欧美三级不卡| 韩国av中国字幕| 亚洲午夜免费福利视频| 丰满熟女一区二区三区| 欧美大片免费看| 视频在线观看免费影院欧美meiju| 国产又爽又黄ai换脸| 久久精品99国产精品| 毛片久久久久久| 9191精品国产综合久久久久久| 日本电影在线观看网站| 国产精品揄拍一区二区| 日韩欧美高清| 午夜国产福利在线观看| 亚洲视频一区二区在线| 国产日韩一级片| 美女精品视频一区| 国产精品一区二区三区美女| 中文字幕无码精品亚洲资源网久久| 成人免费高清在线观看| 国产69精品久久久久久久久久| 亚洲精品www久久久久久广东| 超碰在线视屏| 欧美日韩一区二| 麻豆精品一区二区三区| 欧美精品一区二区蜜桃| 亚洲精品一区二区三区精华液 | 91美女片黄在线观看游戏| 99久久99视频只有精品| 中文字幕乱码在线人视频| 亚洲福利国产精品| 可以直接在线观看的av| 国产精品自产拍在线观看中文 | 国产免费成人在线视频| 亚洲无码精品国产| 九九热r在线视频精品| 精品欧美午夜寂寞影院| 国产成人无码一二三区视频| 国产精品网友自拍| 亚洲成人黄色片| 秋霞午夜一区二区| 日韩成人综合| 肉丝美足丝袜一区二区三区四| 婷婷六月综合网| 91亚洲精选| 成人黄色片视频网站| 久久精品动漫| 国产日韩欧美在线观看视频| 亚洲国产一区自拍| 国产69精品久久久久9999人| www.激情网| 国产亚洲欧美激情| 精品人妻伦一二三区久久| 日本高清久久天堂| 欧美+亚洲+精品+三区| 成年人网站免费在线观看| 欧美精品丝袜久久久中文字幕| 波多一区二区| 亚洲午夜激情| 2024国产精品视频| 国产精品无码久久av| 国产成人精品午夜| 亚洲国产美女| 神马久久精品综合| 亚洲免费一在线| av综合网站| 999在线精品视频|