堆栈是什么?到底是堆,还是栈?一个线程一个java方法栈。
解决方案 »
- 新手求教
- 编译出错
- JDK1.5程序不能运行,提示如下,怎么回事啊?
- why it's wrong
- ******************请问这样java里怎样实现,100分,可以UP********************
- iText的极愚问题,我应将iText的类文件放在哪个目录下?
- 20菜鸟级问题 先到先得
- 哪里有Mastering ejb 第一版英文版下载,马上结帖
- 为什么将checkbox放到checkboxgroup中就变成了radio了,如果我想用真正的checkboxgroup呢?
- FutureTask类的handlePossibleCancellationInterrupt方法到底是干什么的?
- 有没有办法把java程序生成Tru64 Unix下的可执行程序
- 请教JtextPane的问题?
说白了,栈和堆都是进程空间内的一段虚存(将被映射到物理内存,所以也可说是内存中的一段空间),所不同的是,计算机对栈给予了更多支持。还记得栈指针寄存器吗,当程序调用内存时,栈指针将指向栈顶,存贮空间的分配就是通过移动栈指针来完成的。那么,哪些变量将在栈中分配空间呢?既然栈用起来这么方便,那么要 堆 来干什么呢?显然,如果我们在程序运行之前(编译时)就能知道要申请多少空间,栈就足够了,但在复杂的应用中,人们很难提前知道自己要申请多少空间.我们可以把 堆 看成存储空间的仓库,当我们需要存储空间时就从仓库中领取,不使用这段空间时就把它还回去(这是一个相当复杂的算法)。领取和归还的过程是程序执行时决定的(所谓的动态决定),编译时无法确定存储空间的位置。
线程是程序执行的最小单位,每个线程都有自己独立的堆栈.
不要误人子弟了!>程序中的每一个函数都有自己的栈,用于为函数作用域内的变量/对象分配存储空间<
每一个函数都有自己的栈??对象是在栈中分配吗??>而且一经分配则永久保留,直到显式的释放掉<
那垃圾收集器是干什么吃的??>还记得栈指针寄存器吗,...,编译时无法确定存储空间的位置。<
不要把c,c++的那套用在java上,java中方法调用栈和对象内存一样,是在堆上动态分配的。想知道java内部是如何运作兄弟,还是去找本书看看吧。