欢迎来到cool的博客
7

Music box

Click to Start

点击头像播放音乐
新博客链接

理解什么是堆和栈

http://blog.jobbole.com/75321/

https://www.zhihu.com/question/19729973

 

1. 当线程创建的时候,操作系统(OS)为每一个系统级(system-level)的线程分配栈。通常情况下,操作系统通过调用语言的运行时(runtime)去为应用程序分配堆。

2. 栈附属于线程,因此当线程结束时栈被回收。堆通常通过运行时在应用程序启动时被分配,当应用程序(进程)退出时被回收。

3. 当线程被创建的时候,设置栈的大小。在应用程序启动的时候,设置堆的大小,但是可以在需要的时候扩展(分配器向操作系统申请更多的内存)。

4. 栈比堆要快,因为它存取模式使它可以轻松的分配和重新分配内存(指针/整型只是进行简单的递增或者递减运算),然而堆在分配和释放的时候有更多的复杂的 bookkeeping 参与。另外,在栈上的每个字节频繁的被复用也就意味着它可能映射到处理器缓存中,所以很快(译者注:局部性原理)。

总结:

栈附属于线程,因此当线程结束时栈被回收。一个请求过来, 创建一个线程处理该请求, 当@name = "name" 创建一个局部变量,会以栈的形式存在内存中,自动分配空闲内存, 请求处理完,线程销毁,栈释放。

堆通常通过运行时在应用程序启动时被分配,当应用程序(进程)退出时被回收。

栈比堆要快。

 

java例子:

  • 本地变量在栈深度内部实施
  • 当堆中的对象被分配了一个空间时,每个实例变量的位置就被创建了。

返回列表