一. 堆栈:
堆heap,先进先出
栈stack,先进后出
向里面放置元素的时候叫做压栈(push)
向外取出元素的时候叫做弹栈(pop)
可以把栈想象成一个桶:
堆:运行时可动态分配的数据区域(即为new),数据不共享(因每次都是新对象)。
栈:速度快(仅次于寄存器),数据共享,数据的大小和生存周期在运行前提前确定。
二. 值传递和引用传递;
例子:值传递(8种基本数据类型)和引用传递(类 数组 接口)
P431
三. 对象实例化过程:
(参考书P194)
Human aperson = new Human();
右侧:
new 在运行时在堆(内存)上创建对象,并存放对象的变量和方法。
(每次new都是创建新对象,所以堆数据不共享。)
左侧:
对象的名字aperson就是对象引用(reference),存放栈上。
等于(赋值):
把new在堆上创建的对象地址,赋值给对象引用aperson。
图解:
其他:一个引用可指向多个对象,一个对象可有多个引用。
注:内存指的是JVM虚拟出来的Java进程的内存空间
四. Java中堆内存和栈内容的区别
第九章,,P203和P204
五.方法在栈内存
在JVM当中有一块内存空间,就是栈区,专门为方法准备的。方法执行所需要的内存空间都在栈当中分配。
1. 方法调用之后给该方法分配内存,在JVM的“栈区”当中分配空间,
2. 方法调用分配空间的过程就是:压栈(push)的过程。
3. 方法执行结束之后,给这个方法分配的所有空间全部释放,此时发生弹栈(pop)的动作。
179

被折叠的 条评论
为什么被折叠?



