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

聊聊7種內(nèi)存泄露場景和13種解決方案

存儲
本文介紹了內(nèi)存泄露的原因以及常見的7種內(nèi)存泄露場景,針對每種內(nèi)存泄露的場景都提供了解決方案。另外,還為大家提供了6種額外的通用性解決策略。

 [[394859]]

前言

Java通過垃圾回收機(jī)制,可以自動的管理內(nèi)存,這對開發(fā)人員來說是多么美好的事啊。但垃圾回收器并不是萬能的,它能夠處理大部分場景下的內(nèi)存清理、內(nèi)存泄露以及內(nèi)存優(yōu)化。但它也并不是萬能的。

不然,我們在實(shí)踐的過程中也不會出現(xiàn)那么多因內(nèi)存泄露導(dǎo)致的生產(chǎn)事件了。但很多內(nèi)存泄露時間也是因?yàn)殚_發(fā)人員使用不當(dāng)導(dǎo)致的。

本篇文章我們就來聊聊內(nèi)存泄露的原因是什么,如何識別內(nèi)存泄露,以及如果在應(yīng)用程序中進(jìn)行處理。

什么是內(nèi)存泄露

什么是內(nèi)存泄露,通俗的來說就是堆中的一些對象已經(jīng)不會再被使用了,但垃圾收集器卻無法將它們從內(nèi)存中清除。

內(nèi)存泄漏很嚴(yán)重的問題,因?yàn)樗鼤枞麅?nèi)存資源并隨著時間的推移降低系統(tǒng)性能。如果不進(jìn)行有效的處理,最終的結(jié)果將會使應(yīng)用程序耗盡內(nèi)存資源,無法正常服務(wù),導(dǎo)致程序崩潰,拋出java.lang.OutOfMemoryError異常。

堆內(nèi)存中通常有兩種類型的對象:被引用的對象和未被引用的對象。被引用的對象是應(yīng)用程序中仍然具有活躍的引用,而未被引用的對象則沒有任何活躍的引用。

垃圾收集器會回收那些未被引用的對象,但不會回收那些還在被引用的對象。這也是內(nèi)存泄露發(fā)生的源頭。

內(nèi)存泄露往往有以下表象:

  • 當(dāng)應(yīng)用程序長時間連續(xù)運(yùn)行時,性能嚴(yán)重下降;
  • 拋出OutOfMemoryError異常;
  • 程序莫名其妙的自動崩潰;
  • 應(yīng)用程序耗盡鏈接對象。

當(dāng)然,如果打印GC日志,有些場景下還會看到頻繁執(zhí)行full GC等狀況。下面就具體分析一下這些場景和處理方案。

Java中內(nèi)存泄露分類

在任何一個應(yīng)用程序中,發(fā)生內(nèi)存泄露往往由很多原因構(gòu)成。下面我們就聊聊最常見的一些內(nèi)存泄露場景。

靜態(tài)屬性導(dǎo)致內(nèi)存泄露

會導(dǎo)致內(nèi)存泄露的一種情況就是大量使用static靜態(tài)變量。在Java中,靜態(tài)屬性的生命周期通常伴隨著應(yīng)用整個生命周期(除非ClassLoader符合垃圾回收的條件)。

下面來看一個具體的會導(dǎo)致內(nèi)存泄露的實(shí)例:

  1. public class StaticTest { 
  2.     public static List<Double> list = new ArrayList<>(); 
  3.  
  4.     public void populateList() { 
  5.         for (int i = 0; i < 10000000; i++) { 
  6.             list.add(Math.random()); 
  7.         } 
  8.         Log.info("Debug Point 2"); 
  9.     } 
  10.  
  11.     public static void main(String[] args) { 
  12.         Log.info("Debug Point 1"); 
  13.         new StaticTest().populateList(); 
  14.         Log.info("Debug Point 3"); 
  15.     } 

如果監(jiān)控內(nèi)存堆內(nèi)存的變化,會發(fā)現(xiàn)在打印Point1和Point2之間,堆內(nèi)存會有一個明顯的增長趨勢圖。

但當(dāng)執(zhí)行完populateList方法之后,對堆內(nèi)存并沒有被垃圾回收器進(jìn)行回收。

上圖為VisualVM監(jiān)控顯示的信息,關(guān)于VisualVM的使用這里就不再贅述了,可參考文章《沒有監(jiān)控過JVM內(nèi)存的職場生涯,是不完美的》。

但針對上述程序,如果將定義list的變量前的static關(guān)鍵字去掉,再次執(zhí)行程序,會發(fā)現(xiàn)內(nèi)存發(fā)生了具體的變化。VisualVM監(jiān)控信息如下圖:

對比兩個圖可以看出,程序執(zhí)行的前半部分內(nèi)存使用情況都一樣,但當(dāng)執(zhí)行完populateList方法之后,后者不再有引用指向?qū)?yīng)的數(shù)據(jù),垃圾回收器便進(jìn)行了回收操作。

因此,我們要十分留意static的變量,如果集合或大量的對象定義為static的,它們會停留在整個應(yīng)用程序的生命周期當(dāng)中。而它們所占用的內(nèi)存空間,本可以用于其他地方。

那么如何優(yōu)化呢?第一,進(jìn)來減少靜態(tài)變量;第二,如果使用單例,盡量采用懶加載。

未關(guān)閉的資源

無論什么時候當(dāng)我們創(chuàng)建一個連接或打開一個流,JVM都會分配內(nèi)存給這些資源。比如,數(shù)據(jù)庫鏈接、輸入流和session對象。

忘記關(guān)閉這些資源,會阻塞內(nèi)存,從而導(dǎo)致GC無法進(jìn)行清理。特別是當(dāng)程序發(fā)生異常時,沒有在finally中進(jìn)行資源關(guān)閉的情況。

這些未正常關(guān)閉的連接,如果不進(jìn)行處理,輕則影響程序性能,重則導(dǎo)致OutOfMemoryError異常發(fā)生。

如果進(jìn)行處理呢?第一,始終記得在finally中進(jìn)行資源的關(guān)閉;第二,關(guān)閉連接的自身代碼不能發(fā)生異常;第三,Java7以上版本可使用try-with-resources代碼方式進(jìn)行資源關(guān)閉。

不當(dāng)?shù)膃quals方法和hashCode方法實(shí)現(xiàn)

當(dāng)我們定義個新的類時,往往需要重寫equals方法和hashCode方法。在HashSet和HashMap中的很多操作都用到了這兩個方法。如果重寫不得當(dāng),會造成內(nèi)存泄露的問題。

下面來看一個具體的實(shí)例:

  1. public class Person { 
  2.     public String name
  3.      
  4.     public Person(String name) { 
  5.         this.name = name
  6.     } 

現(xiàn)在將重復(fù)的Person對象插入到Map當(dāng)中。我們知道Map的key是不能重復(fù)的。

  1. @Test 
  2. public void givenMap_whenEqualsAndHashCodeNotOverridden_thenMemoryLeak() { 
  3.     Map<Person, Integer> map = new HashMap<>(); 
  4.     for(int i=0; i<100; i++) { 
  5.         map.put(new Person("jon"), 1); 
  6.     } 
  7.     Assert.assertFalse(map.size() == 1); 

上述代碼中將Person對象作為key,存入Map當(dāng)中。理論上當(dāng)重復(fù)的key存入Map時,會進(jìn)行對象的覆蓋,不會導(dǎo)致內(nèi)存的增長。

但由于上述代碼的Person類并沒有重寫equals方法,因此在執(zhí)行put操作時,Map會認(rèn)為每次創(chuàng)建的對象都是新的對象,從而導(dǎo)致內(nèi)存不斷的增長。

VisualVM中顯示信息如下圖:

當(dāng)重寫equals方法和hashCode方法之后,Map當(dāng)中便只會存儲一個對象了。方法的實(shí)現(xiàn)如下:

  1. public class Person { 
  2.     public String name
  3.      
  4.     public Person(String name) { 
  5.         this.name = name
  6.     } 
  7.      
  8.     @Override 
  9.     public boolean equals(Object o) { 
  10.         if (o == this) return true
  11.         if (!(o instanceof Person)) { 
  12.             return false
  13.         } 
  14.         Person person = (Person) o; 
  15.         return person.name.equals(name); 
  16.     } 
  17.      
  18.     @Override 
  19.     public int hashCode() { 
  20.         int result = 17; 
  21.         result = 31 * result + name.hashCode(); 
  22.         return result; 
  23.     } 

經(jīng)過上述修改之后,Assert中判斷Map的size便會返回true。

  1. @Test 
  2. public void givenMap_whenEqualsAndHashCodeNotOverridden_thenMemoryLeak() { 
  3.     Map<Person, Integer> map = new HashMap<>(); 
  4.     for(int i=0; i<2; i++) { 
  5.         map.put(new Person("jon"), 1); 
  6.     } 
  7.     Assert.assertTrue(map.size() == 1); 

重寫equals方法和hashCode方法之后,堆內(nèi)存的變化如下圖:

另外的例子就是當(dāng)使用ORM框架,如Hibernate時,會使用equals方法和hashCode方法進(jìn)行對象的的分析和緩存操作。

如果不重寫這些方法,則發(fā)生內(nèi)存泄漏的可能性非常高,因?yàn)镠ibernate將無法比較對象(每次都是新對象),然后不停的更新緩存。

如何進(jìn)行處理?第一,如果創(chuàng)建一個實(shí)體類,總是重寫equals方法和hashCode方法;第二,不僅要覆蓋默認(rèn)的方法實(shí)現(xiàn),而且還要考慮最優(yōu)的實(shí)現(xiàn)方式;

外部類引用內(nèi)部類

這種情況發(fā)生在非靜態(tài)內(nèi)部類(匿名類)中,在類初始化時,內(nèi)部類總是需要外部類的一個實(shí)例。

每個非靜態(tài)內(nèi)部類默認(rèn)都持有外部類的隱式引用。如果在應(yīng)用程序中使用該內(nèi)部類的對象,即使外部類使用完畢,也不會對其進(jìn)行垃圾回收。

假設(shè)一個類,其中包含大量笨重對象的引用,并且具有一個非靜態(tài)內(nèi)部類。當(dāng)我們創(chuàng)建內(nèi)部類的對象時,內(nèi)存模型如下所示:

如果將內(nèi)部類聲明為static的,那么內(nèi)存曲線則像從寫equals和hashCode方法之后的圖一樣,是一條平穩(wěn)的直線。

此種情況,之所以發(fā)生內(nèi)存泄露,是因?yàn)閮?nèi)部類對象隱含的持有外部類的引用,從而導(dǎo)致外部類成為垃圾對象時卻無法被正常回收。使用匿名類的時候也會發(fā)生類似的情況。

如何避免此種情況?如果內(nèi)部類不需要訪問外部類的成員信息,可以考慮將其轉(zhuǎn)換為靜態(tài)內(nèi)部類。

finalize()方法

使用finalize()方法會存在潛在的內(nèi)存泄露問題,每當(dāng)一個類的finalize()方法被重寫時,該類的對象就不會被GC立即回收。GC會將它們放入隊(duì)列進(jìn)行最終確定,在以后的某個時間點(diǎn)進(jìn)行回收。

如果finalize()方法重寫的不合理或finalizer隊(duì)列無法跟上Java垃圾回收器的速度,那么遲早,應(yīng)用程序會出現(xiàn)OutOfMemoryError異常。

假設(shè)某個類重寫了finalize()方法,并且重寫的方法在執(zhí)行時需要一些時間。如果存在大量該對象,垃圾回收時,在VisualVM中的曲線如下:

如果去掉重寫的finalize()方法,同樣的程序,展示的曲線如下:

如果避免此種情況發(fā)生呢?始終避免使用finalizer。

String的intern方法

字符串常量池在Java7中從PermGen移動到了堆空間。在Java6及以前版本,我們使用字符串時要多加小心。

如果讀取了一個大字符串對象,并且調(diào)用其intern方法,intern()會將String放在JVM的內(nèi)存池中(PermGen),而JVM的內(nèi)存池是不會被GC的。同樣會造成程序性能降低和內(nèi)存溢出問題。

JDK1.6中PermGen中存儲大對象示例:

如何避免此種情況發(fā)生?第一,最簡單的方式是更新JDK版到7及以上;第二,如果無法避免,則可調(diào)整PermGen大小,避免OutOfMemoryErrors溢出。

PermGen相關(guān)配置:

  1. -XX:MaxPermSize=512m 

使用ThreadLocal

ThreadLocal提供了線程本地變量,它可以保證訪問到的變量屬于當(dāng)前線程,每個線程都保存有一個變量副本,每個線程的變量都不同。ThreadLocal相當(dāng)于提供了一種線程隔離,將變量與線程相綁定,從而實(shí)現(xiàn)線程安全的特性。

ThreadLocal的實(shí)現(xiàn)中,每個Thread維護(hù)一個ThreadLocalMap映射表,key是ThreadLocal實(shí)例本身,value是真正需要存儲的Object。

ThreadLocalMap使用ThreadLocal的弱引用作為key,如果一個ThreadLocal沒有外部強(qiáng)引用來引用它,那么系統(tǒng)GC時,這個ThreadLocal勢必會被回收,這樣一來,ThreadLocalMap中就會出現(xiàn)key為null的Entry,就沒有辦法訪問這些key為null的Entry的value。

如果當(dāng)前線程遲遲不結(jié)束的話,這些key為null的Entry的value就會一直存在一條強(qiáng)引用鏈:Thread Ref -> Thread -> ThreaLocalMap -> Entry -> value永遠(yuǎn)無法回收,造成內(nèi)存泄漏。

如何解決此問題?

第一,使用ThreadLocal提供的remove方法,可對當(dāng)前線程中的value值進(jìn)行移除;

第二,不要使用ThreadLocal.set(null) 的方式清除value,它實(shí)際上并沒有清除值,而是查找與當(dāng)前線程關(guān)聯(lián)的Map并將鍵值對分別設(shè)置為當(dāng)前線程和null。

第三,最好將ThreadLocal視為需要在finally塊中關(guān)閉的資源,以確保即使在發(fā)生異常的情況下也始終關(guān)閉該資源。

  1. try { 
  2.     threadLocal.set(System.nanoTime()); 
  3.     //... further processing 
  4. } finally { 
  5.     threadLocal.remove(); 

處理內(nèi)存泄漏的其他策略

盡管在處理內(nèi)存泄漏時沒有萬能的解決方案,但是有一些方法可以使內(nèi)存泄漏最小化。

啟用分析

我們可通過一些工具,用來對應(yīng)用應(yīng)用程序的內(nèi)存使用情況等進(jìn)行監(jiān)控和診斷,從而找到最佳的利用系統(tǒng)資源的方案。

類似的工具有前面我們提到的VisualVM,還有Mission Control,JProfiler,YourKit,Java VisualVM和Netbeans Profiler等。

顯示垃圾回收詳情

通過啟用垃圾收集詳情日志,可以對GC的詳細(xì)進(jìn)行跟蹤。通過以下命令進(jìn)行啟動:

  1. -verbose:gc 

通過添加此參數(shù),我們可以看到GC內(nèi)部發(fā)生的情況的詳細(xì)信息:

使用引用對象避免內(nèi)存泄漏

在Java中,我們還可以使用java.lang.ref包內(nèi)置引用對象來處理內(nèi)存泄漏。使用java.lang.ref包,而不是直接引用對象,我們對對象使用特殊的引用,從而確保它們可以輕松地被垃圾回收。

IDE警告

無論是Eclipse還是IDEA,如果安裝對應(yīng)的插件(比如阿里巴巴開發(fā)手冊插件等),當(dāng)寫代碼中出現(xiàn)內(nèi)存泄露風(fēng)險代碼時,IDE會進(jìn)行警告提醒,從而從源頭上避免內(nèi)存泄露的代碼出現(xiàn)在生產(chǎn)環(huán)境。

基準(zhǔn)測試

通過執(zhí)行基準(zhǔn)測試來衡量和分析Java代碼的性能,從而選擇更合理的解決方案。

Code Review

這也是最古老,最有效的方式之一,通過經(jīng)驗(yàn)豐富的開發(fā)人員對代碼的Review或多人進(jìn)行Review,從而達(dá)到查漏補(bǔ)缺的效果,排除一些常見的內(nèi)存泄露問題。

小結(jié)

本文介紹了內(nèi)存泄露的原因以及常見的7種內(nèi)存泄露場景,針對每種內(nèi)存泄露的場景都提供了解決方案。另外,還為大家提供了6種額外的通用性解決策略。

但針對內(nèi)存泄露來說,這還是九牛一毛,不同的代碼,不同的場景都會出現(xiàn)一些未知的內(nèi)存泄露問題,同時也沒有萬能的解決方案。這就需要我們了解內(nèi)存泄露的根本原因,同時掌握一些基本的分析方法和策略,以便靈活應(yīng)對。

 

責(zé)任編輯:武曉燕 來源: 程序新視界
相關(guān)推薦

2020-08-20 20:51:17

打散算法打散法原算法

2015-11-06 14:53:37

數(shù)據(jù)中心節(jié)能

2022-08-05 08:27:05

分布式系統(tǒng)線程并發(fā)

2020-06-01 14:16:51

交通擁堵物聯(lián)網(wǎng)智慧城市

2024-12-02 14:30:20

2022-05-02 21:47:13

并發(fā)編程線程

2021-07-05 08:09:54

@AutowiredSpringMapper

2019-04-04 13:11:37

React內(nèi)存泄露memory leak

2010-01-12 12:15:25

SOA安全解決方案

2018-05-04 07:36:35

醫(yī)療行業(yè)物聯(lián)網(wǎng)IoT

2024-03-26 12:08:53

分布式事務(wù)存儲

2021-09-26 09:17:01

Python命令定時任務(wù)

2010-09-30 14:35:36

JS浮點(diǎn)溢出

2010-03-26 18:41:51

Nginx 502錯誤

2009-12-14 15:29:48

解決方案SOA安全

2025-02-24 16:00:00

SpringBoot定時任務(wù)開發(fā)

2010-09-30 14:40:45

2023-04-14 14:54:29

2019-03-26 19:30:47

開源備份解決方案

2024-11-12 15:42:06

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

91好色先生tv| 少妇大叫太粗太大爽一区二区| 九七久久人人| 国产超碰在线一区| 日韩av第一页| 男的操女的网站| 一本色道久久综合狠狠躁的番外| 欧美日韩激情一区二区三区| 日本大片免费看| 国产高清免费在线播放| 国产东北露脸精品视频| 国产精品扒开腿爽爽爽视频| 久久99久久久| 成人亚洲一区二区| 亚洲精品www久久久| 亚洲小视频网站| 涩涩视频在线播放| 综合久久久久综合| 欧美日韩免费观看一区| 性欧美18一19性猛交| 奇米四色…亚洲| 欧美一级视频免费在线观看| 日日骚一区二区三区| 精品大片一区二区| 日韩av在线网| 激情小说欧美色图| 欧美黄页免费| 色婷婷一区二区三区四区| 久久久久久久久网| 在线免费黄色| 国产亚洲欧洲997久久综合| 国产91一区二区三区| 午夜一级黄色片| 亚洲永久字幕| 九九久久精品一区| 一级黄色片日本| 日韩亚洲一区在线| 亚洲天堂av图片| 大黑人交xxx极品hd| 亚洲91网站| 欧美一级高清片在线观看| 一区二区三区入口| 欧美日韩在线精品一区二区三区激情综合 | 国产成人精品一区二区在线| 久久精品视频久久| 欧美国产三级| 美女啪啪无遮挡免费久久网站| 国产三级短视频| 欧美三级美国一级| 国产亚洲欧洲黄色| 最新中文字幕av| 黑人操亚洲人| 国产一区二区免费| 超薄肉色丝袜一二三| 欧美亚洲国产一区| 中文字幕日韩电影| 欧美午夜激情影院| 成人情趣视频网站| 精品国产视频在线| 老女人性淫交视频| 国内精品99| 欧美极品欧美精品欧美视频 | 欧美视频不卡中文| 日韩av资源在线| 成人激情综合| 欧美色图在线观看| 亚洲日本黄色片| 国产高清视频一区二区| 日韩一区二区三区电影| 成人一区二区三区仙踪林| 亚洲精品v亚洲精品v日韩精品| 日韩视频免费观看高清完整版在线观看 | 波多野结衣在线aⅴ中文字幕不卡| 国产伦精品一区二区三区照片 | 欧美黑人xxxx| www.av麻豆| 天堂av在线一区| 国产原创欧美精品| 精品国产伦一区二区三区| www.在线欧美| 日本一区视频在线观看免费| 中文字幕日本在线| 亚洲一区中文在线| 欧美精品一区免费| 精品久久久网| 精品噜噜噜噜久久久久久久久试看 | 国产免费av一区二区| 久久激情综合| 成人免费观看网址| 欧美一级一区二区三区| 中文字幕不卡的av| 真人抽搐一进一出视频| 成人开心激情| 日韩精品一区二区三区四区视频| 超碰97人人干| 中出一区二区| 日韩美女在线观看一区| 国产黄色一区二区| 久久九九国产精品| 成人在线视频一区二区三区| 成人av观看| 欧美一级电影网站| 谁有免费的黄色网址| 欧美三级不卡| 国产精品无av码在线观看| 性一交一乱一乱一视频| 日本一区二区三区视频视频| 久久av高潮av| 久久爱.com| 亚洲精品美女免费| 亚洲欧美精品aaaaaa片| 久久久水蜜桃av免费网站| 2019国产精品视频| 成年人在线观看| 午夜成人免费视频| 国产精品中文久久久久久| 精品国产精品| 欧美在线一级视频| 亚洲爱情岛论坛永久| 中文成人av在线| 日韩精品一区二区三区久久| 伊人久久大香线蕉av超碰| 最近的2019中文字幕免费一页 | 国产一区第一页| 日韩电影一区二区三区四区| 国产伦精品一区二区三区四区视频| 麻豆系列在线观看| 欧美日韩亚洲综合一区| 欧洲女同同性吃奶| 亚洲深爱激情| 国产精品一区二| 在线观看a级片| 欧美久久一二三四区| www.日本高清视频| 日韩精品一级中文字幕精品视频免费观看| 韩国成人动漫在线观看| 牛牛精品视频在线| 日韩久久精品一区| 校园春色 亚洲| 国产精品91xxx| 经典三级在线视频| 国产日本亚洲| 九九热这里只有精品6| 国产成人麻豆精品午夜在线| 亚洲欧美日韩中文字幕一区二区三区 | 精品亚洲一区二区三区四区五区| 国产网友自拍视频| www.成人网.com| 国产亚洲欧美在线视频| 婷婷精品在线观看| 国产精品99久久久久久久久久久久 | 中文字幕精品三级久久久| av日韩在线网站| 欧美精品一区免费| 国产精品自拍区| 国产精品亚洲精品| 岛国成人毛片| 日韩免费性生活视频播放| 国产福利久久久| 99久久婷婷国产综合精品| 日韩精品xxxx| 精品国产一区二区三区久久久蜜臀| 国产精品99久久久久久久久久久久| 一区二区三区四区影院| 欧美韩日高清| 亚洲www视频| 美足av综合网| 亚洲精品久久久一区二区三区| av资源免费观看| 国产欧美一区二区在线| 成人综合久久网| 伊人久久大香线蕉综合热线| 精品视频免费观看| 成人在线网站| 免费不卡在线观看av| 日本美女一级视频| 在线观看日韩毛片| 在线看的片片片免费| 高清不卡一区二区| 97视频在线免费播放| 久久在线播放| 国产免费一区| 懂色aⅴ精品一区二区三区| 久久在线精品视频| 日本国产在线| 91精品国产一区二区人妖| 日本少妇吞精囗交| 国产精品天干天干在观线| 又黄又爽又色的视频| 久久婷婷一区| 欧洲金发美女大战黑人| 外国成人在线视频| 亚洲一区二区中文字幕| 亚洲黄色免费av| www.亚洲一区| 亚洲三区在线观看无套内射| 欧美日本国产视频| 午夜精品久久久久久久久久久久久蜜桃 | 日本道色综合久久| 久热这里有精品| 久久久久久夜精品精品免费| 在线播放黄色av| 久久美女性网| 欧日韩免费视频| 欧美顶级大胆免费视频| 欧美不卡福利| 中文字幕一区二区三区中文字幕 | 一级全黄裸体免费视频| 岛国av一区二区三区| 永久久久久久久| 国产欧美日韩一区二区三区在线观看 | 免费在线精品视频| 沈樵精品国产成av片| 成人女人免费毛片| 91亚洲精品在看在线观看高清| 欧美在线不卡区| 综合图区亚洲| 视频直播国产精品| 狠狠v欧美ⅴ日韩v亚洲v大胸| 精品少妇一区二区三区免费观看| 一卡二卡在线观看| 日本精品一区二区三区四区的功能| 久草资源在线视频| 亚洲毛片av在线| 黄色一级大片在线免费观看| 国产日韩精品一区二区三区| 给我免费观看片在线电影的| 国产成人自拍在线| 天堂中文av在线| 久久精品国产一区二区三区免费看| 成人性视频欧美一区二区三区| 夜夜嗨一区二区三区| 欧美国产综合在线| 一区二区国产在线| 大桥未久一区二区| 久久精品av| 亚洲一区三区视频在线观看| av影片在线一区| 视频一区二区三区免费观看| 少妇精品久久久| 欧美日韩一区二区视频在线观看| 欧美日韩一区二区三区不卡视频| 国产成人av一区二区三区| 精品国产第一国产综合精品| 成人在线免费观看视视频| 亚洲伊人伊成久久人综合网| 国产免费一区视频观看免费 | 欧美日韩一区国产| 中文字幕一区二区在线视频 | 欧美性感美女一区二区| 亚洲国产一区二区精品视频| 日韩精品久久| 精品日韩在线播放| 午夜电影亚洲| 丁香六月激情网| 91久久中文| 久草青青在线观看| 日本欧美在线看| 岛国av免费在线| 国产精品 日产精品 欧美精品| 色黄视频免费看| 成人精品国产一区二区4080| 中文字幕在线播放视频| 久久久国产综合精品女国产盗摄| 国产高清一区二区三区四区| 国产精品青草久久| 久久久久久久黄色| 欧美性xxxxx极品| 特级西西444www大胆免费看| 欧美一区二区三区四区视频| 色哟哟国产精品色哟哟| 亚洲网站视频福利| 日本免费在线视频| 欧美精品videosex牲欧美| 中国字幕a在线看韩国电影| 国产精品久久久久aaaa九色| av在线成人| 蜜桃久久精品乱码一区二区| 波多野结衣在线观看一区二区三区| 在线观看免费黄色片| 亚洲一区欧美激情| 毛片毛片毛片毛| www.欧美日韩国产在线| 在线观看日本黄色| 亚洲成精国产精品女| 超碰在线免费97| 欧美va亚洲va在线观看蝴蝶网| 日本视频在线观看一区二区三区| 日韩三级成人av网| 极品在线视频| 成人黄在线观看| 你懂的视频欧美| 在线观看三级网站| 葵司免费一区二区三区四区五区| 一个人看的视频www| 久久精品亚洲一区二区三区浴池| 在线免费观看亚洲视频| 色哟哟日韩精品| 好吊色视频一区二区| 日韩视频中文字幕| 新版的欧美在线视频| 91人人爽人人爽人人精88v| 日韩在线影视| 成人免费a级片| 精品一区二区三区免费观看 | 三级网站在线看| 久久精品2019中文字幕| 亚洲高清黄色| 精品免费视频123区| 欧美一区久久| 91国产精品视频在线观看| 91亚洲国产成人精品一区二区三| 日本妇女毛茸茸| 欧美日韩国产影片| 久香视频在线观看| 91高潮精品免费porn| 91蜜桃臀久久一区二区| 强伦女教师2:伦理在线观看| 久久综合影音| 久久精品一区二区免费播放| 亚洲电影第三页| 午夜精品久久久久久久99老熟妇 | 亚洲女人被黑人巨大进入| 国产精品探花在线| 99电影在线观看| 久久久久久久久国产一区| 91极品尤物在线播放国产| 26uuu亚洲综合色| 久久午夜免费视频| 亚洲国产一区二区三区四区 | 国产精品丝袜白浆摸在线| 亚洲丝袜美腿一区| 亚洲午夜无码av毛片久久| 99在线视频精品| 亚洲 欧美 日韩 综合| 日韩精品高清在线| 亚洲妇女成熟| 久久久亚洲综合网站| 亚洲伦伦在线| 国产精品无码一区二区三| 午夜精品成人在线视频| 午夜在线观看视频18| 欧美孕妇与黑人孕交| 久久av中文| 噼里啪啦国语在线观看免费版高清版| 久久久久久久av麻豆果冻| 欧美成人一区二区视频| 日韩有码在线观看| 老司机亚洲精品一区二区| 青青草免费在线视频观看| 国产一区999| 久久久久久久国产视频| 亚洲精品二三区| 香蕉视频亚洲一级| 一区不卡字幕| 国产成人精品三级麻豆| 国产精品2020| 亚洲欧美激情另类校园| 成人国产在线| 蜜臀av.com| 9l国产精品久久久久麻豆| 午夜婷婷在线观看| 中文字幕日韩高清| 一区二区三区视频播放| 无码中文字幕色专区| 久久久久国产精品人| 91在线观看喷潮| 欧美精品18videosex性欧美| 天堂俺去俺来也www久久婷婷 | 国产又黄又爽又色| 亚洲午夜精品久久久久久久久久久久| 成人激情视屏| 白白操在线视频| 久久先锋影音av鲁色资源| 亚洲国产无线乱码在线观看| 免费99精品国产自在在线| 五月激激激综合网色播| 91n.com在线观看| 一区二区在线免费观看| 日韩专区一区二区| 成人深夜直播免费观看| 在线亚洲精品| 日日碰狠狠添天天爽| 亚洲二区中文字幕| 日韩国产大片| 久久亚洲中文字幕无码| 国产精品天天看| 午夜激情在线视频| 国产啪精品视频网站| 在线欧美福利| 五月天免费网站| 日韩精品视频三区| 国产区一区二| 九九九在线观看视频| 亚洲一区二区三区四区在线观看 | 亚洲综合色在线| 9色在线视频| 久久久综合香蕉尹人综合网| 国内精品久久久久影院薰衣草 | 国产真实乱偷精品视频免|