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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© cs8630323 高级黑马   /  2013-7-26 17:03  /  3471 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看的老毕的视频,看到数组,说到栈内存自动释放,有些不明白
释放就是删除?
如果定义一个变量int x=1;   它不是一直在内存中吗?怎么会被释放?

评分

参与人数 1技术分 +1 收起 理由
万琪 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
如果你定义了一个变量的话,如果没有引用指向它的话,就被java的回收机制当做垃圾直接回收了
回复 使用道具 举报
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
回复 使用道具 举报
在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
回复 使用道具 举报
并不是一直存在的,它随着对象的加载而加载,
当对象运行结束消失后,也随之消失。
回复 使用道具 举报
当然不可能一直都在内存中,所有的变量都有一个生命周期,例如:局部变量,当此局部变量所在方法开始执行时,它被创建,当其所在方法执行结束时,该局部变量被销毁,其内存也将被释放;再比如如果是全局变量,当程序从main入口开始逐句执行,当执行到定义该变量语句时,创建该变量,分配内存,当程序执行完毕,变量也会被销毁,其内存也将被释放。所以,没有变量能一直在内存中存在。
回复 使用道具 举报
java中,在方法中定义一个
for(int x=1;x<10;x++){}x是存在栈内存中,在内存中的生命周期就是大括号内,出来大括号就结束了;数组是引用关系数据类型,例如:int arr [] = new int[8],在堆内存空间中开辟8个连续的内存空间,把首地址赋值给在栈内存arr,arr指向8块内存空间的首地址,当这种关系消失的话(即引用关系消失),int [8]就没有意义,JVM有垃圾回收机制,不定时回收垃圾,java就不会发生内存溢出(这是java比c++优秀的地方之一,c++需要程序员手动释放内存)
回复 使用道具 举报
局部变量在栈里,该段程序结束就被收回。
回复 使用道具 举报
局部变量在栈里,该段程序结束就被收回。
回复 使用道具 举报
在定义一个局部变量的时候,就会在栈内存中给这个变量分配一个地址空间。如:在一个方法中定义了int x =1;
那么当JVM调用这个方法结束时,就会自动释放x这个变量的地址空间,不是一直存在的;方法都有一个大括号{}括起来的,也就是说int x = 1的生命周期就在这个大括号{}之间;出了这个{}就释放 x的栈内存。
回复 使用道具 举报
本帖最后由 toShareBeauty 于 2013-7-27 01:39 编辑

数据结构中的栈了解么,栈内存释放,是指 java 中的局部变量,这些局部变量的内存是在 java 栈中分配的,java 栈中有好多栈帧,一个函数对应一个栈帧,当执行到这个函数的时候给这个函数创建一个栈帧,并把这个栈帧压入 java 栈,当函数执行完了就把这个栈帧弹出 java 栈,然后释放栈帧占用的内存。函数的局部变量是在栈帧中 local 域中分配的。


回复 使用道具 举报
定义一个数组是在堆内存中开辟存储空间,而内存地址赋到了栈内存中;
当定义的数组变量生命周期结束是,jvm会自动释放栈内存空间
希望能帮到你、共同学习哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马