老李分享:jvm垃圾回收

1、垃圾收集算法核心思想

java语言建立了垃圾回收机制,用于跟踪正在被使用(引用)的对象和没有被使用(引用)的对象,该机制可以有效防范动态内存分配中可能发生的两个危险:因垃圾过多而导致内存耗尽,以及不恰当的内存释放造成内存非法引用。

垃圾收集的核心思想是:对虚拟机的可用空间即堆空间进行识别,如果对象正在被引用,则称其为活对象,如果没有被引用,则称为垃圾对象。可以回收其占据的空间,用于再分配。
2、触发主GC的条件

(1)、当应用程序空闲时,gc会被调用。因为gc运行在优先级最低的线程中,当没有应用线程运行的时候,gc会被调用。

(2)、当jvm内存空间即堆空间不足时,gc会被调用。应用线程在运行过程中创建对象时,如果没有足够的内存空间,jvm会强制执行一次GC用于回收内存再分配。如果内存空间任然不够,则会再执行2次GC,如果任然无法满足的话,就会报”out of memory“错误。

3、减少GC开销的措施

(1)、将不再使用的对象置为null。一般情况下,jvm会将值为null的对象当做垃圾,将不再使用的对象置为null,方便GC判定,从而提高GC效率。

(2)、不要显示调用System.gc()。显示调用GC,多数情况下回增加主GC的频率,也就增加了间歇性停顿的次数。

(3)、减少临时对象的使用。临时对象在跳出调用函数后,会成为垃圾对象。

(4)、能用基本类型就不用引用类型。基本类型变量占用的内存资源和其引用对象所占内存资源要少很多

(5)、在做字符串累加时,用stringBuffer替代String。string存储的字符串不可变,string在累加的时候会产生垃圾对象。而stringBuffer在累加时在原来对象上直接增加就可以了。

(6)、尽量少使用静态对象。静态对象不会被当做垃圾回收,会常驻内存。

(7)、分散对象创建和删除的时间。短时间内创建大量的对象,会需要大量的内存,jvm此时只能进行主GC,以回收内存。

转载于:https://blog.51cto.com/10988776/1725287

老李分享:jvm垃圾回收相关推荐

  1. JVM垃圾回收算法 总结及汇总

    先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回 ...

  2. JVM 垃圾回收算法 -可达性分析算法!!!高频面试!!!

    前言:学习JVM,那么不可避免的要去了解JVM相关的垃圾回收算法,本文只是讲了讲了可达性分析算法,至于标记-清除.标记-复制,标记-整理,分代收集等等算法,会在近两天的文章中陆续更新出来. 很喜欢一句 ...

  3. java学习笔记-4 JVM垃圾回收(GC)

    引言 jvm垃圾回收相关的问题是老生常谈的问题了,相信大家都有所了解,这里再进行相关的探讨,以加深理解.若文中有不正之言,望不吝指正. 本文将围绕以下几个点展开 1.为什么要进行垃圾回收 我们知道jv ...

  4. jvm - 垃圾回收 gc

    2019独角兽企业重金招聘Python工程师标准>>> jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 垃圾回收 ...

  5. 4、JVM垃圾回收机制、新生代的GC、GC(Minor GC、FullGC)、GC日志、JVM参数选项、元空间(笔记)

    4.JVM垃圾回收机制 4.1.新生代的GC 4.1.1.串行GC(SerialGC) 4.1.2.并行回收GC(Parallel Scavenge) 4.1.3.并行GC(ParNew) 4.2.G ...

  6. jvm垃圾回收机制_JVM 垃圾回收机制之堆的分代回收

    JVM垃圾回收机制之堆的分代回收 前言 前文我们了解了Java的GC机制,对于堆中的对象,JVM采用引用计数和可达性分析两种算法来标记对象是否可以清除,本文中我们还会了解到JVM将对分成了不同的区域, ...

  7. 垃圾回收机制和JVM垃圾回收常见算法

    垃圾回收机制和JVM垃圾回收常见算法 垃圾回收的好处和特点: 好处: 1. 提高编程效率: 2. 垃圾回收机制保护程序的完整性. 特点: 1. 只能回收无用对象的内存空间,对其他物理资源无能为力: 2 ...

  8. jvm gc垃圾回收机制和参数说明amp;amp;Java JVM 垃圾回收(GC 在什么时候,对什么东西,做了什么事情)

    jvm gc(垃圾回收机制) Java JVM  垃圾回收(GC 在什么时候,对什么东西,做了什么事情) 前言:(先大概了解一下整个过程) 作者:知乎用户 链接:https://www.zhihu.c ...

  9. 关于JVM垃圾回收的几个问题

    本文来说下关于JVM垃圾回收的几个问题 文章目录 判断对象是否可回收有几种方式 "GC Roots"对象都包含哪些 Java四种引用类型分别是什么 Java四种引用使用场景 JVM ...

最新文章

  1. 【CSAPP】三、程序的机器级表示
  2. 未封装的扩展程序是什么意思_Android漏洞挖掘第三期:客户端完整性未校验
  3. 汇编语言(二十七)之身份证最后一位求和校验
  4. 课时109.外边距合并现象(掌握)
  5. php ajax json post请求参数传递,javascript - ajax post 有个请求参数要用json 但请问js怎么转json的?...
  6. C++(STL):12--- list基本介绍
  7. 模型评价 - 机器学习与建模中怎么克服过拟合问题?
  8. python的array如何使用map_你应该了解的JavaScript Array.map()五种用途小结
  9. Python3+TensorFlow人脸识别:1-1课程导学
  10. Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
  11. [转载] python存数据库、c++读数据库_如何从C中读取python pickle数据库/文件?
  12. sql2000下 分页存储过程(一)
  13. 代码编辑器CodeMirror及其简单的配置
  14. 人工智能的现状分析和未来展望
  15. 美国住宅IP和机房Ip的区别
  16. 将10件商品的英文名称存储在数组中,输出名称的第3个字符是‘b‘的所有商品英文名称;再输出名称的长度小于6个字符的商品英文名称。
  17. bim webgl 模型 轻量化_WebGL轻量化BIM引擎如何加载大体量BIM模型
  18. Matlab中库函数imadjust()的使用细节
  19. kafka send方法详解 (同步异步) 小白使用记录
  20. 朋友圈便携小空调链接和源码!

热门文章

  1. 瑞丽噪声与信噪比的关系_演出扩声系统的噪声与接地
  2. 计算机中算术逻辑单元负责,算术逻辑单元
  3. android 获取网卡mac_在Android机顶盒上 怎么样获取有线网卡MAC地址?
  4. 申报成功后怎样修改_【小白教程】12月第3期《申报成功后,如何更正,快快收藏!》...
  5. 阿里云centos 7.6安装mysql_阿里云服务器中Linux下centos7.6安装mysql8.0.11
  6. python添加lxml库_7分钟,建议看完这5个Python库对比丨web抓取
  7. 2020人工神经网络第一次作业
  8. 易语言怎么判断文件是否一样_怎么判断网站建设公司是否正规
  9. vue 定位所在地_vue系列教程之微商城项目|商品购买
  10. linux open()调用的注意事项