博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[改善Java代码]不要主动进行垃圾回收
阅读量:7009 次
发布时间:2019-06-28

本文共 706 字,大约阅读时间需要 2 分钟。

建议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可不是一个好招数!

 

转载地址:http://lmttl.baihongyu.com/

你可能感兴趣的文章
转帖:解决System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
查看>>
Visual Studio Code Name "Orcas" Beta 1发布
查看>>
开发nodejs模块并发布到npm的简单示例
查看>>
SSH login without password
查看>>
你应该如何更好地利用搜索引擎
查看>>
转载:Window Azure 中的Web Role详解
查看>>
自启动程序详解
查看>>
转 nutch网页快照乱码解决方法
查看>>
HDU 2426 Interesting Housing Problem
查看>>
SQLSqlserver中如何将一列数据,不重复的拼接成一个字符串
查看>>
[Java 泥水匠] Java Components 之二:算法篇之项目实践中的位运算符(有你不懂的哦)...
查看>>
讨论:怎样加快android的开机时间
查看>>
oh my zsh设置
查看>>
解读ASP.NET 5 & MVC6系列(5):Configuration配置信息管理
查看>>
【原创】JDK动态代理,此次之后,永生难忘。
查看>>
collection的框架结构
查看>>
c++中的对象复制
查看>>
ubuntu下linux内核源码阅读工具和调试方法总结
查看>>
PHP生成UTF-8编码的CSV文件用Excel打开乱码的解决办法
查看>>
xshell快捷键
查看>>