美文网首页
不要主动进行垃圾回收

不要主动进行垃圾回收

作者: A_一只小菜鸟 | 来源:发表于2021-12-13 20:53 被阅读0次

很久很久以前,在Java 1.1的年代里,我们经常会看到System.gc这样的调用——主动对垃圾进行回收。不过,在Java知识深入人心后,这样的代码就逐渐销声匿迹了——这是好现象,因为主动进行垃圾回收是一个非常危险的动作。
之所以危险,是因为System.gc要停止所有的响应( Stop the world),才能检查内存中是否有可回收的对象,这对一个应用系统来说风险极大,如果是一个Web应用,所有的请求都会暂停,等待垃圾回收器执行完毕,若此时堆内存(Heap)中的对象少的话则还可以接受,一旦对象较多(现在的Web项目是越做越大,框架、工具也越来越多,加载到内存中的对象当然也就更多了),那这个过程就非常耗时了,可能0.01秒,也可能是1秒,甚至是20秒,这就会严重影响到业务的正常运行。
例如,我们写这样一段代码:new String("abc"),该对象没有任何引用,对JVM来说就是个垃圾对象。JVM的垃圾回收器线程第一次扫描(扫描时间不确定,在系统不繁忙的时候执行)时把它贴上一个标签,说“你是可以被回收的”,第二次扫描时才真正地回收该对象,并释放内存空间,如果我们直接调用System.gc,则是在说“嗨,你,那个垃圾回收器过来检查一下有没有垃圾对象,回收-一-下”。瞧瞧看,程序主动招来了垃圾回收器,这意味着正在运行着的系统要让出资源,以供垃圾回收器执行,想想看吧,它会把所有的对象都检查一遍,然后处理掉那些垃圾对象。注意哦,是检查每个对象。
不要调用System.gc,即使经常出现内存溢出也不要调用,内存溢出是可分析的,是可以查找出原因的,GC可不是一个好招数!

相关文章

  • 不要主动进行垃圾回收

    很久很久以前,在Java 1.1的年代里,我们经常会看到System.gc这样的调用——主动对垃圾进行回收。不过,...

  • 垃圾回收算法原理

    垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 对于GC来说,当...

  • 垃圾回收机制

    垃圾回收机制 永远不要主动调用某个对象的finalize方法,应该交给垃圾处理机制

  • JVM常见垃圾回收器介绍

    垃圾回收器简介 在新生代和老年代进行垃圾回收的时候,都是要用垃圾回收器进行回收的,不同的区域用不同的垃圾回收器。分...

  • JVM 垃圾回收与垃圾回收算法

    垃圾回收 啥是垃圾回收?为什么要进行垃圾回收?是怎么进行垃圾回收的?这一套组合拳问题,我想大家都有思考过,下面就来...

  • GC

    请简单描述一下垃圾回收器的基本原理是什么?还有垃圾回收器可以马上回收内存吗?并且有什么办法可以主动通知虚拟机进行垃...

  • 2018-07-20

    Java GC(垃圾回收)原理 与C/C++相比,JAVA并不要求我们去人为编写代码进行内存回收和垃圾清理。JAV...

  • jvm之收集器

    JVM为什么要进行垃圾回收? 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。...

  • 03/16牛客刷题总结

    1.垃圾回收 垃圾回收在jvm中优先级相当相当低 垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,...

  • 深入理解Java虚拟机之垃圾收集算法篇

    这篇文章将讲解垃圾回收的概念以及对那些区域进行垃圾回收,最后讲解几种常见的垃圾回收算法。 概述 什么叫垃圾收集器?...

网友评论

      本文标题:不要主动进行垃圾回收

      本文链接:https://www.haomeiwen.com/subject/yddlfrtx.html