主仆调教SM束缚绳索捆绑,成品人和精品人的区别三叶草,双性受被各种性器调教学生小说,精品一区二区三区水蜜桃

內存溢出與內存泄露

一、定義

  1. 內存溢出: 即為out of memory, 當你要求分配的內存超過了系統(tǒng)給你的內存時, 系統(tǒng)就會拋出out of memory的異常(每個Android能用的內存是有限的)

比如: 當前應用只剩下4M的空間可用, 但你卻加載得到一個需要占用5M空間的圖片Bitmap對象, 就會拋出溢出的異常

  1. 內存泄露: 即為memory leak, 一個對象被創(chuàng)建后, 你不再使用它了, 但因為某種原因它又沒有成為垃圾對象, 這塊內存不能再被分配置使用.

比如: 查詢數(shù)據(jù)庫得到的cursor對象在使用完后沒有關閉, Activity中使用Handler發(fā)延遲消息, 但退出前不移除未處理的消息

  1. 內存泄露不多時沒有太大影響, 但積累得多了就會導致應用運動緩慢, 到最后就會內存溢出.

內存泄漏的分類

  1. 常發(fā)性內存泄漏: 發(fā)生內存泄漏的代碼會被多次執(zhí)行到,每次被執(zhí)行的時候都會導致一塊內存泄漏
  2. 偶發(fā)性內存泄漏: 發(fā)生內存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會發(fā)生。常發(fā)性和偶發(fā)性是相對的。對于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的
  3. 一次性內存泄漏: 發(fā)生內存泄漏的代碼只會被執(zhí)行一次,或者由于算法上的缺陷,導致總會有一塊僅且一塊內存發(fā)生泄漏

???說明: 危害性大小順序為: ?1)>2)>3)

造成內存泄露的幾種場景

  1. 長生命周期的對象持有短生命周期對象的引用: ?Activity中使用Handler
  2. 資源數(shù)據(jù)連接相關對象不關閉: cusor, stream, connection
  3. HashSet中的對象或HashMap中的Key對象, 基內部與hash值相關的屬性被修改
  4. 一些對象產(chǎn)生后不會自動釋放或需要完全執(zhí)行完了才釋放. 比如: Bitmap, Thread, AsyncTask

避免內存泄露

  1. 盡早釋放無用對象的引用
  2. 使用字符串處理,避免使用String,應大量使用StringBuffer,每一個String對象都得獨立占用內存一塊區(qū)域
  3. 盡量少用靜態(tài)變量,因為靜態(tài)變量存放在永久代(方法區(qū)),永久代基本不參與垃圾回收
  4. 避免在循環(huán)中創(chuàng)建對象

造成內存溢出的的場景

  1. 申請了太多的對象. 比如: 使用ListView時, 不復用convertView, 當數(shù)據(jù)項多時就會出現(xiàn)內存溢出
  2. 創(chuàng)建的對象內存太大. 比如: 不經(jīng)過壓縮直接加載大圖片文件
  3. 內存泄露積累一定的時間后就可能出現(xiàn)

避免內存溢出

  1. 通過復用對象的方式, 減少產(chǎn)生的對象
  2. 大對象需要先壓縮后創(chuàng)建
  3. 避免或減少內存泄露的情況

 

  1. 主站蜘蛛池模板: 图们市| 云龙县| 饶阳县| 乐安县| 明星| 湘潭市| 济宁市| 扎囊县| 庆云县| 江阴市| 新竹县| 西青区| 富宁县| 新竹县| 孝昌县| 新河县| 浮山县| 武鸣县| 吴堡县| 平顺县| 蓬莱市| 巴里| 苗栗市| 东明县| 栖霞市| 阳新县| 民乐县| 深水埗区| 玉屏| 台山市| 桐庐县| 柯坪县| 麻栗坡县| 沂源县| 广西| 宝应县| 临清市| 新丰县| 尖扎县| 图木舒克市| 斗六市|