手機(jī)內(nèi)存是指手機(jī)的RAM,它包括以下幾個(gè)部分:
- 寄存器:速度最快的存儲(chǔ)場(chǎng)所,因?yàn)榧拇嫫魑挥谔幚砥鲀?nèi)部,在程序中無(wú)法控制。
- 棧(Stack):存放基本類型的數(shù)據(jù)和對(duì)象的引用,但對(duì)象本身不存放在棧中,而是存放在堆中。
- 堆(Heap):堆內(nèi)存用來(lái)存放由new創(chuàng)建的對(duì)象和數(shù)組,在堆中分配的內(nèi)存,由java虛擬機(jī)的GC來(lái)管理。
- 靜態(tài)存儲(chǔ)區(qū)域(Static Field):靜態(tài)存儲(chǔ)區(qū)域就是指在固定的位置存放應(yīng)用程序運(yùn)行時(shí)一直存在的數(shù)據(jù),java在內(nèi)存中專門劃分了一個(gè)靜態(tài)存儲(chǔ)區(qū)域來(lái)管理一些特殊的數(shù)據(jù)變量如靜態(tài)的數(shù)據(jù)變量。
- 常量池(Constant Pool):JVM虛擬機(jī)必須為每個(gè)被裝載的類型維護(hù)一個(gè)常量池。常量池就是該類型所用到常量的一個(gè)有序集合,包括直接常量(基本類型,String)和對(duì)其他類型,字段和方法的符號(hào)引用。
注意:當(dāng)定義一個(gè)變量,java虛擬機(jī)就會(huì)在棧中為該變量分配內(nèi)存空間,當(dāng)該變量作用域結(jié)束后,這部分內(nèi)存空間會(huì)馬上被用作新的空間進(jìn)行分配。如果使用new的方式創(chuàng)建一個(gè)變量,那么就會(huì)在堆中為這個(gè)對(duì)象分配內(nèi)存空間,即使該對(duì)象的作用域結(jié)束,這部分內(nèi)存也不會(huì)立即被回收,而是等待系統(tǒng)GC進(jìn)行回收??梢允褂萌缦麓a獲得堆的大小:
ActivityManager activityManager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);
int heapSize=activityManager.getLargeMemoryClass();