A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© litaojisuanji 高级黑马   /  2013-12-9 21:14  /  1591 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 litaojisuanji 于 2013-12-10 21:08 编辑

我们都知道内存有,栈,堆,方法区,本地方法区,寄存区
比如 : Student s = new Student();
首先:java 先将Student类加载到方法区中,然后在栈中定义一个变量s ,在堆中用new申请一段空间放Student,再把这个首地址赋给s,s就指向了堆里的Student,那Student中有一个study方法,这个方法也在方法区中,那这个方法中假如有一个变量,是存放在哪呢。。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

正序浏览
方法的运行特点是只要调用的时候才会运行,因此当方法被调用的时候会在栈开辟内存空间,此时就会将变量存放在这段空间里。
回复 使用道具 举报
本帖最后由 回音 于 2013-12-9 22:01 编辑

(抱歉,重复了不知咋删掉)
回复 使用道具 举报
1. 局部变量是方法或语句块内部定义的变量,比如形参。局部变量必须初始化。 局部变量存在于栈中。栈中的局部变量随着方法运行完毕而消失(修改栈指针,局部变量出栈消失,由编译器控制)。
2. 因为局部变量的大小和生命周期是可以在编译时确定的,所以栈指针的移动可以在编译时确定。加之栈的速度快,所以局部变量会被放在栈中。每个线程包含一个栈,栈内数据共享,不同栈间的数据不共享。
3. 线程的栈有多个部分,其中一个叫方法调用栈,会追踪线程运行中一系列的方法调用过程。这个栈的基本元素叫做帧。每当线程调用一个方法时,会向栈中压入一个新的帧。帧中储存着方法的参数,局部变量和其他临时数据。java中栈不可由用户直接操作,由虚拟机控制。所以java中栈的内存可以是不连续的。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
方法区里的变量在调用方法时,才会在堆或栈中重新分配空间,如果一直没调用,就不会分配空间。
回复 使用道具 举报
本帖最后由 lyn 于 2013-12-9 21:32 编辑

栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈。当函数运行结束时,分配给函数的栈空间被收回,在这个函数中被定义的变量也随之被释放和消失。存在于栈内存中

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马