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

Java中的JVM字符串性能優化

開發 開發工具
String 對象是我們使用很頻繁的一個對象類型,但它的性能問題卻是很容易被忽略的。String 對象作為 Java 語言中重要的數據類型,是內存中占據空間較大的一個對象。高效地使用字符串,可以提升系統的整體性能。

 一、引言

String 對象是我們使用很頻繁的一個對象類型,但它的性能問題卻是很容易被忽略的。String 對象作為 Java 語言中重要的數據類型,是內存中占據空間較大的一個對象。高效地使用字符串,可以提升系統的整體性能。

[[285816]]

二、String 對象的實現

在 Java 語言中,Sun 公司的工程師們對 String 對象做了大量的優化,來節約內存空間,提升 String 對象在系統中的性能。

1. 在 Java6 以及之前的版本中,String 對象是對 char 數組進行了封裝實現的對象,主要有四個成員變量:char 數組、偏移量 offset、字符數量 count、哈希值 hash。String 對象是通過 offset 和 count 兩個屬性來定位 char[] 數組,獲取字符串。這么做可以高效、快速地共享數組對象,同時節省內存空間,但這種方式很有可能會導致內存泄漏。

2. 從 Java7 版本開始到 Java8 版本,Java 對 String 類做了一些改變。String 類中不再有 offset 和 count 兩個變量了。這樣的好處是 String 對象占用的內存稍微少了些,同時,String.substring 方法也不再共享 char[],從而解決了使用該方法可能導致的內存泄漏問題。

3. 從 Java9 版本開始,工程師將 char[] 字段改為了 byte[] 字段,又維護了一個新的屬性 coder,它是一個編碼格式的標識。

工程師為什么這樣修改呢?

我們知道一個 char 字符占 16 位,2 個字節。這個情況下,存儲單字節編碼內的字符(占一個字節的字符)就顯得非常浪費。JDK1.9 的 String 類為了節約內存空間,于是使用了占 8 位,1 個字節的 byte 數組來存放字符串。

而新屬性 coder 的作用是,在計算字符串長度或者使用 indexOf()函數時,我們需要根據這個字段,判斷如何計算字符串長度。coder 屬性默認有 0 和 1 兩個值,0 代表 Latin-1(單字節編碼),1 代表 UTF-16。如果 String 判斷字符串只包含了 Latin-1,則 coder 屬性值為 0,反之則為 1。

三、String 對象的不可變性起因

了解了 String 對象的實現后,你有沒有發現在實現代碼中 String 類被 final 關鍵字修飾了,而且變量 char 數組也被 final 修飾了。

我們知道類被 final 修飾代表該類不可繼承,而 char[] 被 final+private 修飾,代表了 String 對象不可被更改。Java 實現的這個特性叫作 String 對象的不可變性,即 String 對象一旦創建成功,就不能再對它進行改變。

四、String 對象的不可變性好處

1.保證 String 對象的安全性。假設 String 對象是可變的,那么 String 對象將可能被惡意修改。

2.保證 hash 屬性值不會頻繁變更,確保了唯一性,使得類似 HashMap 容器才能實現相應的 key-value 緩存功能。

3.可以實現字符串常量池。在 Java 中,通常有兩種創建字符串對象的方式,一種是通過字符串常量的方式創建,如 String str=“abc”;另一種是字符串變量通過 new 形式的創建,如 String str = new String(“abc”)。

當代碼中使用第一種方式創建字符串對象時,JVM 首先會檢查該對象是否在字符串常量池中,如果在,就返回該對象引用,否則新的字符串將在常量池中被創建。這種方式可以減少同一個值的字符串對象的重復創建,節約內存。

String str = new String(“abc”) 這種方式,首先在編譯類文件時,“abc”常量字符串將會放入到常量結構中,在類加載時,“abc”將會在常量池中創建;其次,在調用 new 時,JVM 命令將會調用 String 的構造函數,同時引用常量池中的“abc” 字符串,在堆內存中創建一個 String 對象;最后,str 將引用 String 對象。

五、String 對象的優化

1. 如何構建超大字符串?

編程過程中,字符串的拼接很常見。前面我講過 String 對象是不可變的,如果我們使用 String 對象相加,拼接我們想要的字符串,是不是就會產生多個對象呢?例如以下代碼:

 

  1. String str= "ab" + "cd" + "ef"

分析代碼可知:首先會生成 ab 對象,再生成 abcd 對象,最后生成 abcdef 對象,從理論上來說,這段代碼是低效的。

但實際運行中,我們發現只有一個對象生成,這是為什么呢?難道我們的理論判斷錯了?我們再來看編譯后的代碼,你會發現編譯器自動優化了這行代碼,如下:

 

  1. String str= "abcdef"

上面介紹的是字符串常量的累計,再來看看字符串變量的累計又是怎樣的呢?

 

  1. String str = "abcdef"
  2.  
  3. for(int i=0; i<1000; i++) { 
  4.  
  5. str = str + i; 
  6.  

 

上面的代碼編譯后,你可以看到編譯器同樣對這段代碼進行了優化。不難發現,Java 在進行字符串的拼接時,偏向使用 StringBuilder,這樣可以提高程序的效率。

 

  1. String str = "abcdef"
  2.  
  3. for(int i=0; i<1000; i++) { 
  4.  
  5. str = (new StringBuilder(String.valueOf(str))).append(i).toString(); 
  6.  

 

綜上已知:即使使用 + 號作為字符串的拼接,也一樣可以被編譯器優化成 StringBuilder 的方式。但再細致些,你會發現在編譯器優化的代碼中,每次循環都會生成一個新的 StringBuilder 實例,同樣也會降低系統的性能。

所以平時做字符串拼接的時候,我建議你還是要顯示地使用 String Builder 來提升系統性能。

如果在多線程編程中,String 對象的拼接涉及到線程安全,你可以使用 StringBuffer。但是要注意,由于 StringBuffer 是線程安全的,涉及到鎖競爭,所以從性能上來說,要比 StringBuilder 差一些。

2. 如何使用 String.intern 節省內存?

講完了構建字符串,我們再來討論下 String 對象的存儲問題。先看一個案例。

Twitter 每次發布消息狀態的時候,都會產生一個地址信息,以當時 Twitter 用戶的規模預估,服務器需要 32G 的內存來存儲地址信息。

 

  1. public class Location { 
  2.  
  3. private String city; 
  4.  
  5. private String region; 
  6.  
  7. private String countryCode; 
  8.  
  9. private double longitude; 
  10.  
  11. private double latitude; 
  12.  

 

考慮到其中有很多用戶在地址信息上是有重合的,比如,國家、省份、城市等,這時就可以將這部分信息單獨列出一個類,以減少重復,代碼如下:

 

  1. public class SharedLocation { 
  2.  
  3. private String city; 
  4.  
  5. private String region; 
  6.  
  7. private String countryCode; 
  8.  
  9.  
  10. public class Location { 
  11.  
  12. private SharedLocation sharedLocation; 
  13.  
  14. double longitude; 
  15.  
  16. double latitude; 
  17.  

 

通過優化,數據存儲大小減到了 20G 左右。但對于內存存儲這個數據來說,依然很大,怎么辦呢?

這個案例來自一位 Twitter 工程師在 QCon 全球軟件開發大會上的演講,他們想到的解決方法,就是使用 String.intern 來節省內存空間,從而優化 String 對象的存儲。

具體做法就是,在每次賦值的時候使用 String 的 intern 方法,如果常量池中有相同值,就會重復使用該對象,返回對象引用,這樣一開始的對象就可以被回收掉。這種方式可以使重復性非常高的地址信息存儲大小從 20G 降到幾百兆。

 

  1. SharedLocation sharedLocation = new SharedLocation(); 
  2.  
  3. sharedLocation.setCity(messageInfo.getCity().intern()); sharedLocation.setCountryCode(messageInfo.getRegion().intern()); 
  4.  
  5. sharedLocation.setRegion(messageInfo.getCountryCode().intern()); 
  6.  
  7. Location location = new Location(); 
  8.  
  9. location.set(sharedLocation); 
  10.  
  11. location.set(messageInfo.getLongitude()); 
  12.  
  13. location.set(messageInfo.getLatitude()); 

 

為了更好地理解,我們再來通過一個簡單的例子,回顧下其中的原理:

 

  1. String a =new String("abc").intern(); 
  2.  
  3. String b = new String("abc").intern(); 
  4.  
  5. if(a==b) { 
  6.  
  7. System.out.print("a==b"); 
  8.  

 

輸出結果:

 

  1. a==b 

在字符串常量中,默認會將對象放入常量池;在字符串變量中,對象是會創建在堆內存中,同時也會在常量池中創建一個字符串對象,復制到堆內存對象中,并返回堆內存對象引用。

如果調用 intern 方法,會去查看字符串常量池中是否有等于該對象的字符串的引用,如果沒有,在 JDK1.6 版本中會復制堆中的字符串到常量池中,并返回該字符串引用,堆內存中原有的字符串由于沒有引用指向它,將會通過垃圾回收器回收。

在 JDK1.7 版本以后,由于常量池已經合并到了堆中,所以不會再復制具體字符串了,只是會把首次遇到的字符串的引用添加到常量池中;如果有,就返回常量池中的字符串引用。

了解了原理,我們再一起看下上邊的例子。

在一開始字符串“abc”會在加載類時,在常量池中創建一個字符串對象。

創建 a 變量時,調用 new String() 會在堆內存中創建一個 String 對象,String 對象中的 char 數組將會引用常量池中字符串。在調用 intern 方法之后,會去常量池中查找是否有等于該字符串對象的引用,有就返回引用。

創建 b 變量時,調用 new String() 會在堆內存中創建一個 String 對象,String 對象中的 char 數組將會引用常量池中字符串。在調用 intern 方法之后,會去常量池中查找是否有等于該字符串對象的引用,有就返回引用。

而在堆內存中的兩個對象,由于沒有引用指向它,將會被垃圾回收。所以 a 和 b 引用的是同一個對象。

如果在運行時,創建字符串對象,將會直接在堆內存中創建,不會在常量池中創建。所以動態創建的字符串對象,調用 intern 方法,在 JDK1.6 版本中會去常量池中創建運行時常量以及返回字符串引用,在 JDK1.7 版本之后,會將堆中的字符串常量的引用放入到常量池中,當其他堆中的字符串對象通過 intern 方法獲取字符串對象引用時,則會去常量池中判斷是否有相同值的字符串的引用,此時有,則返回該常量池中字符串引用,跟之前的字符串指向同一地址的字符串對象。

以一張圖來總結 String 字符串的創建分配內存地址情況:

使用 intern 方法需要注意的一點是,一定要結合實際場景。因為常量池的實現是類似于一個 HashTable 的實現方式,HashTable 存儲的數據越大,遍歷的時間復雜度就會增加。如果數據過大,會增加整個字符串常量池的負擔。

3. 如何使用字符串的分割方法?

Split() 方法使用了正則表達式實現了其強大的分割功能,而正則表達式的性能是非常不穩定的,使用不恰當會引起回溯問題,很可能導致 CPU 居高不下。

所以我們應該慎重使用 Split() 方法,我們可以用 String.indexOf() 方法代替 Split() 方法完成字符串的分割。如果實在無法滿足需求,你就在使用 Split() 方法時,對回溯問題加以重視就可以了。

六、總結

我們認識到做好 String 字符串性能優化,可以提高系統的整體性能。在這個理論基礎上,Java 版本在迭代中通過不斷地更改成員變量,節約內存空間,對 String 對象進行優化。

我們還特別提到了 String 對象的不可變性,正是這個特性實現了字符串常量池,通過減少同一個值的字符串對象的重復創建,進一步節約內存。

但也是因為這個特性,我們在做長字符串拼接時,需要顯示使用 StringBuilder,以提高字符串的拼接性能。最后,在優化方面,我們還可以使用 intern 方法,讓變量字符串對象重復使用常量池中相同值的對象,進而節約內存。

最后再分享一個個人觀點。那就是千里之堤,潰于蟻穴。日常編程中,我們往往可能就是對一個小小的字符串了解不夠深入,使用不夠恰當,從而引發線上事故。

比如,在我之前的工作經歷中,就曾因為使用正則表達式對字符串進行匹配,導致并發瓶頸,這里也可以將其歸納為字符串使用的性能問題。

【本文是51CTO專欄機構“AiChinaTech”的原創文章,微信公眾號( id: tech-AI)”】

 

戳這里,看該作者更多好文

 

責任編輯:華軒 來源: 51CTO
相關推薦

2024-01-03 08:20:05

Java字符串性能

2013-06-24 15:16:29

Java字符串拼接

2025-03-27 03:20:00

C#開發字符串

2022-05-18 10:56:58

Java字符串編碼

2011-06-08 15:45:41

字符串JAVA

2013-10-16 10:45:29

JVMJava

2009-09-02 16:21:20

C#字符串

2025-01-03 08:31:43

2009-08-21 15:06:09

C#連接字符串

2024-03-05 18:29:54

JavaString字符串

2010-06-28 15:18:51

SQL Server

2010-03-18 08:59:29

JVM字符串JVM常量池

2011-06-22 10:45:19

JAVA

2021-03-08 08:23:24

Java字符串截取

2015-08-14 09:37:44

Java字符串基本運算

2011-07-11 16:00:22

字符串拼接

2009-02-24 15:39:27

字符串比較函數函數

2025-06-30 02:11:00

2021-09-07 09:23:07

C++字符串算法

2020-09-03 10:13:49

JavaScript字符串pad
點贊
收藏

51CTO技術棧公眾號

91视频免费版污| 国产自产v一区二区三区c| 国产午夜精品久久| 欧美裸身视频免费观看| 欧美三级网色| 免费一级全黄少妇性色生活片| 视频在线日韩| 99视频一区二区| 久久99国产精品自在自在app| 精人妻一区二区三区| 九色porny丨首页在线| 校园春色另类视频| 夜夜嗨av一区二区三区中文字幕| 国产精品综合不卡av| 精品人妻无码一区二区三区换脸| 国产无遮挡裸体视频在线观看| 国产精品亚洲а∨天堂免在线| 日韩视频一区在线| 欧美激情第3页| 在线观看黄av| 欧美a级一区二区| 国产一区二区激情| 国产精品久久久毛片| 国产一级在线| 日韩va欧美va亚洲va久久| 亚洲欧美另类在线观看| 欧美亚洲国产成人| 国产一区二区在线观看免费播放| 又色又爽又高潮免费视频国产| 色综合视频在线| 一区二区日本视频| 日韩精品免费一线在线观看| 玩弄中年熟妇正在播放| 天堂在线资源8| 久久99国内精品| 久久中国妇女中文字幕| 在线观看中文av| 污污视频在线看| 成人高清视频免费观看| 国产91精品高潮白浆喷水| 美国黄色a级片| 久久亚洲精品爱爱| 亚洲欧美在线视频| 97中文在线观看| 亚洲一区欧美在线| 沈樵精品国产成av片| 在线观看日韩国产| 在线一区高清| 亚洲欧美另类一区| 久久精品男女| 精品国产依人香蕉在线精品| 日批视频在线看| 17videosex性欧美| 久久久久亚洲综合| 成人黄色av网| 国产午夜精品无码一区二区| 蜜桃精品wwwmitaows| 亚洲福利视频网| 国产三级三级三级看三级| 色在线视频观看| 中文字幕一区二区三区在线观看| 波多野结衣一区二区三区在线观看 | 欧美精品一区三区在线观看| 日本大臀精品| 九一久久久久久| 91麻豆swag| 日韩成人av在线| 69亚洲乱人伦| 色猫猫成人app| 色猫猫国产区一区二在线视频| 一级做a爰片久久| 亚洲精品一级片| 日本大胆欧美人术艺术动态 | 91欧美精品成人综合在线观看| 免费在线一级片| 国产综合久久| 在线观看久久av| 成人一区二区三区仙踪林| 中文字幕成在线观看| 国产精品久久影院| 免费看成人午夜电影| 99国产精品一区二区三区| 麻豆成人在线| 国产精品视频久久| 羞羞影院体验区| 一本一道久久a久久精品蜜桃| 亚洲美女av电影| 在线观看国产精品一区| 色777狠狠狠综合伊人| 日韩av中文字幕在线免费观看 | 久久五月婷婷丁香社区| 91超碰在线免费观看| 国精产品一品二品国精品69xx| 久久综合资源网| 中文字幕免费在线不卡| а√在线中文在线新版| 色激情天天射综合网| 在线观看免费污视频| 亚洲校园激情春色| 亚洲成人在线观看视频| 在线看视频不卡| 人人超在线公开视频| 亚洲美女精品一区| 夜夜春亚洲嫩草影视日日摸夜夜添夜 | 国模冰冰炮一区二区| 欧美日韩国产一级| 欧美成人免费高清视频| 91av久久| 欧美日韩亚洲综合| 五月婷婷狠狠操| 成人噜噜噜噜| 欧美一区二区三区在线观看视频| 182午夜在线观看| 97se亚洲| 亚洲第一免费网站| 国产黄色片在线| 日韩精品水蜜桃| 91国内精品久久| 日韩欧美亚洲一区二区三区| 免费在线观看视频一区| 国产精品一国产精品最新章节| 国产成人精品亚洲精品色欲| 精品无码三级在线观看视频| 91麻豆国产精品| 日韩三级电影网| 亚洲一线二线三线久久久| 日韩中文在线字幕| 免费男女羞羞的视频网站在线观看 | 另类小说一区二区三区| 国产精品国产三级国产aⅴ浪潮| 中文字幕激情小说| 久久国产精品99国产| 成人18视频| 蜜桃视频在线观看免费视频网站www| 国产精品国产三级国产有无不卡 | av毛片在线播放| 亚洲精品国产精华液| 毛片在线视频观看| 超碰在线97国产| 欧美日韩中文在线观看| 99久久国产宗和精品1上映| 波多野结衣欧美| 久久中文字幕国产| 亚洲一级在线播放| 国产精品亚洲一区二区三区妖精 | 欧美日韩亚洲视频一区| 国产成人久久777777| 国产精品毛片视频| 国产一区二区三区在线观看网站| 日本一级淫片免费放| 日一区二区三区| 牛人盗摄一区二区三区视频| 国产资源在线观看入口av| 精品福利一区二区三区| 中文字幕成人动漫| 爽好久久久欧美精品| 91免费看国产| 精产国品自在线www| 717成人午夜免费福利电影| 69亚洲乱人伦| 亚洲精品日本| 国产日韩欧美夫妻视频在线观看 | 久久99热狠狠色一区二区| 无码免费一区二区三区免费播放| av在线免费观看网址| 精品久久久久久中文字幕一区奶水| 久久久国产欧美| 日韩久久精品网| 91精品久久久久久久久青青| 成人福利在线观看视频| 欧美mv日韩mv国产| 农村老熟妇乱子伦视频| 久久超级碰视频| 亚洲av综合色区| 风间由美性色一区二区三区四区| 97视频在线观看成人| 91亚洲国产成人精品一区| eeuss鲁片一区二区三区在线观看 eeuss影院一区二区三区 | 免费av一级片| 国产精品灌醉下药二区| 国产福利精品一区二区三区| 岳的好大精品一区二区三区| 欧美日本在线视频中文字字幕| 国产高中女学生第一次| 午夜影院在线观看欧美| 国产黄色一区二区三区| 精品一级毛片| 欧美亚洲伦理www| 国产黄色片在线播放| 欧美性xxxx极品hd欧美风情| 亚洲最大成人综合网| 亚洲精品女人| 婷婷精品国产一区二区三区日韩 | 狠狠色综合网站久久久久久久| 成人在线免费看黄| 亚洲第一精品福利| 一级黄色a毛片| 午夜婷婷国产麻豆精品| 免费网站在线高清观看| 国产精品自在在线| 国产免费毛卡片| 欧美www视频在线观看| 国产福利精品在线| 清纯唯美亚洲色图| 欧美精品欧美精品系列| 天天操天天摸天天舔| 日本不卡在线视频| 欧美在线观看视频免费| 国语产色综合| 国产精品美乳在线观看| 日韩经典av| 亚洲最新中文字幕| 色呦呦中文字幕| 欧美男男青年gay1069videost| 国产一级特黄毛片| 国产精品久久久一区麻豆最新章节| 在线看黄色的网站| 国内精品伊人久久久久av一坑| 国产精品99久久免费黑人人妻| 亚洲大黄网站| 久久精品国产综合精品| 色黄视频在线观看| 久久99精品视频一区97| 高清日韩av电影| 亚洲精品美女在线观看| 亚洲精品一级片| 欧美日韩成人一区| 国产字幕在线观看| 国产精品福利一区二区| 丰满圆润老女人hd| 男人的天堂亚洲一区| 亚洲午夜精品久久久久久人妖| 午夜精品久久99蜜桃的功能介绍| 国产91精品入口17c| freexxx性亚洲精品| 久久综合88中文色鬼| av在线收看| 欧美一级高清大全免费观看| 日韩成人在线免费视频| 一区二区三区在线观看视频| 羞羞在线观看视频| 国产精品久久久久三级| 国产传媒视频在线| 中文字幕乱码一区二区免费| 成人免费黄色av| 麻豆精品视频在线观看免费| 久久综合伊人77777麻豆最新章节| 亚洲专区一区二区三区| 日韩三级电影网站| 欧洲一区在线| 秋霞av国产精品一区| 老司机在线视频二区| 中文字幕久久亚洲| 亚洲国产福利视频| 日韩一级完整毛片| 精品人妻久久久久一区二区三区| 婷婷一区二区三区| 日韩免费观看一区二区| 亚洲高清不卡在线| 日韩欧美三级视频| 日韩欧美在线一区| 日批视频免费观看| 亚洲影视在线观看| 国产中文字字幕乱码无限| 亚洲第一精品在线| 免费黄色网址在线| 欧洲国产伦久久久久久久| wwwwww在线观看| 9191久久久久久久久久久| 国产精品无码久久av| 日韩欧美国产成人| 黄色网址中文字幕| 亚洲成a天堂v人片| 欧美a∨亚洲欧美亚洲| 91激情在线视频| 国产精品毛片一区二区在线看舒淇 | 男女啊啊啊视频| 色美美综合视频| 一级片视频网站| 日韩免费成人网| 波多野结衣一区二区三区四区| 欧美日韩一区久久| www.黄色片| 亚洲精品视频中文字幕| 国产浮力第一页| 亚洲福利影片在线| 高h视频在线| 精品中文字幕视频| 松下纱荣子在线观看| 国产欧美韩国高清| 成人精品动漫一区二区三区| 国产私拍一区| 色97色成人| 九色自拍视频在线观看| 综合一区av| 成年网站在线免费观看| 99热免费精品| 九九热99视频| 成人一区二区三区视频在线观看 | 成人精品免费网站| 黄免费在线观看| 夜夜夜精品看看| 欧美在线视频精品| 精品国产亚洲一区二区三区在线观看| 韩国福利在线| 97在线视频免费| 亚洲欧美久久精品| 国产美女精品免费电影| 国产精品tv| 中文字幕一区二区三区四区五区六区| 亚洲激情专区| 欧洲在线免费视频| 久久日韩粉嫩一区二区三区| 一区二区在线观看免费视频| 亚洲免费电影在线| 一级片免费在线播放| 精品久久一区二区三区| 秋霞a级毛片在线看| 日韩av色在线| 成人精品动漫| 国产欧亚日韩视频| 香蕉视频一区二区三区| 性一交一乱一伧国产女士spa| 精品999日本| 不用播放器的免费av| 国产婷婷一区二区| 国产情侣在线视频| 日韩欧美久久久| 成人在线播放免费观看| 国产精品香蕉在线观看| 国产91久久精品一区二区| 97国产在线播放| 视频一区二区中文字幕| 黄色免费看视频| 久久精品视频一区二区三区| 日本熟妇成熟毛茸茸| 日韩三级在线免费观看| 成人在线直播| 亚洲影院污污.| 精品女人视频| 日产国产精品精品a∨ | 色悠悠久久综合网| 久久久国产精华| 亚洲s码欧洲m码国产av| 在线观看视频一区二区| 理论视频在线| 麻豆一区二区在线观看| 久久亚洲精品人成综合网| av色综合网| 欧美视频官网| 久久国产色av免费观看| 99re热视频这里只精品| 亚洲精品天堂网| 欧美色男人天堂| 亚洲乱亚洲乱妇| 国内精品一区二区三区| 亚洲a∨精品一区二区三区导航| 欧美日韩一区二区视频在线| 久久免费高清| 大吊一区二区三区| 欧美久久高跟鞋激| 午夜伦理在线视频| 国产精品日韩欧美一区二区| 亚洲日本视频| 亚洲一区二区三区蜜桃| 亚洲日本在线观看| 中文字幕精品无码一区二区| 亚洲欧美日韩中文视频| a∨色狠狠一区二区三区| 一区二区三区四区欧美日韩| 久久99久久99| 久久久99精品| 精品婷婷伊人一区三区三| 免费观看成人高潮| 91|九色|视频| 国产一区白浆| 国产乱淫av麻豆国产免费| 婷婷久久综合九色综合伊人色| 欧美日韩影视| 91久久国产精品| 亚洲一级高清| 无码少妇精品一区二区免费动态| 欧美日韩成人综合天天影院 | 自拍偷拍亚洲激情| 亚洲精品国产一区二| 欧美做受高潮电影o| 91偷拍一区二区三区精品| 91超薄肉色丝袜交足高跟凉鞋| 欧美日韩在线影院| 超碰在线免费播放| 欧美日韩综合久久| 国产麻豆午夜三级精品| 天天综合网入口| 久久韩国免费视频| 欧美高清视频看片在线观看 | 一区在线免费| 人成免费在线视频| 色屁屁一区二区| 成人免费高清| 欧美性xxxx69|