成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

java靜態(tài)代碼檢測 java靜態(tài)代碼檢查

如何分析android的oom,與java靜態(tài)代碼分析工具

在Android平臺上面,應(yīng)用程序OOM異常永遠(yuǎn)都是值得關(guān)注的問題。通常這一塊也是程序這中的重點之一。這下我就如何解決OOM作一點簡單的介紹。

潛山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),潛山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為潛山1000+提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請找那個售后服務(wù)好的潛山做網(wǎng)站的公司定做!

首先,OOM就是內(nèi)存溢出,即Out Of Memory。也就是說內(nèi)存占有量超過了VM所分配的最大。

怎么解決OOM,通常OOM都發(fā)生在需要用到大量內(nèi)存的情況下(創(chuàng)建或解析Bitmap,分配特大的數(shù)組等),在這樣的一種情況下,就可能出現(xiàn)OOM,據(jù)我現(xiàn)在了解到,多數(shù)OOM都是因為Bitmap太大。所以,這里我就專門針對如何解決Bitmap的OOM。其實最核發(fā)的就是只加載可見范圍內(nèi)的Bitmap,試想這樣一種情況,在GridView或ListView中,數(shù)據(jù)量有5000,每一屏只顯示20個元素,那么不可見的,我們是不需要保存Bitmap在內(nèi)在中的。所以我們就是只把那么可見的Bitmap保留在內(nèi)存中,那些不可見的,就釋放掉。當(dāng)元素滑出來時,再去加載Bitmap。

這里我有兩種方式,都可以避免OOM。

一,主動釋放Bitmap的內(nèi)存

這種方式我簡單說一下,不太推薦,這也是我最開始使用的一種方法,但最后證明它不是最好的。(不推薦)

它的本質(zhì)思路是:

1、只加載可見區(qū)域的Bitmap

2、滑動時不加載

3、停止滑動(Idle)后,開始重新加載可見區(qū)域的圖片

4、釋放滑出可見區(qū)域的Bitmap的內(nèi)在。

它比較復(fù)雜:

1、我們需要監(jiān)聽GridView/ListView的滑動事件,這個很簡單做到,AbsListView#setOnScrollListener(OnScrollListener l)

2、主動調(diào)用Bitmap#recycle()方法,它會導(dǎo)致一個問題,必須判斷這個Bitmap是否被一個View(ImageView等)所引用,如果被引用,我們不能簡單地調(diào)用recycle()方法,這樣會導(dǎo)致異常,說是View使用了一個已經(jīng)被回收的Bitmap。

3,我們必須設(shè)計自己的線程來控制開始/暫停等,因為GridView/ListView的滑動狀態(tài)可能不斷地變化,也就是說滑動-停止-滑動,這種狀態(tài)可能不斷變化,這樣就會導(dǎo)致我們的線程中的run()方法里面的邏輯比較復(fù)雜,一旦復(fù)雜,問題就可能就得更多。

基于以上幾點,這種方式不是最好的,所以不推薦。

二,設(shè)計Cache

這種方式,我覺得是比較好的一種,它首先利用了cache,我認(rèn)為cache是一個很重要的東西,把Bitmap的內(nèi)存單獨放在一個地方來管理,這個地方就是cache,它的容量是一定的,我們可能會不斷的向這個cache中添加元素,也可能不斷的移除元素。

為了更好的說明這種方式,先要介紹一下LruCache。

LruCache

1、這其實就是一個LinkedHashMap,任意時刻,當(dāng)一個值被訪問時,它就會被移動到隊列的開始位置,所以這也是為什么要用LinkedHashMap的原因,因為要頻繁的做移動操作,為了提高性能,所以要用LinkedHashMap。當(dāng)cache滿了時,此時再向cache里面添加一個值,那么,在隊列最后的值就會從隊列里面移除,這個值就有可能被GC回收掉。

JAVA 靜態(tài)代碼塊和非靜態(tài)代碼塊 作用?

靜態(tài)代碼塊是在類加載進jvm時類實例化之前運行的,比如業(yè)務(wù)場景有這種類初始化時需要加載許多資源,在運行實例化類的時候會影響程序響應(yīng)時間,所以就在項目啟動的時候加載類的時候就初始化了.非靜態(tài)代碼塊是在類實例化的時候才會運行,所以靜態(tài)代碼塊的執(zhí)行一定在非靜態(tài)代碼塊執(zhí)行之前執(zhí)行.至于你上面的第一個問題要看具體業(yè)務(wù)場景和需求,賦值都可以實現(xiàn).第二個問題,可能是寫那句代碼的人要看程序加載后有沒有執(zhí)行那部分代碼而加上的,知道了靜態(tài)代碼塊和非靜態(tài)代碼塊的本質(zhì)區(qū)別,為什么那么做和目的你就應(yīng)該知道了.

關(guān)于java靜態(tài)代碼塊的詳細(xì)運行過程問題

當(dāng)你裝載Chinese類的時候就會首先執(zhí)行靜態(tài)代碼塊,所以你執(zhí)行Chinese.sing(); 這句的時候首先裝載Chinese類,這時初始化這個類的時候就會先執(zhí)行靜態(tài)代碼塊 static { count =2; System.out.println("static code"); }

名稱欄目:java靜態(tài)代碼檢測 java靜態(tài)代碼檢查
網(wǎng)頁URL:http://jinyejixie.com/article8/dosciop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版網(wǎng)站建設(shè)、商城網(wǎng)站品牌網(wǎng)站設(shè)計、面包屑導(dǎo)航、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
杭锦后旗| 遂川县| 江西省| 山阴县| 于田县| 松江区| 德州市| 繁峙县| 乌苏市| 彰化市| 罗定市| 新昌县| 宁河县| 宜宾县| 鸡西市| 六枝特区| 铜梁县| 汪清县| 措勤县| 武义县| 昭苏县| 哈尔滨市| 景洪市| 廊坊市| 肥城市| 仲巴县| 大宁县| 湖口县| 井冈山市| 佛冈县| 乳山市| 团风县| 枝江市| 龙门县| 德州市| 响水县| 洮南市| 台州市| 香港| 昌吉市| 铜川市|