黑马程序员技术交流社区

标题: 对内存垃圾释放问题? [打印本页]

作者: Geek_001    时间: 2014-6-18 17:10
标题: 对内存垃圾释放问题?
本帖最后由 Geek_001 于 2014-6-20 23:59 编辑

int[] x = new int[3];
x=null;               
为何此时堆内存中还有垃圾?


作者: luojunwei1992    时间: 2014-6-18 17:26
Java的垃圾回收机制是对象或实体在堆内存中变成垃圾(及不被引用),java虚拟机会自动启动垃圾回收机制、把不用的对象或实体清除掉。但不一定马上执行。会在不定时的时间内清除它。毕老师视频讲的
作者: 謓心い謓意    时间: 2014-6-18 17:47
同意楼上说法
作者: luojunwei1992    时间: 2014-6-18 19:33
讲的这么详细,都不给技术分呢:(
作者: 墓____夜    时间: 2014-6-18 19:44
因为你之前堆内存,放弃了,又从新开辟了一块堆内存,只不过没有存东西。  所以之前的内存就成垃圾了
作者: luojunwei1992    时间: 2014-6-18 21:38
@伍叶竹   @李小然  @SyouRai_Tsk  版主呢,给我技术分啊,回答的这么详细,不要打击我回答问题的热情啊
作者: Geek_001    时间: 2014-6-19 02:21
luojunwei1992 发表于 2014-6-18 21:38
@伍叶竹   @李小然  @SyouRai_Tsk  版主呢,给我技术分啊,回答的这么详细,不要打击我回答问题的热情啊 ...

第一:你按照老师说的回答的是很仔细,你知道我的问题是什么吗?我的问题是被new新建立的实例对象数组x    在堆内存中开辟了空间,且初始化值均为0,但之后把null赋值给数组x后,不相当于把数组x清空了吗?为何堆内存中还有垃圾?
作者: luojunwei1992    时间: 2014-6-19 09:15
Geek_001 发表于 2014-6-19 02:21
第一:你按照老师说的回答的是很仔细,你知道我的问题是什么吗?我的问题是被new新建立的实例对象数组x   ...

我上面回答了,因为java的垃圾回收机制很特别,它不会立刻清理不用的垃圾啊,过一段时间你在看就会发现垃圾已经被释放了
作者: luojunwei1992    时间: 2014-6-19 09:20
x=null,意思是引用变量x不在指向堆中数组的首地址了,引用变量初始化值是null
作者: Geek_001    时间: 2014-6-19 11:15
luojunwei1992 发表于 2014-6-19 09:20
x=null,意思是引用变量x不在指向堆中数组的首地址了,引用变量初始化值是null ...

数组x若写成:int[] arr = new int[],其初始化值为null,但若写成int[] arr = new int[3],其初始化值为0,前面半句的回答我同意。
作者: luojunwei1992    时间: 2014-6-19 19:33
第一个格式不对吧,缺少数组维,第二个是堆中的元素初始化值为0,arr等于堆中数组的首地址
作者: alive    时间: 2014-6-20 02:20
x=null之后,x不在指向数组对象,但是数组对象还在堆内存中,不会立即释放




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