建议51: 不要主动进行垃圾回收

很久很久以前,在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可不是一个好招数!

转载于:https://www.cnblogs.com/DreamDrive/p/5428562.html

[改善Java代码]不要主动进行垃圾回收相关推荐

  1. 不要主动进行垃圾回收

    很久很久以前,在Java 1.1的年代里,我们经常会看到System.gc这样的调用-主动对垃圾进行回收.不过,在Java知识深入人心后,这样的代码就逐渐销声匿迹了-这是好现象,因为主动进行垃圾回收是 ...

  2. Java程序员的日常—— 垃圾回收中引用类型的作用

    在Java里面,是不需要太过于关乎垃圾回收,但是这并不意味着开发者可以不了解垃圾回收的机制,况且在java中内存泄露也是家常便饭的事情.因此了解垃圾回收的相关知识就显得很重要了. 引用,在垃圾回收中是 ...

  3. 【趣话编程】一个Java对象的回忆录:垃圾回收

    简介:趣话编程第三期,今天让我们一起去看看一个Java对象的回忆录:垃圾回收. 原文链接 对象的诞生 "你醒啦!",迷迷糊糊中听到一个声音,我睁开了眼睛,发现一个小伙伴正看着我. ...

  4. 编写高性能 .NET 代码 第二章:垃圾回收 基本操作

    基本操作 垃圾回收的算法细节还在不断完善中,性能还会有进一步的提升.下文介绍的内容在不同的.NET版本里会略有不同,但大方向是不会有变动的. 在.net进程里会管理2个类型的内存堆:托管和非托管.本地 ...

  5. java 代码解析工具_改善 Java 代码质量的工具与方法

    原标题:改善 Java 代码质量的工具与方法 我们可能见过上面的有关代码质量的图片,究竟如何衡量一段代码好坏? 代码质量是什么?为什么它很重要? 作家通过他的著作来讲述了一个清晰的.令人信服的故事.他 ...

  6. 改善Java代码有哪些方法?

    前言 Java是一门优秀的面向对象的编程语言,针对遇到同样的一个问题会有很多中解法哪种实现方法是最好的呢,还需要不断的探究JDK的底层原理.我会例出Java改善的建议哦,希望大家可以在平时开发工作去使 ...

  7. java 终结此段代码并重新运行_Java垃圾回收

    好久没看关于java的书了, 最近, 看了James Gosling的<>, 做了一些读书笔记. 这部分是关于垃圾回收的. 1.垃圾回收 对象是使用new创建的, 但是并没有与之相对应的d ...

  8. Java进阶 JVM 内存与垃圾回收篇(一)

    JVM 1. 引言 1.1 什么是JVM? 定义 Java Vritual Machine - java 程序的运行环境(Java二进制字节码的运行环境) 好处 一次编译 ,到处运行 自动内存管理,垃 ...

  9. gc java root_C#技术漫谈之垃圾回收机制(GC)

    GC的前世与今生 虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久.早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是 ...

最新文章

  1. Opencv笔记(五)——把鼠标当画笔
  2. Linux网络编程——浅谈 TCP 三次握手和四次挥手
  3. 通过Athens搭建go私服
  4. 爱因斯坦和高中几何问题
  5. webstorm使用gitee_webstorm 中 git 基本操作
  6. 修改apache 2.4.6的MPM模式
  7. java jvm 1.6_JVM1.6 GC详解
  8. axure rp 9授权码
  9. 《自己动手写网络爬虫》读书笔记——宽度优先爬虫和带偏好的爬虫
  10. 计算机社团闯关游戏,计算机协会社团文化节小游戏
  11. 魔百盒M301H-九联(JL)代工-强刷固件及教程
  12. flyingsaucer转换多个html,使用flying-saucer 实现 html转pdf实现input框select,textarea
  13. 品牌技术专场重磅加盟,看音视频如何引领新趋势
  14. COLA 2.0架构应用
  15. matlab坐标系无穷大,在 Matlab 中无穷大用 _______________ 表示
  16. Py正则表达式学习笔记:特殊字符——中括号表达式、限定符表达式
  17. 电大1255计算机网络本科,国家开放大学电大本科《计算机网络》2024期末试题及答案(试卷号:1255)...
  18. Flash 调试助手 Moster Debugger
  19. KingbaseES 数据库导入导出方法
  20. 『程序员必备软件』—— 短小精悍的GIF录制软件LICEcap

热门文章

  1. 网络推广中移动端优化如何在细节中取胜?
  2. 企业网络推广浅析外包企业网络推广如何有效布局关键词优化?
  3. Node和java和php,服务端I/O性能大比拼:Node、PHP、Java和Go(三)
  4. 新松机器人BG总裁高峰_新松与民航物流公司签署战略合作协议
  5. python数据可视化库 动态的_Python数据可视化:Pandas库,只要一行代码就能实现...
  6. svn服务器如何导入导出文件,如何导入svn dump备份文件或源代码文件?
  7. 在ssd中显示map tensorflow代码_PyTorch 1.3重磅发布,又要和TensorFlow搞事情了
  8. 最近ES遇到discover老是失败问题,ping主节点和node节点正常,抓包发现了大量的retransmission、tcp out of order、dup ack问题。...
  9. 一致性问题和Raft一致性算法——一致性问题是无法彻底解决的,可以说一个分布式系统可靠性达到99.99…%,但不能说它达到了100%...
  10. 独热编码(One-Hot)的理解