不要主动进行垃圾回收
很久很久以前,在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,如需转载请自行联系原作者
不要主动进行垃圾回收相关推荐
- [改善Java代码]不要主动进行垃圾回收
建议51: 不要主动进行垃圾回收 很久很久以前,在Java 1.1的年代里,我们经常会看到System.gc这样的调用-主动对垃圾进行回收.不过,在Java知识深入人心后,这样的代码就逐渐销声匿迹了- ...
- [Erlang 0014]Erlang垃圾回收机制
前面的Erlang杂记中我们简单提到过Erlang的垃圾回收机制:1.以进程为单位进行垃圾回收 2.ETS和原子不参与垃圾回收.今天我们继续这一话题,关注更多关于细节. 在Erlang的官方文档中,关 ...
- python 内存回收机制_【第1题】 Pythonn内存管理以及垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- python中垃圾回收机制_python 垃圾回收机制
首先我们要说是 以引用计数为主 标记清楚和分代回收为辅 接下来分以下几个方面解释 一 引用计数 每个对象内部都维护了一个值,该值记录这此对象被引用的次数,如果次数为0,则Python垃圾回收机制会自动 ...
- python内存的回收机制_Python 内存管理以及垃圾回收机制
内存管理 Python解释器由c语言开发完成,py中所有的操作最终都由底层的c语言来实现并完成,所以想要了解底层内存管理需要结合python源码来进行解释. 1. 两个重要的结构体 include/o ...
- NodeJS 垃圾回收
关于nodeJS垃圾回收机制的讲解文章很多,这里我就不再重复,下面记录了一下我在工作中遇到的问题.nodejs 在64位电脑可用内存为1.4G,这是V8的内存机制决定的,目前我司所用版本比较陈旧为V4 ...
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?...
一.垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 1.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况. 通常, ...
- javaSE (十六)Randon、System类的方法(生成随机数、主动垃圾回收、终止jvm、对程序进行记时、System自带的复制数组的方法)
生成0到100之间的伪随机数 主动运行垃圾回收器,相当于呼喊保洁阿姨 非0就是异常终止jvm 对程序进行记时 System自带的复制数组的方法 1. 生成0到100之间的伪随机数2. 运行垃圾回收器, ...
- 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址.大小以及使用情况.通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象.通过这种方式确定哪些对象是"可达的" ...
最新文章
- php 求数组组合数,php实现求数组全排列,元素所有组合的方法
- 4 Ways to Make Sure You Always Have Something to Say Online
- 嵌入式软硬件开发中遇到的坑
- HTML子选择器怎么加图,CSS伪类选择器:before、:after使用:插入字符、插入图片、插入项目编号...
- sublime-text-3设置输入中文方法
- HTML5的优点与缺点
- Python提取docx文档中例题、插图、表格清单
- redis介绍、主从配置
- ContextLoaderListener和Spring MVC中的DispatcherServlet加载内容的区别
- leetcode [27] 移除元素 / Remove Element
- ios 解压下载数据包(zip)
- python获取数据库列名_如何用Python从SQL中提取出涉及到的表名、列名?
- 仿iPhone通讯录制作小程序自定义选择组件
- Autodesk Inventor探索——齿轮参数化建模
- unc0ver 越狱工具来袭,支持iOS11.0~iOS14.8稳定越狱 更新至V8.0.2 支持 A7-A14
- 用c语言编程一个滑稽图案,滑稽,用C语言搞个鼠标连点器
- 置信传播算法(Belief Propagation)简介
- 最新外卖霸王餐系统程序源码|美团/饿了么霸王餐系统(含数据库)(可对接公众号)
- 关于VScode中用感叹号不能生成html骨架的解决方法
- 3D角色模型的雕刻技巧:电影般的艺术工作流程,靠的是时间的叠加