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

簡(jiǎn)析Android的垃圾回收與內(nèi)存泄露

移動(dòng)開(kāi)發(fā) Android
Android系統(tǒng)是運(yùn)行在Java虛擬機(jī)上的,作為嵌入式設(shè)備,內(nèi)存往往非常有限,了解Android的垃圾回收機(jī)制,可以有效的防止內(nèi)存泄露問(wèn)題或者OOM問(wèn)題。本文作為入門文章,將淺顯的討論垃圾回收與內(nèi)存泄露的原理,不討論Dalvik虛擬機(jī)底層機(jī)制或者native層面的問(wèn)題。

Android系統(tǒng)是運(yùn)行在Java虛擬機(jī)上的,作為嵌入式設(shè)備,內(nèi)存往往非常有限,了解Android的垃圾回收機(jī)制,可以有效的防止內(nèi)存泄露問(wèn)題或者OOM問(wèn)題。本文作為入門文章,將淺顯的討論垃圾回收與內(nèi)存泄露的原理,不討論Dalvik虛擬機(jī)底層機(jī)制或者native層面的問(wèn)題。

1. 基礎(chǔ)

在分析垃圾回收前,我們要復(fù)習(xí)Java與離散數(shù)學(xué)的基礎(chǔ)。

  • 實(shí)例化:對(duì)象是類的一個(gè)實(shí)例,創(chuàng)建對(duì)象的過(guò)程也叫類的實(shí)例化。對(duì)象是以類為模板來(lái)創(chuàng)建的。比如Car car = new Car();,我們就創(chuàng)造了一個(gè)Car的實(shí)例(Create new class instance of Car)
  • 引用:某些對(duì)象的實(shí)例化需要其它的對(duì)象實(shí)例,比如ImageView的實(shí)例化就需要Context對(duì)象,就是表示ImageView對(duì)于Context持有引用(ImageView holds a reference to Context)。
  • 有向圖:在每條邊上都標(biāo)有有向線段的圖稱為有向圖,Java中的garbage collection采用有向圖的方式進(jìn)行內(nèi)存管理,箭頭的方向表示引用關(guān)系,比如 B ← A ,就是B中需要A,B引用A。
  • 可達(dá):有向圖D={S,R}中,對(duì)于Si,Sj 屬于S,如果從Si到Sj有任何一條通路存在,則可稱Si可達(dá)Sj。也就是說(shuō),當(dāng)B ← A中間箭頭斷了,就稱作不可達(dá),這時(shí)A就不可達(dá)B了。
  • Shallow heap 與 Retain heap 的對(duì)比
    • Shallow heap表示當(dāng)前對(duì)象所消耗的內(nèi)存
    • Retained heap表示當(dāng)前對(duì)象所消耗的內(nèi)存加上它引用的內(nèi)存總合 

 

 

 

Google I/O 2011: Memory management for Android Apps

上圖的橙色的Object是該有向圖的起點(diǎn),它的Shallow heap是100,而它的Retained heap是100 + 300 = 400。

2. 什么是垃圾回收

Java GC(Garbage Collection,垃圾收集,垃圾回收)機(jī)制,是Java與C++/C的主要區(qū)別之一,作為Java開(kāi)發(fā)者,一般不需要專門編寫內(nèi)存回收和垃圾清理代碼,對(duì)內(nèi)存泄露和溢出的問(wèn)題,也不需要像C程序員那樣戰(zhàn)戰(zhàn)兢兢。這是因?yàn)樵贘ava虛擬機(jī)中,存在自動(dòng)內(nèi)存管理和垃圾清掃機(jī)制。概括地說(shuō),該機(jī)制對(duì)虛擬機(jī)中的內(nèi)存進(jìn)行標(biāo)記,并確定哪些內(nèi)存需要回收,根據(jù)一定的回收策略,自動(dòng)的回收內(nèi)存,永不停息(Nerver Stop)的保證虛擬機(jī)中的內(nèi)存空間,防止出現(xiàn)內(nèi)存泄露和溢出問(wèn)題。

3. 什么情況需要垃圾回收

對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開(kāi)始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。通常GC采用有向圖的方式記錄并管理堆中的所有對(duì)象,通過(guò)這種方式確定哪些對(duì)象時(shí)“可達(dá)”,哪些對(duì)象時(shí)“不可達(dá)”。當(dāng)對(duì)象不可達(dá)的時(shí)候,即對(duì)象不再被引用的時(shí)候,就會(huì)被垃圾回收。

網(wǎng)上有很多文檔介紹可達(dá)的關(guān)系了,如圖,在第六行的時(shí)候,o2改變了指向,Obj2就不再引用main的了,即他它們是不可達(dá)的,Obj2就可能在下次的GC中被回收。 

 

 

 

developerWorks Java technology

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

當(dāng)你不再需要某個(gè)實(shí)例后,但是這個(gè)對(duì)象卻仍然被引用,防止被垃圾回收(Prevent from being bargage collected)。這個(gè)情況就叫做內(nèi)存泄露(Memory Leak)。

下面將以How to Leak a Context: Handlers & Inner Classes這篇文章翻譯為例,介紹一個(gè)內(nèi)存泄露。

看如下的代碼

  1. public class SampleActivity extends Activity { 
  2.  
  3.   private final Handler mLeakyHandler = new Handler() {    @Override 
  4.     public void handleMessage(Message msg) {      // ...  
  5.     } 
  6.   } 
  7.  

當(dāng)你打完這個(gè)代碼后,IDE應(yīng)該就會(huì)提醒你

  1. In Android, Handler classes should be static or leaks might occur. 

它到底是如何泄露的呢?

  1. 當(dāng)你啟動(dòng)一個(gè)application時(shí),它會(huì)自動(dòng)在主線程創(chuàng)建一個(gè)Looper對(duì)象,用于處理Handler中的message。Looper實(shí)現(xiàn)了簡(jiǎn)單的消息隊(duì)列,在循環(huán)中一個(gè)接一個(gè)的處理Message對(duì)象。大多數(shù)Application框架事件(比如Activity生命周期調(diào)用,按鈕點(diǎn)擊等)都在Message中,它們?cè)贚ooper的消息隊(duì)列中一個(gè)接一個(gè)的處理。注意Looper是存在于application整個(gè)生命周期中。
  2. 當(dāng)你新建了一個(gè)handler對(duì)象后,它會(huì)被分配給Looper的消息隊(duì)列。被發(fā)送到消息隊(duì)列的Message將保持對(duì)Handler的引用,因?yàn)楫?dāng)消息隊(duì)列處理到這個(gè)消息時(shí),需要使用[Handler#handleMessage(Message)](http://developer.android.com/reference/android/os/Handler.html#handleMessage(android.os.Message)這個(gè)方法。(也就是說(shuō),只要沒(méi)有處理到這個(gè)Message,Handler就一直在隊(duì)列中被引用)
  3. 在java中,非靜態(tài)的內(nèi)部Class與匿名Class對(duì)它們外部的Class有強(qiáng)引用。static inner class除外。 

 

 

 

引用關(guān)系

現(xiàn)在,我們嘗試運(yùn)行如下代碼

  1. public class SampleActivity extends Activity { 
  2.  
  3.   private final Handler mLeakyHandler = new Handler() {    @Override 
  4.     public void handleMessage(Message msg) {      // ... 
  5.     } 
  6.   }  @Override 
  7.   protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // Post a message and delay its execution for 10 minutes. 
  8.     mLeakyHandler.postDelayed(new Runnable() {      @Override 
  9.       public void run() { /* ... */ } 
  10.     }, 1000 * 60 * 10);    // Go back to the previous Activity. 
  11.     finish(); 
  12.   } 
  13.  

這個(gè)程序很簡(jiǎn)單,我們可以腦補(bǔ)一下,它應(yīng)該是啟動(dòng)了又瞬間關(guān)閉,但是事實(shí)真的是關(guān)閉了嗎?

稍有常識(shí)的人可以看出,它發(fā)送了一個(gè)Message,將在十分鐘后運(yùn)行,也就是說(shuō)Message將被保持引用達(dá)到10分鐘,這就照成了至少10分鐘的內(nèi)存泄露。

最后正確的代碼如下

  1. ublic class SampleActivity extends Activity { 
  2.  
  3.   /** 
  4.    * Instances of static inner classes do not hold an implicit 
  5.    * reference to their outer class. 
  6.    */ 
  7.   private static class MyHandler extends Handler { 
  8.     private final WeakReference<SampleActivity> mActivity; 
  9.  
  10.     public MyHandler(SampleActivity activity) { 
  11.       mActivity = new WeakReference<SampleActivity>(activity); 
  12.     }    @Override 
  13.     public void handleMessage(Message msg) {      SampleActivity activity = mActivity.get();      if (activity != null) {        // ... 
  14.       } 
  15.     } 
  16.   }  private final MyHandler mHandler = new MyHandler(this);  /** 
  17.    * Instances of anonymous classes do not hold an implicit 
  18.    * reference to their outer class when they are "static"
  19.    */ 
  20.   private static final Runnable sRunnable = new Runnable() {      @Override 
  21.       public void run() { /* ... */ } 
  22.   };  @Override 
  23.   protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // Post a message and delay its execution for 10 minutes. 
  24.     mHandler.postDelayed(sRunnable, 1000 * 60 * 10);    // Go back to the previous Activity. 
  25.     finish(); 
  26.   } 
  27.  

結(jié)論

  • GC是按照有向圖是否可達(dá)來(lái)判斷對(duì)象實(shí)例是否有用
  • 如果不在需要某個(gè)實(shí)例,卻仍然被引用,這個(gè)情況叫做內(nèi)存泄露
  • 匿名類/非靜態(tài)類內(nèi)部class會(huì)保持對(duì)它所在Activity的引用,使用時(shí)要注意它們的生命周期不能超過(guò)Activity,否則要用static inner class
  • 善于在Activy中的生命周期(比如onPause)中手動(dòng)控制其他類的生命周期

最后再補(bǔ)充一下iOS的情況,iOS在新版的OC與Swift中,已經(jīng)引入了新的內(nèi)存管理體系A(chǔ)RC(auto reference counting,引用自動(dòng)計(jì)數(shù)),C代碼在編譯時(shí),編譯器自動(dòng)適時(shí)的添加釋放內(nèi)存的代碼。

References

http://www.jianshu.com/p/22e73e80e950

http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

http://stackoverflow.com/a/70358/4016014

http://blog.csdn.net/luoshengyang/article/details/8852432

http://developer.android.com/training/articles/perf-tips.html

https://techblog.badoo.com/blog/2014/08/28/android-handler-memory-leaks/

責(zé)任編輯:龐桂玉 來(lái)源: 安卓開(kāi)發(fā)精選
相關(guān)推薦

2014-12-19 11:07:40

Java

2011-08-15 16:28:06

Cocoa內(nèi)存管理

2018-07-17 08:58:57

垃圾回收內(nèi)存泄露方法

2023-12-19 21:52:51

Go垃圾回收開(kāi)發(fā)

2017-08-04 10:53:30

回收算法JVM垃圾回收器

2009-09-02 09:23:26

.NET內(nèi)存管理機(jī)制

2010-06-02 13:00:43

Linux 內(nèi)存監(jiān)控

2024-02-04 09:18:00

Python內(nèi)存管理垃圾回收

2017-04-25 14:39:55

JVM內(nèi)存Java

2023-05-31 09:00:00

2022-03-21 11:33:11

JVM垃圾回收器垃圾回收算法

2010-01-27 10:52:15

Android垃圾回收

2009-12-09 17:28:34

PHP垃圾回收機(jī)制

2022-01-20 10:34:49

JVM垃圾回收算法

2011-06-23 09:42:54

Android Mar應(yīng)用商店Android

2023-03-10 12:28:16

2013-01-15 09:14:20

2011-10-28 11:22:06

Android 4.0

2021-01-04 10:08:07

垃圾回收Java虛擬機(jī)

2011-12-14 13:14:05

點(diǎn)贊
收藏

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

亚洲激情av| 亚洲精品在线国产| 国产精品久久久久久久久图文区 | 黄色片网站在线播放| julia一区二区三区中文字幕| 综合激情成人伊人| 精品久久久三级| 日韩国产成人在线| 欧美日韩免费| 亚洲欧美国产精品久久久久久久 | 粉嫩一区二区三区在线看 | 91tv亚洲精品香蕉国产一区| 亚洲人成7777| 欧美影视一区二区| 午夜精品久久久久久久99热黄桃| 国产日韩欧美一区| 久久精视频免费在线久久完整在线看| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 97成人精品区在线播放| 九九热视频在线免费观看| 久久综合社区| 日韩一区国产二区欧美三区| 88av.com| 午夜欧美激情| 亚洲一区二区欧美日韩| 一区二区三区我不卡| 色中色在线视频| 国产精品一区二区三区99| 日韩av黄色在线观看| 久久久无码精品亚洲国产| 日韩欧美一区二区三区免费看| 亚洲国产小视频在线观看| 99999精品| 国产成人福利夜色影视| 欧美日韩免费在线| 精品久久久久久无码中文野结衣| 久操免费在线| 中文字幕av在线一区二区三区| 精品婷婷色一区二区三区蜜桃| 国产黄色大片网站| 极品销魂美女一区二区三区| 国产精品视频网址| 亚洲视频 欧美视频| 日韩一级免费| 97国产suv精品一区二区62| 九九九久久久久| 一区二区三区午夜视频| 久久中文字幕一区| 国产日产精品一区二区三区的介绍| blacked蜜桃精品一区| 亚洲美女视频网| 波多野结衣 在线| 午夜先锋成人动漫在线| 日韩精品在线视频观看| 一本加勒比波多野结衣| 欧美综合精品| 亚洲品质视频自拍网| 无码国产69精品久久久久同性| 同性恋视频一区| 亚洲美女av黄| 久久精品视频18| 欧美三级美国一级| 丝袜情趣国产精品| 少妇被躁爽到高潮无码文| 午夜欧美精品| 午夜精品久久久久久久白皮肤 | 亚洲高清av| 久久久久久有精品国产| 成人免费区一区二区三区| 亚洲一区二区三区高清| 国产精品电影久久久久电影网| 午夜一级黄色片| 久久99在线观看| 亚洲最大福利视频| 亚洲av无码乱码国产精品| eeuss影院一区二区三区| 欧美成ee人免费视频| fc2在线中文字幕| 亚洲三级久久久| 美女黄色免费看| 美女18一级毛片一品久道久久综合| 色欧美88888久久久久久影院| 天天爽人人爽夜夜爽| 久久国产精品美女| 亚洲国产婷婷香蕉久久久久久| 自拍偷拍中文字幕| 欧美gayvideo| 久久男人av资源网站| 欧产日产国产69| 蜜臀91精品一区二区三区| 91九色蝌蚪成人| 五月激情婷婷网| 国产精品色婷婷久久58| 国产 欧美 日本| 台湾佬成人网| 日韩女同互慰一区二区| 国产人妻一区二区| 影音先锋日韩在线| 欧亚精品中文字幕| 国产精品无码在线播放| 91毛片在线观看| 中文字幕综合在线观看| 美女露胸视频在线观看| 欧美日韩一区精品| 中国极品少妇videossexhd| 成人情趣视频网站| 国产91精品久| 精品国产一级片| 欧美高清一级片在线观看| 妞干网视频在线观看| 素人啪啪色综合| 亚洲精品成人久久久| 亚洲综合网在线| 日韩影院精彩在线| 国产精品国产三级欧美二区| 色大18成网站www在线观看| 精品福利一区二区| 少妇性l交大片7724com| 久久人人99| 日韩美女写真福利在线观看| 国产综合在线播放| 亚洲男人的天堂av| 日本超碰在线观看| 久久综合影院| 69影院欧美专区视频| 国产人妖一区二区三区| 国产拍揄自揄精品视频麻豆| 热99这里只有精品| 亚洲视频精选| 久久久精品国产| 一炮成瘾1v1高h| 国产欧美1区2区3区| 日本黄网站免费| 美国一区二区| 性视频1819p久久| 亚洲va久久久噜噜噜无码久久| 国产精品毛片a∨一区二区三区| 欧美私人情侣网站| 日韩av影院| 91av免费观看91av精品在线| 人妻无码一区二区三区久久99| 亚洲精品成人少妇| 日本高清免费在线视频| 亚洲精品极品少妇16p| 亚洲va欧美va国产综合剧情| 日本综合在线| 欧美日韩视频在线第一区| 免费黄色片网站| 视频一区二区不卡| 日韩欧美三级电影| 超碰这里只有精品| 日韩专区在线播放| 国产欧美日韩成人| 亚洲黄色尤物视频| 在线播放av网址| 亚洲成人资源| 久久青青草综合| 波多野结衣久久精品| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品成人在线视频| 久久久99久久| 天天影视色综合| 午夜精品久久99蜜桃的功能介绍| 国产91亚洲精品一区二区三区| 国产嫩草在线视频| 日韩精品亚洲视频| 久久人人爽人人爽人人片av免费| 中文av字幕一区| 亚洲综合伊人久久| 亚洲视频福利| 欧美1o一11sex性hdhd| 欧美91在线|欧美| 欧美精品一本久久男人的天堂| 亚洲精品久久久狠狠狠爱| 亚洲成人精品在线观看| 蜜臀av一区二区三区有限公司| 天堂精品中文字幕在线| 中文字幕一区二区三区四区五区 | 日本黄色片免费观看| 国产不卡视频在线播放| 青青在线视频观看| 国产精品99久久| 国产精品久久久久久久小唯西川| 97蜜桃久久| 中文字幕亚洲情99在线| 精品国产乱码一区二区三| 富二代精品短视频| 一级二级黄色片| 粉嫩欧美一区二区三区高清影视| 乱子伦视频在线看| 午夜精品久久99蜜桃的功能介绍| 欧美一区少妇| 1204国产成人精品视频| 日韩美女毛茸茸| 福利小视频在线| 伊人精品在线观看| 亚洲精品国产av| 欧美综合在线视频| 久久亚洲精品大全| 国产精品视频观看| 久久人人爽人人人人片| 蜜臀av国产精品久久久久| 日韩伦理在线免费观看| 日韩午夜电影网| 麻豆av一区二区三区| 国产精品久久久久久av公交车| 97超级碰碰碰久久久| 18av在线播放| 中文字幕在线看视频国产欧美| 刘玥91精选国产在线观看| 欧美日韩成人综合天天影院 | 在线一区欧美| 国产卡一卡二在线| 欧美三级三级| 欧美日韩在线一区二区三区| 成人午夜三级| 成人国产在线视频| 日韩一区精品| 日本免费一区二区三区视频观看| 污的网站在线观看| 色偷偷av亚洲男人的天堂| 麻豆app在线观看| 亚洲精品国产成人| 亚洲不卡免费视频| 欧美精三区欧美精三区| 日本欧美www| 色哟哟一区二区在线观看| 国产 欧美 日韩 在线| 一区二区三区精品视频在线| 亚洲欧洲综合网| 国产欧美视频一区二区三区| 黄色国产在线观看| av在线不卡电影| 中文字幕在线视频播放| 国产91综合网| 秘密基地免费观看完整版中文 | 久久久久麻豆v国产| 国产三级一区二区| 免费看污片网站| 久久综合九色综合久久久精品综合| 9.1在线观看免费| 成人免费观看av| 男人的天堂影院| caoporn国产一区二区| 人妻 日韩 欧美 综合 制服| 丁香六月综合激情| 四虎成人免费视频| 99免费精品在线| 三级视频网站在线观看| 成人激情综合网站| 好男人香蕉影院| 久久中文字幕电影| 性猛交ⅹxxx富婆video | 日韩av网站在线| 午夜福利视频一区二区| 精品亚洲国产视频| 国产天堂素人系列在线视频| 中日韩午夜理伦电影免费| 麻豆传媒视频在线观看免费| 久久久精品国产| 污的网站在线观看| 国产91精品不卡视频| 欧美日韩亚洲国产| 91免费国产视频| 综合激情久久| 日本不卡二区| 久久免费大视频| 国产aaa免费视频| 亚洲欧美清纯在线制服| www.日本xxxx| 国产曰批免费观看久久久| 少妇高潮一69aⅹ| 97se亚洲国产综合自在线| 法国空姐电影在线观看| 综合电影一区二区三区 | 日韩一卡二卡三卡| 搡老岳熟女国产熟妇| 一区二区三区美女xx视频| 中文字幕伦理免费在线视频 | xf在线a精品一区二区视频网站| 久久久久亚洲av无码a片| 亚洲色图另类专区| 亚洲黄色小说图片| 欧美另类z0zxhd电影| 国产 日韩 欧美 综合| 一区三区二区视频| 污污视频在线| 国产精品久久久久久久天堂 | 日韩午夜在线观看视频| 五月色婷婷综合| 精品国产网站地址| 理论片午夜视频在线观看| 国产欧美日韩精品在线观看 | 国产高清精品在线| 69精品无码成人久久久久久| 一区二区欧美视频| 欧美一级黄视频| 精品成人a区在线观看| 在线视频三区| 日本精品久久久久久久| 国产一区二区三区免费观看在线| 麻豆蜜桃91| 欧美日韩三级| 在线免费黄色网| 久久精品人人做人人综合 | 国产羞羞视频在线播放| 国产精品视频男人的天堂| 日本久久成人网| 日b视频免费观看| 久久精品国产色蜜蜜麻豆| 亚洲一区二区三区无码久久| 亚洲精品高清在线| 中日韩在线观看视频| 精品香蕉在线观看视频一| 男女视频在线| 91免费精品国偷自产在线| 国产欧美一区二区精品久久久| 男人添女人荫蒂免费视频| 国产资源在线一区| 五月天婷婷丁香网| 欧美综合在线视频| 国产三级在线免费观看| 欧美性在线视频| 精品亚洲精品| 成人一级生活片| 国产91精品在线观看| 99热精品免费| 日韩欧美专区在线| 成人在线播放免费观看| 国产免费亚洲高清| 久久精品播放| 日本在线一二三区| 国产视频一区在线播放| 亚洲国产成人精品女人久久| 日韩av中文字幕在线免费观看| 国产丝袜精品丝袜| 国产一区喷水| 亚洲精选一区| 一区二区免费在线观看视频| 亚洲大片免费看| 日本高清视频免费观看| 91精品国产沙发| 日韩av网站在线免费观看| 日韩免费毛片视频| 久久久国产精华| 最近中文在线观看| 中文字幕少妇一区二区三区| 日韩av懂色| 欧美xxxx吸乳| 国产91在线看| 国产污污视频在线观看| 精品在线观看国产| 免费观看成人性生生活片| 天天综合色天天综合色hd| 麻豆精品久久久| 一级黄色片日本| 精品美女被调教视频大全网站| 国产精品—色呦呦| 蜜桃91精品入口| 蜜臀av性久久久久蜜臀aⅴ四虎| 999精品在线视频| 精品国产凹凸成av人网站| 超级白嫩亚洲国产第一| 欧美成熟毛茸茸复古| 日韩av电影免费观看高清完整版| 成人黄色短视频| 精品国产一二三| 亚洲同志男男gay1069网站| 日韩欧美一区二区视频在线播放| 精品一区二区三区久久| 久久艹精品视频| 亚洲美女动态图120秒| 欧美黄色a视频| 精品人妻少妇一区二区| 久久久久久97三级| 国产日本精品视频| 亚洲**2019国产| 999久久久国产精品| 老司机av网站| 日本大香伊一区二区三区| 韩国中文字幕在线| 国产日韩精品久久| 开心九九激情九九欧美日韩精美视频电影 | 国产男女猛烈无遮挡| 午夜伦理精品一区| 欧美中文字幕一区二区| 精人妻一区二区三区| 色噜噜狠狠成人中文综合| 97电影在线| 国产在线资源一区| 激情成人午夜视频| 国产成人无码精品久久久久| 综合欧美国产视频二区| 国产精品白丝av嫩草影院| 九九热免费精品视频| 亚洲一区二区三区四区的| www.中文字幕久久久| 国产精品一区二区三区四区五区| 蜜桃久久久久久| 99久在线精品99re8热|