美文网首页javaJVM
JVM-分代模型

JVM-分代模型

作者: terry蒋 | 来源:发表于2021-01-06 23:32 被阅读0次

一、对象生命周期

1. 对象生命周期

  • 大部分对象都是存活周期极短的

  • 少数对象是长期存活的

二、JVM分代模型

1. 年轻代老年代

1.1 什么是新老年代

堆内存分为年轻代老年代

(1) 年轻代

年轻代也叫新生代。存放创建和使用完后很快就要被回收的对象。

年轻代划分

  • 又分为Eden区,from survivor区,to survivor区
  • Eden区和两块较小的survivor空间。默认大小比例为8:1:1
(2) 老年代

存放长期存在的对象

(3) 新老年代示例:
image.png

Kafka的静态变量"fetcher"引用了ReplicaFetcher对象,这个对象先在年轻代停留一段时间,最终会进入老年代。

而loadReplicasFromDisk方法中的replicaManager引用的实例对象在一次方法调用结束后,方法的栈帧出栈,实例对象会很快被回收。

1.2 为什么分为年轻代和老年代

因为不同存活时长的对象需要不同的垃圾回收算法,这样回收更高效。

  • java大部分对象都是朝生夕死的,这些不需要长期存在的对象,放年轻代中,需要使用一种垃圾回收算法;

  • 长期存在的,放老年代中,需要使用另外一种垃圾回收算法。

1.3 为什么要有survivor区

  • 没有survivor区,只有eden区的话,每进行一次minor gc,对象就被送入老年代。很容易触发full gc,影响性能
  • 而如果又survivor区,则可以减少送入老年代的对象数量,减少full gc的发生

1.4 为什么要设置两个survivor区

每次minor gc,通过将eden和一个survivor的内容复制到另一个survivor, 避免碎片化问题

2. 永久代

JDK1.8以前有永久代,JDK1.8开始,已经取消了永久代。但是方法区作为概念上的区域仍然存在,但是我们不再叫方法区了,而是叫元数据区(metaspace)。

原先永久代中类的元信息会被放入本地内存(元数据区metaspace),将类的静态变量和内部字符串放入到java堆中。

相关文章

  • JVM-分代模型

    一、对象生命周期 1. 对象生命周期 大部分对象都是存活周期极短的 少数对象是长期存活的 二、JVM分代模型 1....

  • JVM-内存模型

    Java并发是基于共享内存模型实现的。学习并深入地理解__Java内存模型__,有助于开发人员了解Java的线程间...

  • jvm-内存模型

    一、学习jvm的目的 jmm规范(java memory model),定义了多线程环境下,线程间的交互行为,保证...

  • JVM-内存模型

    前言 近几个月学习了儒猿技术窝的专栏《从 0 开始带你成为JVM实战高手[https://apppukyptrl1...

  • JVM类加载器与双亲委派模型(JDK8)

    引言 在上文JVM-类加载机制[https://imchenway.com/2021/07/01/JVM-%E7%...

  • java内存分代模型(用于分代垃圾回收算法)

    内存分代模型分代模型并不是一种垃圾回收算法,而是一种内存管理模型。将java中的内存分为不同区域,在GC时不同区域...

  • JVM GC简要描述

    现在JVM的GC内存管理模型是分代模型,收集机制也是分代收集。分代是什么意思呢?就是将对象按照生命周期分为三个层次...

  • [转载] JVM堆模型/分代

    JVM堆(Heap)= 新生代(Young) + 旧生代(Tenured)新生代(Young)= Eden区 + ...

  • JVM-双亲委派模型小结

    jvm小结(后续补充) 1、虚拟机的类加载机制 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、...

  • JVM初识(内存模型、堆分代)

    JVM,听到这个词是不是很熟悉,只要你是做过几年Java开发,估计也都被面试官用这个东东虐过,我把自己收集整理的笔...

网友评论

    本文标题:JVM-分代模型

    本文链接:https://www.haomeiwen.com/subject/bdhaoktx.html