jvm认识整理

参考:https://blog.csdn.net/lianhunqianr1/article/details/117794988(漫画)
https://baijiahao.baidu.com/s?id=1668372300989151267&wfr=spider&for=pc(整理的一大篇)
https://blog.csdn.net/bjweimengshu/article/details/79124681(有后续)

这两天公司有人要做jvm调优的分享,赶紧临时学习了下jvm这块知识,整理了一下。

基本科普

  • GC:清除无用对象操作
  • jvm堆里有两个区:新生代区,老年代区
  • 元数据区:不在jvm中,在本地内存中

清除可被回收对象的方式

  • 标记清除算法(产生内存碎片较多)

在这里插入图片描述

  • 标记整理算法(效率不高)
    在这里插入图片描述
  • 分区算法(分成多个独立的区)

贴个结构图

在这里插入图片描述
上图画的其实不大准,一般推荐新生代和老年代比例是1:2,总内存就是堆。

我们先看新生代,伊甸园Eden代表新产生的对象存放的位置,幸存区to代表当新生代满了,需要gc时候会把幸存下来的对象放到to里面,其他全部清空,然后from和to互换下命名,准备下次YoungGc(minor gc),也可以说to区永远保持里面是空的状态。

还有存活次数一般设置为15,15次后还活着就可以将它移动到老年代里面养老了。老年代如果快要满了就会被full Gc(新老都被gc)

tip:老年代也装不下的时候会抛OOM异常(out of memory)
如果新对象在eden区放不下,则直接放入老年代
如果老年区也放不下,直接full Gc

归纳了现在各个垃圾收集器

  • Serial垃圾收集器(单线程,复制算法)是jvm默认新生代使用的【新生代】
  • parNew垃圾收集器(serial+多线程)是虚拟机在server模式下默认的【新生代】
  • Parallel Scavenge 收集器(多线程复制算法、高效),适用于后台运算不太多,即新生代出来的没那么快的【新生代】
  • Serial old收集器(单线程标记整理算法)【年老带】
  • CMS 收集器(多线程标记清除算法)【年老带】
  • G1 收集器-最前沿的,配置要求高,java9以上
posted @ 2021-06-18 14:36  蜗牛使劲冲  阅读(5)  评论(0编辑  收藏  举报  来源