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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李凤鸣 中级黑马   /  2012-10-31 17:21  /  1079 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

eg1:
int[] x=new int[3];
int[] y=x;
y[1]=99;
System.out.print(x[1]);
x=null;

eg2:
int[] x=new int[3];
int[] y=new int[3];
y[1]=99;
System.out.print(x[1]);
x=null;

eg1不存在垃圾我明白

eg2为什么是存在垃圾
y[1]=99不算是对数组进行操作么
所以存在垃圾?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

2 个回复

正序浏览
eg1:
int[] x=new int[3];
int[] y=x;//x,y指向堆内存同一个内存块
y[1]=99;
System.out.print(x[1]);
x=null;//x为空时x就不再指向堆内存的内存块了,但是y还是指向那个内存块,所以没有垃圾

eg2:
int[] x=new int[3];
int[] y=new int[3];//x、y分别指向堆内存中2个不同的内存块
y[1]=99;
System.out.print(x[1]);
x=null;//当x为空时,x原先指向的内存块就成垃圾了
回复 使用道具 举报
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,垃圾收集的目的在于清除不再使用的对象。
GC通过确定对象是否被活动对象引用来确定是否收集该对象,y数组被创建后并初始化后,并没有再被其他对象所引用,故而被看做是垃圾,会被回收。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马