黑马程序员技术交流社区

标题: 关于堆和栈的原理 [打印本页]

作者: belief丶Only    时间: 2013-12-17 11:16
标题: 关于堆和栈的原理
我只知道  栈内存:存储的局部变量或方法;                  在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配                堆内存:存储的是对象;
那堆和栈之间怎么转换的?他们的原理是什么?





作者: zzkang0206    时间: 2013-12-17 11:28
1、首先在堆里面new了一块空间,释放一个new的十六进制出来,
2、同时在栈里面开辟了一个空间接收了从堆里面new的十六进制,并指向了堆里面的对应new空间,
作者: 闭眼就天黑    时间: 2013-12-17 23:25
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存
一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,堆内存用于存放由new创建的对象和数组。栈中的变量指向堆内存中的变量。
我用最通俗的话说吧。没必要说那么多理论性的东西,只会让人越听越糊涂。就是一个存放地址,一个存放数据的。我也经常被搞的头晕,以前研究外挂的时候特别研究了汇编里的push和pop。
作者: belief丶Only    时间: 2013-12-17 23:32
闭眼就天黑 发表于 2013-12-17 23:25
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存
一些基本类型的变量和对象的引用变量都是在函数的栈 ...

嗯,谢谢你的回答..这个我感觉自己理解的比较浅
作者: 闭眼就天黑    时间: 2013-12-17 23:36
belief丶Only 发表于 2013-12-17 23:32
嗯,谢谢你的回答..这个我感觉自己理解的比较浅

我一般就认为堆存放数据,栈存放指向堆数据的地址。就是所谓的指针吧。。个人理解:P
作者: 李然    时间: 2013-12-18 06:50
我想你可以这样简单的理解:当你new 一个对象 并用类型变量接收时,类型变量存在于栈内存中,这个变量中保存的内存地址就指向堆内存中对应的那个new出的对象,就这个意思,也不能说是映射关系,你稍微体会一下就好啦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2