作者: 三眼皮 时间: 2014-3-5 22:07
基本类型(8种)位于栈中,只占有一块内存。例如 int a = 3;而引用类型占两块内存,一块是引用对象名,在栈内存中,它指向另一块在堆中的实际值,这点跟c语言中的指针差不多,可以做相同的理解。例如Person p = new Person(“李明”,24),p就位于栈中,而new出来的对象-------24岁的李明,就位于堆中。作者: 为你而去 时间: 2014-3-5 23:17
应该是先有栈,不过这些JVM替我们管理的,可能需要底层的只是才能理解吧
压栈,就是把一个新的值存入栈里,栈的大小是固定的,先入栈的值存在较高位的内存中,后入栈的顺序向低位内存存储,栈具有先进后出的特点作者: 赵文超 时间: 2014-3-6 10:19
局部变量存在于栈内存中,存放指向堆内存中New出来的对象的地址或实际值作者: sanguodouble1 时间: 2014-3-6 11:16 本帖最后由 sanguodouble1 于 2014-3-6 11:20 编辑
java的内存可以分为4部分
stack栈
heap堆
code segment 代码区
data segement 数据区
其中stack用来存放 局部变量
heap用来存放对象,你可以理解为new出来的东西
code segment用来存放代码的字节码,比如当你要调用一个方法时,系统就会去这个区中找方法相应的字节码
data segment用来存放数据,比如一些静态常量啊什么的
举个例子,你在main函数中写了下面这条语句
int a = 10;
static int b = 20;
Animal dog = new Animal();
那么他在内存中是这样分布的先在stack中分出一个部分,用来存放变量a,他里面的值是10;
然后在data segment分出一部分,用来存放b,他里面的值是20;
然后又在stack里面划出一部分,用来存放dog,他里面的值是一堆用于指向heap区的引用
最后在heap里划出一部分,用来新建一个Animal类型的对象
通过stack的dog里面的值,可以指向Animal