當前位置:首頁 » 安卓系統 » android應用內存分配

android應用內存分配

發布時間: 2022-08-31 12:42:39

① Android 內存管理機制是怎麼樣的呢

在用安卓手機的時候不用太在意剩餘內存,Android上的應用是java,當然需要虛擬機,而android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機。其實和java的垃圾回收機制類似,系統有一個規則來回收內存。進行內存調度有個閥值,只有低於這個值系統才會按一個列表來關閉用戶不需要的東西。當然這個值默認設置得很小,所以你會看到內存老在很少的數值徘徊。但事實上他並不影響速度。相反加快了下次啟動應用的速度。這本來就是 android標榜的優勢之一,如果人為去關閉進程,沒有太大必要。特別是使用自動關進程的軟體。為什麼內存少的時候運行大型程序會慢呢,原因是:在內存剩餘不多時打開大型程序時會觸發系統自身的調進程調度策略,這是十分消耗系統資源的操作,特別是在一個程序頻繁向系統申請內存的時候。這種情況下系統並不會關閉所有打開的進程,而是選擇性關閉,頻繁的調度自然會拖慢系統。

② Android開發中,有哪些好方法可以檢測內存泄露和性能

下面是回答的內容


內存泄露,是Android開發者最頭疼的事。可能一處小小的內存泄露,都可能是毀於千里之堤的蟻穴。怎麼才能檢測內存泄露呢?網上教程非常多,不過很多都是使用Eclipse檢測的, 其實1.3版本以後的Android Studio 檢測內存非常方便, 如果結合上MAT工具,LeakCanary插件,一切就變得so easy了。


熟悉Android Studio界面工欲善其事,必先利其器。


我們接下來先來熟悉下Android Studio的界面

結果

非獨占時間:某函數佔用的CPU時間,包含內部調用其它函數的CPU時間。
獨占時間:某函數佔用CPU時間,但不含內部調用其它函數所佔用的CPU時間。

我們如何判斷可能有問題的方法?

通過方法的調用次數和獨占時間來查看,通常判斷方法是:

如果方法調用次數不多,但每次調用卻需要花費很長的時間的函數,可能會有問題。

如果自身佔用時間不長,但調用卻非常頻繁的函數也可能會有問題。

綜述

上面給大家介紹了若干使用Android Studio檢查程序性能的工具,工具永遠是輔助,不要因為工具耽誤太長時間。如果有問題,歡迎大家糾正。

③ 岳雲鵬吐槽買手機128G內存實際只有112G,你認為手機內存合理嗎

1、基於linux內存管理

Android系統是基於Linux 2.6內核開發的開源操作系統,而linux系統的內存管理有其獨特的動態存儲管理機制。不過Android系統對Linux的內存管理機制進行了優化,Linux系統會在進程活動停止後就結束該進程,而Android把這些進程都保留在內存中,直到系統需要更多內存為止。這些保留在內存中的進程通常情況下不會影響整體系統的運行速度,並且當用戶再次激活這些進程時,提升了進程的啟動速度。

有人認為後台掛著程序很費電,事實上Android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態。至於、音樂播放之類的程序可以在後台運行,是因為這些程序在後台開啟了服務,而服務可以後台運行,所以沒有帶服務的應用在後台是完全不耗電的,沒有必要關閉。這種設計本來就是一個非常好的設計,下次啟動程序時,會更快,因為不需要讀取界面資源。

Android系統這樣的設計不僅非常適合移動終端的需要,而且減少了系統崩潰的可能,確保了系統的穩定性。老想著清理內存的同學完全是因為被塞班或者Windows毒害太深,事實上,經常用之類的軟體關閉後台所有進程,很容易造成系統的不穩定。很多時候出現問題,只要重啟就能解決,其原因也在於此。

總之,牛B的人自己去操縱系統內存分配的閾值,普通用戶則是想怎麼用就怎麼用,完全不用去鳥剩餘內存的問題,那些內存清理的程序完全可以扔到一邊了。對於如果有同學真的那麼喜歡看著自己手機的剩餘很大的話,可以用之類的工具,這類工具的原理不是殺進程,而是分配系統內存閾值,很簡單很好用。

④ 如何檢查 Android 應用的內存使用情況

最簡單的調查應用內存使用情況的地方就是Dalvik日誌信息。可以在logcat(輸出信息可以在Device Monitor或者IDE中查看到,例如Eclipse和Android Studio)中找到這些日誌信息。每次有垃圾回收發生,logcat會列印出帶有下面信息的日誌消息:

Java

1

D/dalvikvm: , , ,

GC原因
觸發垃圾回收執行的原因和垃圾回收的類型。原因主要包括:
GC_CONCURRENT
並發垃圾回收,當堆開始填滿時觸發來釋放內存。
GC_FOR_MALLOC
堆已經滿了時應用再去嘗試分配內存觸發的垃圾回收,這時系統必須暫停應用運行來回收內存。
GC_HPROF_DUMP_HEAP
創建HPROF文件來分析應用時觸發的垃圾回收。
GC_EXPLICIT
顯式垃圾回收,例如當調用 gc()(應該避免手動調用而是要讓垃圾回收器在需要時主動調用)時會觸發。
GC_EXTERNAL_ALLOC
這種只會在API 10和更低的版本(新版本內存都只在Dalvik堆中分配)中會有。回收外部分配的內存(例如存儲在本地內存或NIO位元組緩沖區的像素數據)。
釋放數量
執行垃圾回收後內存釋放的數量。
堆狀態
空閑的百分比和(活動對象的數量)/(總的堆大小)。
外部內存狀態
API 10和更低版本中的外部分配的內存(分配的內存大小)/(回收發生時的限制值)。
暫停時間
越大的堆的暫停時間就越長。並發回收暫停時間分為兩部分:一部分在回收開始時,另一部分在回收將近結束時。
例如:

Java

1

D/dalvikvm( 9050): GC_CONCURRENT freed 2049K, 65% free 3571K/9991K, external 4703K/K, paused 2ms+2ms

隨著這些日誌消息的增多,注意堆狀態(上面例子中的3571K/9991K)的變化。如果值一直增大並且不會減小下來,那麼就可能有內存泄露了。
查看堆的更新
為了得到應用內存的使用類型和時間,可以在Device Monitor中實時查看應用堆的更新:
1.打開Device Monitor。
從/tools/路徑下載入monitor工具。
2.在Debug Monitor窗口,從左邊的進程列表中選擇要查看的應用進程。
3.點擊進程列表上面的Update Heap。
4.在右側面板中選擇Heap標簽頁。

Heap視圖顯示了堆內存使用的基本狀況,每次垃圾回收後會更新。要看更新後的狀態,點擊Gause GC按鈕。

圖1.Device Monitor工具顯示[1] Update Heap和 [2] Cause GC按鈕。右邊的Heap標簽頁顯示堆的情況。
跟蹤內存分配
當要減少內存問題時,應該使用Allocation Tracker來更好的了解內存消耗大戶在哪分配。Allocation Tracker不僅在查看內存的具體使用上很有用,也可以分析應用中的關鍵代碼路徑,例如滑動。
例如,在應用中滑動列表時跟蹤內存分配,可以看到內存分配的動作,包括在哪些線程上分配和哪裡進行的分配。這對優化代碼路徑來減輕工作量和改善UI流暢性都極其有用。
使用Allocation Tracker:
1.打開Device Monitor 。
從/tools/路徑下載入monitor工具。
2.在DDMS窗口,從左側面板選擇應用進程。
3.在右側面板中選擇Allocation Tracker標簽頁。
4.點擊Start Tracking。
5.執行應用到需要分析的代碼路徑處。
6.點擊Get Allocations來更新分配列表。
列表顯示了所有的當前分配和512大小限制的環形緩沖區的情況。點擊行可以查看分配的堆棧跟蹤信息。堆棧不只顯示了分配的對象類型,還顯示了屬於哪個線程哪個類哪個文件和哪一行。

圖2. Device Monitor工具顯示了在Allocation Tracker中當前應用的內存分配和堆棧跟蹤的情況。
注意:總會有一些分配是來自與 DdmVmInternal 和 allocation tracker本身。
盡管移除掉所有嚴重影響性能的代碼是不必要的(也是不可能的),但是allocation tracker還是可以幫助定位代碼中的嚴重問題。例如,應用可能在每個draw操作上創建新的Paint對象。把對象改成全局變數就是一個很簡單的改善性能的修改。
查看總體內存分配
為了進一步的分析,查看應用內存中不同內存類型的分配情況,可以使用下面的 adb 命令:

Java

1

adb shell mpsys meminfo

應用當前的內存分配輸出列表,單位是千位元組。
當查看這些信息時,應當熟悉下面的分配類型:
私有(Clean and Dirty) 內存
進程獨占的內存。也就是應用進程銷毀時系統可以直接回收的內存容量。通常來說,「private dirty」內存是其最重要的部分,因為只被自己的進程使用。它只在內存中存儲,因此不能做分頁存儲到外存(Android不支持swap)。所有分配的Dalvik堆和本地堆都是「private dirty」內存;Dalvik堆和本地堆中和Zygote進程共享的部分是共享dirty內存。
實際使用內存 (PSS)
這是另一種應用內存使用的計算方式,把跨進程的共享頁也計算在內。任何獨占的內存頁直接計算它的PSS值,而和其它進程共享的頁則按照共享的比例計算PSS值。例如,在兩個進程間共享的頁,計算進每個進程PPS的值是它的一半大小。
PSS計算方式的一個好處是:把所有進程的PSS值加起來就可以確定所有進程總共佔用的內存。這意味著用PSS來計算進程的實際內存使用、進程間對比內存使用和總共剩餘內存大小是很好的方式。
例如,下面是平板設備中Gmail進程的輸出信息。它顯示了很多信息,但是具體要講解的是下面列出的一些關鍵信息。
注意:實際看到的信息可能和這里的稍有不同,輸出的詳細信息可能會根據平台版本的不同而不同。

⑤ 如何使用DDMS Heap查看Android應用內存情況

Android是為移動設備而設計的,所以應該關注應用的內存使用情況。盡管Android的Dalvik虛擬機會定期執行垃圾回收操作,但這也不意味著就可以忽視應用在何時何處進行內存分配和釋放。為了提供良好的用戶體驗,做到系統在不同應用間流暢切換,當用戶和應用無交互時,避免應用不必要的內存消耗是很重要的。
盡管在開發過程中很好的遵守了《管理應用內存》(Managing Your App Memory )中的原則(也是應該遵守的),仍然可能會有對象泄露或引入其他的內存bug。唯一來確定應用使用了盡可能少的內存的方法,就是使用工具來分析應用的內存使用情況。本指南介紹了如何去調查內存使用情況。

⑥ android 4.0給每個應用程序分配多少內存,還是動態分配的嗎

android 4.0給每個應用程序分配內存是動態分配的。
應用程序,指為完成某項或多項特定工作的計算機程序,它運行在用戶模式,可以和用戶進行交互,具有可視的用戶界面。
內存是計算機中重要的部件之一,它是與CPU進行溝通的橋梁。計算機中所有程序的運行都是在內存中進行的,因此內存的性能對計算機的影響非常大。內存(Memory)也被稱為內存儲器,其作用是用於暫時存放CPU中的運算數據,以及與硬碟等外部存儲器交換的數據。

⑦ android系統嚴格規定了每個應用所能分配的最大的內存為多少

Android應用程序的默認最大內存值為16M,不同的手機版本和型號有所不同(我的三星galaxy s3的是256M)

Android應用程序的默認最大內存值

有些應用程序可能會出現內存溢出,譬如:

ERROR/AndroidRuntime(264): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

除了要檢查修正代碼之外,還可以考慮修改Android應用程序的默認最大內存值。

⑧ 一個android應用在內存中佔用多少內存

在Android中,一個Process 只能使用16M內存,如果超過了這個限制就會拋出Android Out Of Memory(OOM) 這個異常。 在Android中: 1.一個進程的內存可以由2個部分組成:java 使用內存 ,C 使用內存 ,這兩個內存的和必須小於16M,不然就會出現OOM...

⑨ 如何突破24M內存的限制,為Android程序分配到更多內存

一個Android的應用最多使用16M的內存,如果要突破這個限制,則要使用c/c++編寫JNI,即直接調用底層的函數來處理.linux也是用c/c++來編寫的,因此有非常非常多的函數庫可以調用.

⑩ 如何得知android設備為app分配的內存大小

設置webview要載入的網頁:

web的網頁:webView.loadUrl("http://www.google.com");
本地的網頁:webView.loadUrl("file:///android_asset/XX.html"); //本地的存放在:assets文件夾
webview做完基本的初始化後我們還要要給它,加進一個回調的代理類Javas criptInterface,並給它一個調用的名稱:ncp
Java代碼
mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");

熱點內容
手機手勢密碼忘了怎麼辦 發布:2025-01-12 17:14:51 瀏覽:485
這手機配置有什麼顏色的電視機 發布:2025-01-12 17:02:19 瀏覽:932
閣源碼 發布:2025-01-12 16:48:08 瀏覽:130
組裝機箱搭建伺服器 發布:2025-01-12 16:46:58 瀏覽:511
風險資產配置理論有哪些 發布:2025-01-12 16:46:13 瀏覽:981
小程序分銷源碼 發布:2025-01-12 16:42:41 瀏覽:47
linux查看系統硬體 發布:2025-01-12 16:34:26 瀏覽:968
安卓手機怎麼設置獨享標志 發布:2025-01-12 16:27:56 瀏覽:932
我的世界如何把材質包放進伺服器 發布:2025-01-12 16:11:14 瀏覽:56
使用hmailserver搭建郵件伺服器 發布:2025-01-12 16:05:43 瀏覽:809