是否可以强制对象的垃圾收集?(java)

来源:百度知道 编辑:UC知道 时间:2024/06/02 20:47:34

Java中提供了一些和垃圾收集打交道的类,而且提供了一种强行执行垃圾收集的方法--调用System.gc(),但这同样是个不确定的方法。Java 中并不保证每次调用该方法就一定能够启动垃圾收集,它只不过会向JVM发出这样一个申请,到底是否真正执行垃圾收集,一切都是个未知数。

垃圾收集重要特点:
(1)垃圾收集发生的不可预知性:由于实现了不同的垃圾收集算法和采用了不同的收集机制,所以它有可能是定时发生,有可能是当出现系统空闲CPU资源时发生,也有可能是和原始的垃圾收集一样,等到内存消耗出现极限时发生,这与垃圾收集器的选择和具体的设置都有关系。

(2)垃圾收集的精确性:主要包括2 个方面:(a)垃圾收集器能够精确标记活着的对象;(b)垃圾收集器能够精确地定位对象之间的引用关系。前者是完全地回收所有废弃对象的前提,否则就可能造成内存泄漏。而后者则是实现归并和复制等算法的必要条件。所有不可达对象都能够可靠地得到回收,所有对象都能够重新分配,允许对象的复制和对象内存的缩并,这样就有效地防止内存的支离破碎。
以上是我数上的资料。
我的答案:
可以强制对对象进行垃圾收集,用
System.gc(); 和 System.runFinalization();来收集。
但是你不可预知他在什么时候开始调用收集器。
如果你对我真诚的回答满意的话,请给我多加分,如果有什么疑问的话,请给我留言。QQ也可以全天在线108424683

可以重写该对象的gc.(),但不一定是立即执行。

强制对象的垃圾收集?你是说强行的把这个对象给回收了,还是说强行启动垃圾回收器。
如果是前者估计不能了,c里面有析构函数可以给你手动直接调用,把这个对象给ko了,但是java只有个finalize,但是这个方法只是在该对象被ko之前被动调用的,你主动调用这个方法该对象也不会被ko的。
强行启动垃圾回收机制System.gc(),你如果想立刻清理某个对象的话,只要释放该对象的引用,然后强行启动垃圾回收那这个对象就被ko了,但是这种手段会真占用系统资源,所以不建议使用,反正最好方法就是别一次性产生大量的垃圾,垃圾太多环卫工人忙不