Android 存储结构、Java内存结构的分配及堆栈区别
2017-04-06 10:36
761 查看
一、认识Android储存结构
对于Android来说,存储主要分为三个部分:内存、内部存储以及外部存储,详细介绍如下:(1)内存存储RAM(Random Access Memory)
内存与PC的内存是一样的,是用来运行程序,不能用来永久存储数据,手机一旦关机,在内存中的所有数据都将会丢失,内存也是现在人类制造的所有电子设备所必需拥有的。
(2)内部存储ROM(Read Only Memory)
就是就相当于是PC中的硬盘的角色。用于存储Andoid 设备的操作系统和应用程序的存储介质。也就是说,Android设备中的Android系统和应用程序(APK文件)都是存在内部存储区的。例如手机的/system/目录、/data/目录等。
(3)外部存储区
相当于PC中的U盘或者移动硬盘。
由于Android设备通常会将内部存储器芯片固定在芯片上,所以一般无法更换内部存储器的。 为了增强Android设备的存储能力,很多Android设备都支持扩展的SD卡功能(通常称之为MicroSD类型的存储卡)。所以我们经常说的3GB+32GB或者 3GB+64GB是指 内存是3GB大小、内部存储大小为32GB或者64GB大小。
二、 Java内存结构
1、栈区(stack),由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap),一般由程序员分配释放, 若程序员不释放,JVM不定时观察发现没有引用指向时会GC回收 。
3、静态区(static storage),存放由static修饰的静态成员。 程序结束后由系统释放。
4、常量区(constant storage),基础类型、字符串等就是放在这里的。常量存储位于堆中。程序结束后由系统释放 。
5、代码区,存放函数体的二进制代码,而且是多个对象共享代码空间区域。
(为了更好理解各大区分配关系,专门配上了图示和小案例)
听说理解上,小案例跟图示更配哦:
public class Test { String a = "123456"; //基础类型常量池,堆中 final int A = 0; //常量,堆中 String[] c; //代码区 public static void main(String args[]) () { String b; //局部变量,栈中 String d = "123456"; //值在常量池堆中,变量d在栈中 static int c =0; //静态区 c=new String[5]; // 手动分配new创建对象,在堆中 } }
三、 堆和栈的区别
从定义上看,最明显的区别是手动分配和自动分配的策略不同。用比喻更形象的认识:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、吃(使用),吃饱了就 走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好 处是快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由 度大。
相关文章推荐
- java+内存分配及变量存储位置的区别
- java 内存分配及变量存储位置的区别
- java中字符串常量,堆栈的区别和字符串函数intern(),String s=new String(“abc”)中abc在内存的分配
- Java:java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别[转]
- java对象的内存分配编辑与寄存器 、堆栈、堆、静态存储等
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- Java中String、StringBuffer和StringBuilder的区别和堆栈内存分配
- 浅谈java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别
- java+内存分配及变量存储位置的区别