java的垃圾回收机制是完全不可控的,但调用System.gc()后不就会清理内存了吗

时间:2021-04-10 03:41:51
这两件事不矛盾吗?调用System.gc()后java垃圾回收器不就是可控的了吗?

13 个解决方案

#1


调用System.gc()后也不是立即执行回收,有可能不回收

#2


调用 System.gc 也仅仅是通知而已
要等虚拟机觉得需要执行时才执行

#3


《深入JVM》里不知道是否有详实描述。
看看API关于System.gc()的说明:运行垃圾回收器。 
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。 

设置比较合理的xms和xmx,避免内存泄露,才是控制内存的好办法。

%java_home%\demo\management\ 下面的demo可以看看,展示了对内存的一些管理活动。

#4


System.gc()只是通知要垃圾回收了,但是并没有即刻进行垃圾回收

#5


System.gc()只是建议回收,实际回收与否看运气了

#6


System.gc()是提醒作用!


就好比你妈妈叫你该写作业,这是提醒,至于你写不写,你妈妈不会管你的

#7


System.gc()可以屏蔽掉的。

#8


System.gc()只是在回收的时候会进行此清理动作,回收的时机不由gc()决定,而由JVM的算法决定

#9


有句话是这样的,调用gc的时候不一定回收,不调用gc的时候不一定不回收。

#10


调用gc的时候不一定回收,不调用gc的时候不一定不回收。
你可以看看http://www.javaeye.com/topic/695362

#11


调用gc的时候不一定回收,不调用gc的时候不一定不回收

#12


恩,对虚拟机垃圾回收的时间问题也是颇有疑问。

#13


这个System.gc()函数的作用只是提醒虚拟机,但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机(对应的os不同等)有不同的对策。

#1


调用System.gc()后也不是立即执行回收,有可能不回收

#2


调用 System.gc 也仅仅是通知而已
要等虚拟机觉得需要执行时才执行

#3


《深入JVM》里不知道是否有详实描述。
看看API关于System.gc()的说明:运行垃圾回收器。 
调用 gc 方法暗示着 Java 虚拟机做了一些努力来回收未用对象,以便能够快速地重用这些对象当前占用的内存。当控制权从方法调用中返回时,虚拟机已经尽最大努力从所有丢弃的对象中回收了空间。 

设置比较合理的xms和xmx,避免内存泄露,才是控制内存的好办法。

%java_home%\demo\management\ 下面的demo可以看看,展示了对内存的一些管理活动。

#4


System.gc()只是通知要垃圾回收了,但是并没有即刻进行垃圾回收

#5


System.gc()只是建议回收,实际回收与否看运气了

#6


System.gc()是提醒作用!


就好比你妈妈叫你该写作业,这是提醒,至于你写不写,你妈妈不会管你的

#7


System.gc()可以屏蔽掉的。

#8


System.gc()只是在回收的时候会进行此清理动作,回收的时机不由gc()决定,而由JVM的算法决定

#9


有句话是这样的,调用gc的时候不一定回收,不调用gc的时候不一定不回收。

#10


调用gc的时候不一定回收,不调用gc的时候不一定不回收。
你可以看看http://www.javaeye.com/topic/695362

#11


调用gc的时候不一定回收,不调用gc的时候不一定不回收

#12


恩,对虚拟机垃圾回收的时间问题也是颇有疑问。

#13


这个System.gc()函数的作用只是提醒虚拟机,但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机(对应的os不同等)有不同的对策。