栈。编译器自动分配释放, 存放局部变量,参数值。操作方式:栈
堆。程序员分配释放 操作方式:链表
静态区,全局区。 存放,全局变量和静态变量初始化的在一起,未初始化的在相邻区域。
文字常量区:存放常量字符串区
程序代码区,存放二进制代码。
int a = 0; //全局初始化区。
int b; //全局未初始化区
main(){
char s[] = "abc" //.栈。又叫堆栈,"abc"存放在常亮字符串区
p2 = new person(); 堆,// person对象是存放在堆中,但是p2还是存放在栈中
}
stack 栈 heap:堆
stack:栈 | 系统自动分配 | 只有栈的剩余空间大于所申请的空间 | 总大小是确定的常数1M或者2M | 申请速度快 |
---|---|---|---|---|
heap:堆 | 由程序员自己申请,并指明大小 | 系统中有一个记录空闲内存地址的链表,遍历找第一个空间足够大的堆节点,删除空闲链表中的记录,分配空间,如果有多的空间,再放到空闲列表中。 | 内存大小取决于虚拟内存 | 申请速度慢 |
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就
走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自
由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由
度大。 (经典!)
java中的存储
寄存器 | 堆栈 | 堆 | 常亮存储 | 非RAM存储 |
---|---|---|---|---|
处理器内部,最快的存区,无法控制 | 通用RAM,存放引用 | 通用内存池《ram》,存放对象 | 常量存储 | 比如数据库的东西放在其他地方 |
基本类型是存放在堆栈中的。