注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中华神鸟

QQ:935658701

 
 
 

日志

 
 

Stack的三种含义  

2013-12-02 23:09:33|  分类: 每天学一点 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.数据结构中的“栈”
一种一组数据的存放方式,一种LIFO的数据结构,如下图:
数据结构stack

2."调用栈"
表示函数和子程序像积木一样存放,以实现层层调用,对于以下的代码:

public class Student{

int age;

String name;

public Student(int age, String name){

this.age = age;

this.setName(name);

}

public void setName(String name){

this.name = name;

}


public static void main(String []args){

Student s;

s = new Student(15, "张三");

}

}

对于上面的程序,先执行入口方法main,在main中使用构造方法Student()创建了Student的对象,而在构造方法中又调用了setName()方法,其调用关系如下图:
调用栈

3.内存中的“栈”
存放数据的一种内存区域,程序运行时,需要内存空间来存放数据,系统一般会划分出两种内存空间,一种叫做栈(Stack),另一种叫做堆(heap)。二者的区别是栈是有结构的,数据按一定次序存放,区块的大小是确定的;而堆是没有结构的,数据存放是任意的,自然栈的寻址速度比堆快。
一般一个线程分配一个栈,一个进程分配一个堆,栈是线程独享的,堆是线程共享的。栈的大小在创建时就是确定的,栈一般用来存放局部的、明确知道大小的数据,当栈被用完时就会发生溢出(StackOverflow)。而堆则的大小是可变的,当被用完时可以进行扩充,用来存放大小不定的数据,对象一般是存放在堆内存中的。
对于下面的程序:
public void Method1()
{
int i=4;

int y=2;

class1 cls1 = new class1();
}
其在内存中的存放如下图所示:
内存空间stack实例
当程序运行到方法结束的大括号时,栈中的东东会被清空,指向堆中对象的指针自然也就不复存在,但是堆内的对象却一直存在,知道垃圾回收机制将其回收,如果知道程序运行结束前还没有执行垃圾回收,那么它就会一直存在到程序结束,当程序结束后栈和堆都会被全部清空!

原文地址:http://www.admin10000.com/document/3403.html
  评论这张
 
阅读(85)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017