java在sleep时,会进行垃圾回收吗

I_am_a_java_CaiNiao 2012-09-20 11:50:00
大家好,我目前有一个POJO对象, 该对象中具有很多属性(会有对象属性及继续深入的嵌套):
class MyObject {
private String str1;
private String str2;
private Object obj1;
private List<Object> objList;
....
}
当该对象初始化,进行一系列操作后,有一些属性,程序已不再需要,因此我希望能将这些属性占用的内存回收。如:我不再需要objList这个对象属性。
以下代码,表示最终将MyObject的一个对象的objList属性置null,但JVM不会马上回收
MyObject myobj = new MyObject();
// ... business logic
myobj.setObjList(null);
问1:
System.gc(); // 假设加了这一句,效果会比不加好吗?
问2:
// 以下情况会比“问1”中的好吗?
Thread.sleep(2000L);
System.gc();

谢谢~
...全文
538 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alex20150716 2012-09-21
  • 打赏
  • 举报
回复
sleep只是休眠一段时间,跟垃圾回收没关系。如果想自己回收,在创建的对象使用完后,把它设置为null
liangtu 2012-09-21
  • 打赏
  • 举报
回复
这是两回事,不能混为一谈。
龙四 2012-09-21
  • 打赏
  • 举报
回复
当然不会导致gc线程sleep,gc一般都是有个策略的,并不是等一下它就有了,比如一个可能的策略是:已使用的堆内存占了总堆内存的80%,这时候触发gc;且流行的jvm实现上都可以用参数对gc策略进行调整

[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:

java应用中的线程和gc线程没有直接关系,gc是jvm后台守护线程

System.gc()只是提示jvm进行gc,但是jvm理不理你的提示,那就不知道了

就像你妈妈喊你回家吃饭,你可能马上就回去了,也可能过会再回去,还可能懒得理

那在sleep的时候,后台线程会不会也sleep?我在这儿写sleep的目的,是希望尽量能给JVM足够的时间,让其回……
[/Quote]
hoarhoar 2012-09-20
  • 打赏
  • 举报
回复
sleep和垃圾回收没有关系,你调用一下System.gc()敦促一下就行了,什么时候回收也是不确定的。
tingyingg 2012-09-20
  • 打赏
  • 举报
回复
sleep是挂着以后用,不回收
龙四 2012-09-20
  • 打赏
  • 举报
回复
java应用中的线程和gc线程没有直接关系,gc是jvm后台守护线程

System.gc()只是提示jvm进行gc,但是jvm理不理你的提示,那就不知道了

就像你妈妈喊你回家吃饭,你可能马上就回去了,也可能过会再回去,还可能懒得理
tingyingg 2012-09-20
  • 打赏
  • 举报
回复
当以后的代码不再应用你的引用时,jvm帮你弄了,特殊情况你可以System.gc();但sleep不会收,
江湖啊江湖 2012-09-20
  • 打赏
  • 举报
回复
它俩应该是同步的。
就算你不sleep,jvm该进行垃圾回收照样去垃圾回收。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

java应用中的线程和gc线程没有直接关系,gc是jvm后台守护线程

System.gc()只是提示jvm进行gc,但是jvm理不理你的提示,那就不知道了

就像你妈妈喊你回家吃饭,你可能马上就回去了,也可能过会再回去,还可能懒得理
[/Quote]
那在sleep的时候,后台线程会不会也sleep?我在这儿写sleep的目的,是希望尽量能给JVM足够的时间,让其回收垃圾。不知该想法是否正确?
谢谢~

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧