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

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5428562.html,如需转载请自行联系原作者

不要主动进行垃圾回收相关推荐

  1. [改善Java代码]不要主动进行垃圾回收

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

  2. [Erlang 0014]Erlang垃圾回收机制

    前面的Erlang杂记中我们简单提到过Erlang的垃圾回收机制:1.以进程为单位进行垃圾回收 2.ETS和原子不参与垃圾回收.今天我们继续这一话题,关注更多关于细节. 在Erlang的官方文档中,关 ...

  3. python 内存回收机制_【第1题】 Pythonn内存管理以及垃圾回收机制

    内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...

  4. python中垃圾回收机制_python 垃圾回收机制

    首先我们要说是 以引用计数为主 标记清楚和分代回收为辅 接下来分以下几个方面解释 一 引用计数 每个对象内部都维护了一个值,该值记录这此对象被引用的次数,如果次数为0,则Python垃圾回收机制会自动 ...

  5. python内存的回收机制_Python 内存管理以及垃圾回收机制

    内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...

  6. NodeJS 垃圾回收

    关于nodeJS垃圾回收机制的讲解文章很多,这里我就不再重复,下面记录了一下我在工作中遇到的问题.nodejs 在64位电脑可用内存为1.4G,这是V8的内存机制决定的,目前我司所用版本比较陈旧为V4 ...

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

    一.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?   1.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况. 通常, ...

  8. javaSE (十六)Randon、System类的方法(生成随机数、主动垃圾回收、终止jvm、对程序进行记时、System自带的复制数组的方法)

    生成0到100之间的伪随机数 主动运行垃圾回收器,相当于呼喊保洁阿姨 非0就是异常终止jvm 对程序进行记时 System自带的复制数组的方法 1. 生成0到100之间的伪随机数2. 运行垃圾回收器, ...

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

    对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况.通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象.通过这种方式确定哪些对象是"可达的" ...

最新文章

  1. php 求数组组合数,php实现求数组全排列,元素所有组合的方法
  2. 4 Ways to Make Sure You Always Have Something to Say Online
  3. 嵌入式软硬件开发中遇到的坑
  4. HTML子选择器怎么加图,CSS伪类选择器:before、:after使用:插入字符、插入图片、插入项目编号...
  5. sublime-text-3设置输入中文方法
  6. HTML5的优点与缺点
  7. Python提取docx文档中例题、插图、表格清单
  8. redis介绍、主从配置
  9. ContextLoaderListener和Spring MVC中的DispatcherServlet加载内容的区别
  10. leetcode [27] 移除元素 / Remove Element
  11. ios 解压下载数据包(zip)
  12. python获取数据库列名_如何用Python从SQL中提取出涉及到的表名、列名?
  13. 仿iPhone通讯录制作小程序自定义选择组件
  14. Autodesk Inventor探索——齿轮参数化建模
  15. unc0ver 越狱工具来袭,支持iOS11.0~iOS14.8稳定越狱 更新至V8.0.2 支持 A7-A14
  16. 用c语言编程一个滑稽图案,滑稽,用C语言搞个鼠标连点器
  17. 置信传播算法(Belief Propagation)简介
  18. 最新外卖霸王餐系统程序源码|美团/饿了么霸王餐系统(含数据库)(可对接公众号)
  19. 关于VScode中用感叹号不能生成html骨架的解决方法
  20. 3D角色模型的雕刻技巧:电影般的艺术工作流程,靠的是时间的叠加

热门文章

  1. 用C#打开文件对话框的方法和简单使用的程序
  2. sublime theme color
  3. 万亿安防市场前景可期 未来四大发展趋势分析
  4. 如何确定恶意软件是否在自己的电脑中执行过?
  5. phoenixframework 自动化测试平台 1.4.8 版本发布
  6. Nodejs实现的一个静态服务器例子
  7. Android4.0源码编译方法以及错误解决方案
  8. Linux Socket学习--面向非连接的协议
  9. 程序员不是神,心态决定一切
  10. linux下内存的统计和内存泄露问题的定位-转