largeHeap是Android開發(fā)中的一個屬性,主要作用是向系統(tǒng)請求為App進程的虛擬機分配更大的堆內存空間。在manifest文件的application節(jié)點或activity節(jié)點中使用。largeHeap屬性設置為true時,應用可以使用更大的堆內存。具體能為虛擬機分配多大的堆內存,取決于當前設備的相關配置,由dalvik.vm.heapsize后面的配置大小限制。
在Android開發(fā)中,官方建議開發(fā)者應努力減少內存的使用,采用回收和復用的方法,而不是通過增大內存來解決內存問題。當內存過大時,每次垃圾回收(gc)的時間也會變長,可能導致性能下降。
largeHeap屬性本身并不直接指定一個具體的內存大小。實際可以看做是一個用于向系統(tǒng)請求為應用進程分配更大的堆內存空間標志。具體能為虛擬機分配多大的堆內存,取決于當前設備的配置和系統(tǒng)的內存管理策略。
在Android設備中,每個應用都會有一個內存最大值的限制。在應用的manifest文件中為某個activity或整個應用設置了largeHeap="true"后,這個應用或activity可以嘗試使用比默認限制更大的堆內存。“更大”的堆內存具體有多大,并不是固定的,受到設備總內存、其他應用和系統(tǒng)服務的內存需求,以及Android版本和廠商定制等因素的影響。
獲取當前應用可以使用的最大堆內存大小方法:
//如果largeHeap屬性被設置為true,將返回一個比默認情況下更大的值。Runtime.getRuntime().maxMemory()//獲得應用正常情況下內存的大小ActivityManager.getMemoryClass();//獲得開啟largeHeap最大的內存大小ActivityManager.getLargeMemoryClass();
在/system/build.prop文件中,可以找到與內存管理相關的設置,如dalvik.vm.heapsize和dalvik.vm.heapgrowthlimit。定義了應用進程堆內存的默認大小和增長限制。
通過adb shell查看:
cat /system/build.prop
圖片
largeHeap會增加應用的內存使用。雖然可以幫助解決某些OutOfMemoryError(OOM)的問題,但也可能導致系統(tǒng)垃圾回收(GC)的時間變長。垃圾回收是Android系統(tǒng)用于清理不再使用的內存的過程,當堆內存變得更大時,這個過程可能需要更長的時間。可能導致應用在執(zhí)行某些任務時變得卡頓,尤其是在進行復雜的UI操作時,如RecyclerView的滑動可能會變得異常緩慢。
過度使用largeHeap可能會對整個系統(tǒng)的性能產生負面影響。如果每個應用都請求更多的內存,那么系統(tǒng)可用的總內存就會減少。可能導致系統(tǒng)需要更頻繁地進行內存管理操作,如內存交換或殺死后臺進程,以釋放足夠的內存給前臺應用。不僅可能影響前臺應用的性能,還可能影響用戶的多任務體驗。
依賴largeHeap來解決內存問題并不是一種長期或可持續(xù)的解決方案。更好的做法應該是優(yōu)化應用的內存使用,確保應用能夠高效地管理其內存資源。
largeHeap屬性并不能保證應用一定能夠獲得更多的內存。即使設置了largeHeap="true",系統(tǒng)仍然會根據設備的總內存、其他應用的內存需求以及系統(tǒng)的內存管理策略來決定實際分配給應用的內存大小。
本文鏈接:http://www.tebozhan.com/showinfo-26-85373-0.htmlAndroid應用開發(fā)中l(wèi)argeHeap屬性的妙用與潛在風險
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: C#中編寫系統(tǒng)操作日志的實踐