您的位置:首页 > 移动开发 > Android开发

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创建对象,在堆中
}
}

三、 堆和栈的区别

从定义上看,最明显的区别是手动分配和自动分配的策略不同。

用比喻更形象的认识:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、吃(使用),吃饱了就 走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好 处是快捷,但是自由度小。 
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由 度大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: