GC会stop the world。会暂停程序的执行,带来延迟的代价。所以在开发中,我们不希望GC的次数过多。

本文将讨论如何在开发中改善各种细节,从而减少GC的次数。

(1)对象不用时最好显式置为 Null

一般而言,为 Null 的对象都会被作为垃圾处理,所以将不用的对象显式地设

为 Null,有利于 GC 收集器判定垃圾,从而提高了 GC 的效率。

(2)尽量少用 System.gc()

此函数建议 JVM进行主 GC,虽然只是建议而非一定,但很多情况下它会触发

主 GC,从而增加主 GC 的频率,也即增加了间歇性停顿的次数。

(3)尽量少用静态变量

静态变量属于全局变量,不会被 GC 回收,它们会一直占用内存。

(4)尽量使用 StringBuffer,而不用 String 来累加字符串

由于 String 是固定长的字符串对象,累加 String 对象时,并非在一个 String对象中扩增,而是重新创建新的 String 对象,如 Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”操作时都必须创建新的 String 对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。 避免这种情况可以改用 StringBuffer 来累加字符串,因 StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象

(5)分散对象创建或删除的时间

集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM 在面临这种情况时,只能进行主 GC,以回收内存或整合内存碎片,从而增加主 GC 的频率。

集中删除对象,道理也是一样的。 它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主 GC 的机会。

(6) 尽量少用 finalize 函数

因为它会加大 GC 的工作量, 因此尽量少用finalize 方式回收资源。

(7) 使用软引用类型

如果需要使用经常用到的图片, 可以使用软引用类型, 它可以尽可能将图片保存在内存中, 供程序调用, 而不引起 OutOfMemory。

java gc 次数_浅谈如何减少GC的次数相关推荐

  1. java对象头_浅谈java对象结构 对象头 Markword

    概述 对象实例由对象头.实例数据组成,其中对象头包括markword和类型指针,如果是数组,还包括数组长度; | 类型 | 32位JVM | 64位JVM| | ------ ---- | ----- ...

  2. java 多线程同步_浅谈Java多线程(状态、同步等)

    Java多线程是Java程序员必须掌握的基本的知识点,这块知识点比较复杂,知识点也比较多,今天我们一一来聊下Java多线程,系统的整理下这部分内容. 一.Java中线程创建的三种方式: 1.通过继承T ...

  3. java手动回收_浅谈java是如何做资源回收补救的

    学习java的过程,我们经常谈论一个对象的回收,尤其是资源类型,如果没有显示的关闭,对象就被回收了,说明出现了资源泄漏.java本身为了防止这种情况,做了一些担保的方式,确保可以让未关闭的资源合理回收 ...

  4. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

  5. java list数组排序_浅谈对象数组或list排序及Collections排序原理

    常需要对list进行排序,小到List,大到对自定义的类进行排序.不需要自行归并或堆排序.简单实现一个接口即可. 本文先会介绍利用Collections对List进行排序,继而讲到Collection ...

  6. java缓存同步_浅谈JSON的数据交换、缓存问题和同步问题

    JSON轻量级的数据交换格式 相对于XML来说,JSON的解析速度更快,文档更小. JSON的格式 {属性名:属性值,属性名:属性值,--} 属性名的类型可以是string,number,boolea ...

  7. java同名函数_浅谈Java 继承接口同名函数问题

    在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样? 动手做实验: interface A{ void fun(); } interface B{ void fun(); ...

  8. java扫码枪键盘_浅谈在react中如何实现扫码枪输入

    触发原理 原理就是监听键盘输入,比如扫一个为6970596130126的69条形码,用扫码枪扫一下会在光标位置依次输出: 6 9 7 0 5 9 6 1 3 0 2 6 但这不是完整的,所以需要写一个 ...

  9. java jit 编译器_浅谈对JIT编译器的理解。

    1. 什么是Just In Time编译器? Hot Spot 编译 当 JVM 执行代码时,它并不立即开始编译代码.这主要有两个原因: 首先,如果这段代码本身在将来只会被执行一次,那么从本质上看,编 ...

最新文章

  1. Algs4-1.2.12为SmartDate添加一个方法dayOfTheWeek()
  2. mysql proxy性能差_mysql性能的检查和优化方法
  3. MyBatis代码生成器-Example讲解
  4. 【Qt】QModbusServer类
  5. Ext JS 4.1 RC1发布
  6. Educational Codeforces Round 42 (Rated for Div. 2)
  7. 常用脚本--在线重建或重整实例下所有索引
  8. DataGridView 设置行不可见时,与货币管理器的位置关联的行不能设置为不可见
  9. testmeshpro合批_TextMesh Pro新手使用手册
  10. python学习之小说爬虫
  11. java word_java输出word解决方案
  12. matlab将数据集分成训练集和测试集,如何将数据分成训练集和测试集?
  13. myeclipse未能启动服务器,myeclipse启动服务器时,tomcat出错问题
  14. 手机抽奖页面代码html,html5大转盘抽奖支持手机转盘抽奖代码
  15. veins车载通信仿真框架(3)--OMNET++基础
  16. 中国手术标记笔市场趋势报告、技术动态创新及市场预测
  17. 手机壳定制壁纸下载小程序全过程安装搭建教程
  18. 作业答案解析:尚学堂Java300集 第一章
  19. 关于可选链操作符(?.)
  20. 【计算机体系结构】计算机体系结构(6) 并行处理技术(1) SIMD并行计算机、算法和互联网络

热门文章

  1. python控件随窗口变化而适配_如何实现python tkinter控件随窗口变化?
  2. eas库存状态调整单不能反审核_订单少了,库存多了,利润没了……
  3. menu什么意思中文意思_英文alone、lonely、lonesome 中文意思跟用法差别
  4. 论MOS管开关对电源的影响
  5. ubuntu qt linux 下载文件,Qt ------ linux(ubuntu) 下用 linuxdeployqt 打包发布程序
  6. linux ftp 553,修复使用vsftp出错553 Could not create file的有效方法
  7. java 监听客户端的退出_Java ServerSocket 手动关闭监听
  8. SQL注入(1)--判断是否存在SQL注入漏洞
  9. oracle 数据文件recover,Oracle数据库意外删除数据文件的恢复(转载)
  10. java面向对象-------类属性和方法,不同类之间调用