关于Java垃圾回收问题
为情所困
为情所困 2017-05-17 09:58:29
0
3
792

循环中的变量在每次循环后都会被回收吗

比如

  for (int i=0;i<1000000;i++){
      Date date=new Date();
   }
   

这个date没有被引用,这样会被垃圾回收吗? 如果创建对象被引用,结果又是怎样的了?

为情所困
为情所困

全部回复(3)
我想大声告诉你

java的GC有YGC和FGC。
你这里没有被引用的date对象一定会被回收,但不是在每次循环结束后。
GC的时机和你的代码执行没有必然联系。
相关知识,你可以baidu下java GC

过去多啦不再A梦

这个问题的答案在于,jvm的垃圾回收机制在什么情况下会进行垃圾回收。
局部变量的作用于是{},也就是说,date没有被引用了,当执行垃圾回收动作的时候,这里的date就会被回收。

習慣沉默

new一个对象,那么就是存放在堆中,而且刚创建的对象存放在eden区中,只有当eden区满了,才会触发Monitor GC进行回收。
你可以在运行参数中添加-XX:+PrintGCDetails观察GC回收的情况。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板