博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能测试三十五:jvm垃圾回收-GC
阅读量:4484 次
发布时间:2019-06-08

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

垃圾回收-GC

 

三个问题

  哪些内存需要回收?
  什么时候回收?
  如何回收?

 

YoungGC和FullGC:

  新生代引发的GC叫YoungGC

  老年代引发的GC叫FullGC

 FullGC会引起整个Jvm的用户线程暂停,待垃圾回收完毕后,才继续运行

 

引用的定义:

如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表一个引用

 

对象存活状态:

确定对象“存活”还是“死去”:以下两种算法原理都一样,就是看当前这个对象,是否有引用正在指向它,如果有,就是还有用的,如果没有,就清除

  第一种:引用计数算法(已被废弃):

    如果当前对象有一个引用正在指向它,则在其对应的计数器上+1,统计完后计数器上为0的就代表没用的对象,进行清除

  第二种:根搜索算法(GC Roots):

    先找到对象,再根据对象去搜索,看有没有引用正指向它,如果有,就是还有用的,如果没有,就清除

 

永久代的垃圾回收:

永久代回收“性价比”比较低,因为里面放的都是静态的对象,都是有用的,无法回收,就算触发了一次回收,占用内存还是不会变

主要回收
  废弃的常量
  无用的类
    类的所有实例都已经被回收
    加载该类的ClassLoader已经被回收
    该类的Class对象没有在任何地方被引用

   

堆垃圾回收算法:

1、标记-清除算法

以两种状态个所有对象分类,然后清除掉可回收的部分

特点:

  分为“标记”和“清除”两个阶段
  标记完成后,统一回收
缺点:
  效率,标记和清除过程效率都不高
  空间,标记清除后会产生大量不连续的内存碎片

 

2、复制算法

把内存分为ab两块,触发垃圾回收的时候,直接把a里面可用的对象有序的复制到b里面,并清空a(和新生代的原理一样)

特点:

  内存分为相等的两块
  当一块内存用完,将存活对象复制到另外一块中,原内存一次性清理掉
  复制时按照顺序分配内存,无内存碎片问题
  新生代使用此算法
缺点:
  将内存分为两半,利用率低

 

3、标记-压缩算法

根据标记清除算法改良而来

特点:

  先对存活对象进行标记
  让所有存活对象向一边移动
  清理掉存活对象边界外的所有内存

注:老年代使用此算法

 

4、分代收集算法

当代的商业虚拟机都采用“分代收集”

根据对象的存活周期的不同将内存划分成几块,一般Java堆分为新生代和老年代
新生代采用复制算法
老年代采用标记-压缩算法

 

 垃圾收集器

以上的所有算法,都只是理念,而垃圾收集器是内存回收算法的具体实现,没有完美的收集器

Jvm不同的区域可以采用不同的垃圾收集器组合,主要有:

1、Serial收集器(串行)

  单线程收集器

  用户线程全部停止(Stop the world)
  Client模式下,新生代默认收集器
  优点:简单、高效

2、ParNew收集器(并行)

  并行收集器,Serial收集器的多线程版本

  Server模式下Jvm默认的新生代收集器
  默认开启的垃圾回收线程与cpu核数一致

3、CMS收集器(并发)

并发收集器(ConcurrentMarkSweep)

采用了标记-清除算法
并发收集、低停顿
缺点:
  消耗cpu
  会产生内存碎片
  浮动垃圾(Concurrent Mode Failure

4、G1收集器

 

转载于:https://www.cnblogs.com/zhongyehai/p/10306795.html

你可能感兴趣的文章
Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果
查看>>
Java学习——Applet写字符串(调字体)
查看>>
react路由
查看>>
nyoj 220——推桌子——————【贪心】
查看>>
java 静态方法分析
查看>>
codevs——4189 字典&&HihoCoder #1014 : Trie树
查看>>
洛谷——P1602 Sramoc问题
查看>>
【MySQL笔记】字符串、时间日期转换
查看>>
jQuery实战之仿淘宝商城左侧导航效果
查看>>
AC日记——「SCOI2016」幸运数字 LiBreOJ 2013
查看>>
unmount
查看>>
数据库连接池
查看>>
windwos iis 7.5 使用html 报405错误
查看>>
范围(地址转换)
查看>>
Unity3D游戏,TCP,WEBCOSKT,HTTP通信架构 weaving-socket
查看>>
【小程序入门集锦】19,微信小程序个人帐号申请
查看>>
【JAVA零基础入门系列】Day3 Java基本数据类型
查看>>
两个整数,求他们的最小公倍数和最大公约数
查看>>
Mongo索引
查看>>
php 实现设计模式之 建造者模式
查看>>