AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

Android應用開發(fā)中l(wèi)argeHeap屬性的妙用與潛在風險

來源: 責編: 時間:2024-04-25 08:57:27 149觀看
導讀largeHeap是Android開發(fā)中的一個屬性,主要作用是向系統(tǒng)請求為App進程的虛擬機分配更大的堆內存空間。在manifest文件的application節(jié)點或activity節(jié)點中使用。largeHeap屬性設置為true時,應用可以使用更大的堆內存。具

largeHeap是Android開發(fā)中的一個屬性,主要作用是向系統(tǒng)請求為App進程的虛擬機分配更大的堆內存空間。在manifest文件的application節(jié)點或activity節(jié)點中使用。largeHeap屬性設置為true時,應用可以使用更大的堆內存。具體能為虛擬機分配多大的堆內存,取決于當前設備的相關配置,由dalvik.vm.heapsize后面的配置大小限制。n3x28資訊網——每日最新資訊28at.com

在Android開發(fā)中,官方建議開發(fā)者應努力減少內存的使用,采用回收和復用的方法,而不是通過增大內存來解決內存問題。當內存過大時,每次垃圾回收(gc)的時間也會變長,可能導致性能下降。n3x28資訊網——每日最新資訊28at.com

largeHeap具體分配大小

largeHeap屬性本身并不直接指定一個具體的內存大小。實際可以看做是一個用于向系統(tǒng)請求為應用進程分配更大的堆內存空間標志。具體能為虛擬機分配多大的堆內存,取決于當前設備的配置和系統(tǒng)的內存管理策略。n3x28資訊網——每日最新資訊28at.com

在Android設備中,每個應用都會有一個內存最大值的限制。在應用的manifest文件中為某個activity或整個應用設置了largeHeap="true"后,這個應用或activity可以嘗試使用比默認限制更大的堆內存。“更大”的堆內存具體有多大,并不是固定的,受到設備總內存、其他應用和系統(tǒng)服務的內存需求,以及Android版本和廠商定制等因素的影響。n3x28資訊網——每日最新資訊28at.com

獲取當前應用可以使用的最大堆內存大小方法:n3x28資訊網——每日最新資訊28at.com

//如果largeHeap屬性被設置為true,將返回一個比默認情況下更大的值。Runtime.getRuntime().maxMemory()//獲得應用正常情況下內存的大小ActivityManager.getMemoryClass();//獲得開啟largeHeap最大的內存大小ActivityManager.getLargeMemoryClass();

在/system/build.prop文件中,可以找到與內存管理相關的設置,如dalvik.vm.heapsize和dalvik.vm.heapgrowthlimit。定義了應用進程堆內存的默認大小和增長限制。n3x28資訊網——每日最新資訊28at.com

通過adb shell查看:n3x28資訊網——每日最新資訊28at.com

cat /system/build.prop

圖片圖片n3x28資訊網——每日最新資訊28at.com

  • 「dalvik.vm.heapstartsize=8m」 相當于Java虛擬機的-Xms配置,用來設置堆內存的初始大小。
  • 「dalvik.vm.heapgrowthlimit=192m」 相當于虛擬機的-XX:HeapGrowthLimit配置,用來設置一個標準的應用的最大堆內存大小。一個標準的應用就是沒有使用android:largeHeap屬性的應用。
  • 「dalvik.vm.heapsize=512m」 相當于虛擬機的-Xmx配置,設置了使用android:largeHeap的應用的最大堆內存大小。
  • 「dalvik.vm.heaptargetutilizatinotallow=0.75」 相當于虛擬機的-XX:HeapTargetUtilization,用來設置當前理想的堆內存利用率。取值位于0與1之間,當GC進行完垃圾回收之后,Dalvik的堆內存會進行相應的調整,通常結果是當前存活的對象的大小與堆內存大小做除法,得到的值為這個選項的設置,即這里的0.75。注意,這只是一個參考值,Dalvik虛擬機也可以忽略此設置。
  • 「dalvik.vm.heapminfree=2m與dalvik.vm.heapmaxfree=8m」 前者對應的是-XX:HeapMinFree配置,用來設置單次堆內存調整的最小值。后者對應的是-XX:HeapMaxFree配置,用來設置單次堆內存調整的最大值。通常情況下,還需要結合上面的-XX:HeapTargetUtilization的值,才能確定內存調整時,需要調整的大小。

使用largeHeap屬性弊端

largeHeap會增加應用的內存使用。雖然可以幫助解決某些OutOfMemoryError(OOM)的問題,但也可能導致系統(tǒng)垃圾回收(GC)的時間變長。垃圾回收是Android系統(tǒng)用于清理不再使用的內存的過程,當堆內存變得更大時,這個過程可能需要更長的時間。可能導致應用在執(zhí)行某些任務時變得卡頓,尤其是在進行復雜的UI操作時,如RecyclerView的滑動可能會變得異常緩慢。n3x28資訊網——每日最新資訊28at.com

過度使用largeHeap可能會對整個系統(tǒng)的性能產生負面影響。如果每個應用都請求更多的內存,那么系統(tǒng)可用的總內存就會減少。可能導致系統(tǒng)需要更頻繁地進行內存管理操作,如內存交換或殺死后臺進程,以釋放足夠的內存給前臺應用。不僅可能影響前臺應用的性能,還可能影響用戶的多任務體驗。n3x28資訊網——每日最新資訊28at.com

依賴largeHeap來解決內存問題并不是一種長期或可持續(xù)的解決方案。更好的做法應該是優(yōu)化應用的內存使用,確保應用能夠高效地管理其內存資源。n3x28資訊網——每日最新資訊28at.com

largeHeap屬性并不能保證應用一定能夠獲得更多的內存。即使設置了largeHeap="true",系統(tǒng)仍然會根據設備的總內存、其他應用的內存需求以及系統(tǒng)的內存管理策略來決定實際分配給應用的內存大小。n3x28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-85373-0.htmlAndroid應用開發(fā)中l(wèi)argeHeap屬性的妙用與潛在風險

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C#中編寫系統(tǒng)操作日志的實踐

下一篇: Java對象不再使用時,為什么要賦值為 null ?

標簽:
  • 熱門焦點
Top