课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
垃圾回收是我们在学习软件编程开发技术的时候会着重去学习的一个功能,而今天我们就通过案例分析来了解一下,java编程开发中gc垃圾回收方法的基础知识。
一、什么是System.gc()?
System.gc()是用Java,C#和许多其他流行的高级编程语言提供的API。当它被调用时,它将尽大努力从内存中清除垃圾(即未被引用的对象)。名词解释:GC,GarbageCollection,垃圾回收,下文会经常使用。
二、谁可以调用System.gc()?
System.gc()可以从应用程序堆栈的各个部分调用:
您自己开发的应用程序可以显式的调用System.gc()方法。
System.gc()也可以由您的三方库,框架触发。
可以由外部工具(如VisualVM)通过使用JMX触发
如果您的应用程序使用了RMI,RMI会定期调用System.gc()。
三、调用System.gc()有什么弊端?
当System.gc()或Runtime.getRuntime().gc()API被调用时,将触发完整的GC事件。在GC完成之前,整个JVM将冻结(即正在运行的所有服务将被暂停),通常完整的GC需要很长时间才能完成。因此在不合适的时间运行GC,将导致不良的用户体验,甚至是崩溃。
JVM具有复杂的算法,该算法始终在后台运行,进行所有计算以及有关何时触发GC的计算。当您显式调用System.gc()调用时,所有这些计算都将被抛掉。
四、哪些场景适合显式调用System.gc()?
GC操作应该由JVM自行控制,在绝大部分的场景都不建议程序员手动写代码显式进行System.gc()操作,但是也不排除其中个别例外:在我们开发多个微服务时,每个服务都有多个备份节点。在非业务高峰时段,我们可以从微服务-负载均衡的节点池中取出其中一个JVM实例。然后通过该JVM上的JMX显式触发System.gc()调用,一旦GC事件完成并且从内存中清除了垃圾,将该JVM放回到微服务-负载均衡的节点池中。
当然这个过程需要很好的微服务管理及服务发布机制配合,这样既能保证JVM垃圾内存的有效清理,又不影响业务的正常运行。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。