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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
各位好,今天看到gc,做了个测试,代码如下:
public class test {
        static int[][] arr;
        public static void main(String[] args) {
                arr=new int[][] {{0,1,2},{2,3,4},{2,3,4}};
                System.out.println(arr);
                System.gc();
                System.out.println(arr);
        }
}

打印结果如下:
[[I@de6ced
[[I@de6ced


gc前与后的结果一样,为什么这里gc不管用还是需要一段时间才会自动清除?

8 个回复

正序浏览
时间不能确定,gc只是相当于你去呼叫保姆来清理垃圾,如果这个保姆觉得你的垃圾不算多或则保姆现在正忙着清理其他的垃圾他是不会立马过来清理你的垃圾的
回复 使用道具 举报
还没有学到,提前来学新知识。
回复 使用道具 举报
本帖最后由 毛毛毛玉 于 2014-9-14 07:17 编辑

函数没有退出吧?
变量此时应该还是有效的。先设置为null试试?
那个函数似乎是在“建议”进行gc。
java的机制不大清楚,不过应该也是那样。进行垃圾回收的时候,先对所有内存占用进行标记,然后对当前作用域有效的引用所对应的内存去除标记,然后对这些地方引用到的内存去除标记,直到最后结束……所有没标记的内存都会被某种机制干掉……
呃,我说的不一定准确甚至正确……不过应该可以这样方便理解……大概……Orz
回复 使用道具 举报
最佳答案没有直接回答楼主的问题
回复 使用道具 举报
这个时间是虚拟机调配的,你不能指定
回复 使用道具 举报
刚看到毕老师的视频中有类似问题,垃圾回收机制是不定时回收的,就比如垃圾桶满了之后就会被回收掉
回复 使用道具 举报
网上看到这个:
http://blog.csdn.net/huxin1/article/details/5932911
希望对你有所帮助
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马