手机内存是指手机的RAM,它包括以下几个部分:
- 寄存器:速度最快的存储场所,因为寄存器位于处理器内部,在程序中无法控制。
- 栈(Stack):存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中。
- 堆(Heap):堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由java虚拟机的GC来管理。
- 静态存储区域(Static Field):静态存储区域就是指在固定的位置存放应用程序运行时一直存在的数据,java在内存中专门划分了一个静态存储区域来管理一些特殊的数据变量如静态的数据变量。
- 常量池(Constant Pool):JVM虚拟机必须为每个被装载的类型维护一个常量池。常量池就是该类型所用到常量的一个有序集合,包括直接常量(基本类型,String)和对其他类型,字段和方法的符号引用。
注意:当定义一个变量,java虚拟机就会在栈中为该变量分配内存空间,当该变量作用域结束后,这部分内存空间会马上被用作新的空间进行分配。如果使用new的方式创建一个变量,那么就会在堆中为这个对象分配内存空间,即使该对象的作用域结束,这部分内存也不会立即被回收,而是等待系统GC进行回收。可以使用如下代码获得堆的大小:
ActivityManager activityManager= (ActivityManager) getSystemService(ACTIVITY_SERVICE);
int heapSize=activityManager.getLargeMemoryClass();