日期:2014-05-20  浏览次数:20659 次

system.gc()方法的使用
在程序中频繁的手动调用是否会反而导致内存的使用量变大?从而导致系统当机?
比如对一个视频进行循环播放,在每次播放完毕后进行一次手动调用system.gc(),然后在进行从新播放,这样会对程序有影响吗?谁能帮帮忙~

------解决方案--------------------
Sysytem.gc();只是告诉JVM垃圾回收,但是至于JVM是否会回收是没办法控制的。所以你调用不调用gc对系统来说没有太大的影响。
------解决方案--------------------
Sysytem.gc(); 这个只是通知JVM进行垃圾回收,但JVM具体什么时候回收是程序员无法控制的。
------解决方案--------------------
我也看过一点,jvm方面的书。

我猜测可能是这样的。

有很多因素都会导致 jvm 进行垃圾回收。

但是因素分为两种类型
一种是触发型。

这就好比你新new 一个对象,jvm发现eden区(你可以理解为堆中的某块区域)空间不够了。

这个时候,jvm就会进行一次minorGC(你可以理解为一种垃圾回收程序)。

一种是检查型。

比如你虚拟机参数为

当老年代(你可以理解为堆中的某块区域)中内存使用率达到了68%的时候就进行一次majorGC(你可以理解为一种垃圾回收程序)。


对于触发型,是不得不gc的。
而对于检查型,相当于一个线程,每隔一段时间就执行某段程序检查看需不需要gc.


而System.gc()。就是建议虚拟机检查一下需不需要gc(也就是上面那个线程,每隔一段时间执行的那个程序).


也就是说本来是30s之后看需不需要gc,而你在此时此刻就让他看需不需要gc.


这是个人猜测,不一定对。