java在sleep时,会进行垃圾回收吗
大家好,我目前有一个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();
谢谢~
------解决方案--------------------它俩应该是同步的。
就算你不sleep,jvm该进行垃圾回收照样去垃圾回收。
------解决方案--------------------
当然不会导致gc线程sleep,gc一般都是有个策略的,并不是等一下它就有了,比如一个可能的策略是:已使用的堆内存占了总堆内存的80%,这时候触发gc;且流行的jvm实现上都可以用参数对gc策略进行调整
------解决方案--------------------sleep只是休眠一段时间,跟垃圾回收没关系。如果想自己回收,在创建的对象使用完后,把它设置为null