App性能優化之內存優化

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

為什么要進行內存優化呢?其實我們可以反過來想。如果不進行內存優化會產生什么樣的問題?

App的運行是有內存限制的,超過限制會產生OOM,導致App崩潰。如果內存不進行優化,運行的內存一旦超出了這個限制,就會導致程序的崩潰。程序的崩潰對于應用程序來說是一個非常嚴重的。如果App不進行內存優化,在流暢性、響應速度和用戶體驗上都會有很差的效果。

首先,我們來看一下內存的管理方式。

1、Android系統的內存分配和回收方式。

一個App通常就是一個進程對應一個虛擬機。GC只在heap剩余空間不足時,才會進行垃圾回收。GC觸發時,所有的線程都會被暫停。

2、App內存限制機制。

每個App分配的最大內存限制,隨著不同的設備而不同。吃內存大戶是圖片。App中用到的圖片也很多。為什么要限制內存呢?我們的手機上有很多個應用。如果一個App把內存用光了,別的App就沒有辦法運行了。為了避免這種情況的出現,我們必須要限制App的內存。

3、切換應用時后臺App清理機制。

App切換時的LRU Cache的方式進行應用間的切換。清理的時候系統會調用onTrimMemory()回調方法。

4、監控內存的幾種方法。

其次,App內存的優化方法。

1、數據結構優化。

頻繁字符串拼接用StringBuilder。ArrayMap、SparseArray替換HashMap。內存抖動。再小的class也要消耗0.5kb。HashMap一個entry需要額外占用32b。

2、對象復用。

復用系統自帶的資源。ListView和GridView 的ConverView復用。避免在onDraw方法里執行對象的創建。

3、什么是內存泄漏,及其應對方法。

在邏輯上,某個內存塊已經不用了。由于代碼上的失誤導致這塊內存雖然停止不用了,但是依然被其他東西占用,使得GC無法對它進行回收。

內存泄漏會導致可用的Heap越來越少,頻繁觸發GC。尤其是Activity泄漏。用Application Context而不是Activity Context。注意Cursor對象是否及時關閉。

最后,OOM問題優化。

1、OOM問題分析。

必然性和可解決性。OOM絕大部分出現在圖片上。

2、強引用、軟引用的意義。

3、優化OOM問題的方法。

注意臨時Bitmap對象的及時回收。避免BitMap的浪費。Try catch某些大內存的分配。加載Bitmap時候縮放比例、解碼格式、局部加載。

轉載于:https://my.oschina.net/u/2971691/blog/877169

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python+Tesseract-OCR實現圖片識別(只適合新手)

1.首先準備環境: python版本:2.7/3.6 操作系統:windows系統 2.準備工具: tesseract-ocr 安裝后設置好環境變量 鏈接: https://pan.baidu.com/s/1j8lBbQBrrbPaHAn5ujWFSw 提取碼: 2med Pycharm 3.安裝相關python包&#xf…

Linux 網絡編程詳解四(流協議與粘包)

TCP/IP協議是一種流協議,流協議是字節流,只有開始和結束,包與包之間沒有邊界,所以容易產生粘包,但是不會丟包。 UDP/IP協議是數據報,有邊界,不存在粘包,但是可能丟包。 產生粘包問題…

解決selenium.common.exceptions.WebDriverException: Message: unknown error: call function result missin

(Session info: chrome73.0.3683.103)(Driver info: chromedriver2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platformWindows NT 10.0.17134 x86_64)報錯如上,由于版本不兼容 下面是谷歌瀏覽器與chromedriver的版本對應關系,供參考&#…

執行Hive語句報錯:FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user '

安裝個Hive真不省心,各種問題。最近安裝好Hive后執行Hive語句時碰到這樣的錯誤: hive> show databases; FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user rootlocalhost (using password: YES) NestedThr…

GPU

import tensorflow as tf a tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape[2,3],namea) b tf.constant([1.0,2.0,3.0,4.0,5.0,6.0],shape[3,2],nameb) c tf.matmul(a,b)sess tf.Session(configtf.ConfigProto(log_device_placementTrue)) print sess.run(c)

阿里云部署django項目流程【centos7+python3+mysql】

購買阿里云服務器 到[阿里云官網],選擇輕量應用服務器, 步驟如圖所示: 地域隨便選擇哪一個,鏡像的話,對比了CentOS,Debian,Ubuntu,我最終選擇了CentOS,因為流行嘛&…

XidianOJ 1123 K=1 Problem of Orz Pandas

題目描述 One panda named orz is playing a interesting game, he gets a big integer Num and an integer K. In this game, he can exchange two single numbers in Num. For example, he can get 1243 from 3241 by exchange 1 and 3.But orz can exchange at most K times…

對于頻繁的寫數據處理方式

添加一個新的表情的時候 調用 recentEmotions方法 將所有表情寫入數組 每次都是 添加一個新的表情進來 要將沙盒中的所有表情首先加載進數組,然后將表情添加到數組里面 然后在將數組寫入沙盒 處理方式 沒有必要每次都要到沙盒里面讀取數組文件 類方法 不能訪問 成員…

在Mysql中顯示所有用戶的操作教程(Linux環境下)

1.登錄數據庫 首先,你需要使用如下命令登錄到數據庫,注意,必須是root用戶哦~ mysql -u root -p 2.查詢用戶表 在Mysql中其實有一個內置且名為mysql的數據庫,這個數據庫中存儲的是Mysql的一些數據,比如用戶、權限信…

Scrapy 框架【學習筆記01】

Scrapy 框架 Scrapy是用純Python實現一個為了爬取網站數據、提取結構性數據而編寫的應用框架,用途非常廣泛。 框架的力量,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便。 Scra…

通過profile 用maven命令打不同配置的變量包

profiles定義如下<profiles><profile><id>local</id><properties><deploy.type>local</deploy.type></properties></profile><profile><id>dev</id><properties><deploy.type>dev</de…

執行Hive的查詢語句報錯:java.lang.IllegalArgumentException: Does not contain a valid host:port authority: loca

好不容易把Hive裝完了&#xff0c;結果一執行Hive的查詢語句運行MapReduce程序立馬報錯。。。 log詳細信息如下&#xff1a; Job running in-process (local Hadoop) Hadoop job information for null: number of mappers: 1; number of reducers: 0 2017-10-21 21:54:15,503…

scrapy startproject【學習筆記02】

入門案例 學習目標 創建一個Scrapy項目定義提取的結構化數據(Item)編寫爬取網站的 Spider 并提取出結構化數據(Item)編寫 Item Pipelines 來存儲提取到的Item(即結構化數據) 一. 新建項目(scrapy startproject) 在開始爬取之前&#xff0c;必須創建一個新的Scrapy項目。進入…

開始把其他的博客搬家到這里了

今天&#xff0c;用一晚上的時間進行一下文章的遷移吧。這樣以后查詢就可以在自己的博客中查找了&#xff0c;也算是給自己一個寫作的規律。 從很多個大牛的博客中都閱讀到&#xff0c;寫博客對于一個coder的重要性。希望這次可以堅持。轉載于:https://www.cnblogs.com/cyforev…

java系統高并發解決方案(轉載)

轉載博客地址&#xff1a;http://blog.csdn.net/zxl333/article/details/8685157 一個小型的網站&#xff0c;比如個人網站&#xff0c;可以使用最簡單的html靜態頁面就實現了&#xff0c;配合一些圖片達到美化效果&#xff0c;所有的頁面均存放在一個目錄下&#xff0c;這樣的…

Request/Response【學習筆記03】

Request Request 部分源碼&#xff1a; # 部分代碼 class Request(object_ref):def __init__(self, url, callbackNone, methodGET, headersNone, bodyNone, cookiesNone, metaNone, encodingutf-8, priority0,dont_filterFalse, errbackNone):self._encoding encoding # t…

TotoiseSVN的上手教程

本文轉自&#xff1a;http://www.cnblogs.com/xilentz/archive/2010/05/06/1728945.html TotoiseSVN的基本使用方法&#xff1a; 一、簽入源代碼到SVN服務器 假如我們使用Visual Studio在文件夾StartKit中創建了一個項目&#xff0c;我們要把這個項目的源代碼簽入到SVN Serv…

ALV可輸入狀態下輸入金額字段變小數的問題

http://blog.163.com/mxb_sapyeah/blog/static/10335262520167109022155/ 小數位數兩位 當我在給ALV上給該字段輸入整數 ‘1234 ‘ 時&#xff0c;該數據居然會默認變成‘12.34’ 可以在這里解決這個問題。就是定義字段目錄的時候&#xff0c;對于金額字段指定參考數據類型就…

Downloader Middlewares反反爬蟲【學習筆記04】

反反爬蟲相關機制 Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consi…

【轉載】Android 關于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容問題

轉自&#xff1a;【歐陽鵬】http://blog.csdn.net/ouyang_peng Android 設備的CPU類型(通常稱為”ABIs”) armeabiv-v7a: 第7代及以上的 ARM 處理器。2011年15月以后的生產的大部分Android設備都使用它.arm64-v8a: 第8代、64位ARM處理器&#xff0c;很少設備&#xff0c;三星 G…