【jvm】堆空间分代思想

目录

          • [1. 说明](#1. 说明)
          • [2. 分代原理](#2. 分代原理)
            • [2.1 对象生命周期差异](#2.1 对象生命周期差异)
            • [2.2 分代策略](#2.2 分代策略)
          • [3. 新生代(Young Generation)](#3. 新生代(Young Generation))
            • [3.1 区域划分](#3.1 区域划分)
            • [3.2 对象分配](#3.2 对象分配)
            • [3.3 晋升条件](#3.3 晋升条件)
          • [4. 老年代(Old Generation)](#4. 老年代(Old Generation))
            • [4.1 对象存放](#4.1 对象存放)
            • [4.2 垃圾回收](#4.2 垃圾回收)
          • [5. 分代垃圾回收算法](#5. 分代垃圾回收算法)
            • [5.1 复制算法](#5.1 复制算法)
            • [5.2 标记-清除算法](#5.2 标记-清除算法)
            • [5.3 标记-整理算法](#5.3 标记-整理算法)
1. 说明
  • 1.JVM堆空间分代思想是基于对象的生命周期不同而提出的,目的是为了优化垃圾回收机制,提高内存管理效率。
  • 2.这种分代策略将堆内存划分为不同的区域,每个区域存放不同生命周期的对象,从而采用不同的垃圾回收策略。
2. 分代原理
2.1 对象生命周期差异
  • 1.在Java程序中,对象的生命周期有很大差异。
  • 2.有些对象很快就会被回收,而有些对象则会长时间存活。
  • 3.如果将所有对象都放在同一个区域进行管理,那么垃圾回收时会遍历整个区域,效率会很低。
  • 4.因此,JVM将堆内存划分为不同的区域,以优化垃圾回收过程。
2.2 分代策略
  • 1.JVM堆内存通常被划分为新生代(Young Generation)和老年代(Old Generation)。
  • 2.新生代用于存放生命周期较短的对象,而老年代则用于存放生命周期较长的对象。
  • 3.通过这种分代策略,JVM可以针对不同的对象采用不同的垃圾回收算法,从而提高内存管理效率。
3. 新生代(Young Generation)
3.1 区域划分
  • 1.新生代通常被划分为三个区域:Eden区、From Survivor区(也称为S0区)和To Survivor区(也称为S1区)。
  • 2.这三个区域的空间大小比例通常为8:1:1,但可以通过JVM参数-XX:SurvivorRatio进行调整。
3.2 对象分配
  • 1.新创建的对象通常会被分配到Eden区。
  • 2.当Eden区空间不足时,JVM会触发一次Minor GC(也称为Young GC),回收Eden区中的不再使用的对象,并将存活的对象复制到From Survivor区或To Survivor区。
  • 3.复制过程中,对象的年龄会加1。
  • 4.当From Survivor区或To Survivor区空间不足时,JVM会再次触发Minor GC,并将存活的对象复制到另一个Survivor区或老年代。
3.3 晋升条件
  • 1.对象在新生代中的存活时间达到一定程度(默认是15次Minor GC,可以通过-XX:MaxTenuringThreshold参数调整)后,会被晋升到老年代。
  • 2.如果对象的大小超过了-XX:PretenureSizeThreshold参数设置的值,也会直接被分配到老年代。
4. 老年代(Old Generation)
4.1 对象存放
  • 1.老年代用于存放生命周期较长的对象,以及从新生代晋升过来的对象。
4.2 垃圾回收
  • 1.当老年代空间不足时,JVM会触发一次Full GC(也称为Major GC或Old GC),回收老年代中的不再使用的对象。
  • 2.Full GC的速度通常比Minor GC慢很多,因为它需要遍历整个堆内存。
5. 分代垃圾回收算法
5.1 复制算法
  • 1.新生代通常采用复制算法进行垃圾回收。
  • 2.该算法将内存划分为两个相等的区域,每次只使用其中一个区域进行对象分配。
  • 3.当该区域空间不足时,将存活的对象复制到另一个区域,并清空当前区域。
  • 4.复制算法的优点是效率高、复制过程简单。
  • 5.缺点是内存利用率低,因为每次只能使用一半的内存空间。
5.2 标记-清除算法
  • 1.老年代通常采用标记-清除算法进行垃圾回收。
  • 2.该算法首先标记出所有不再使用的对象,然后清除这些对象所占用的内存空间。
  • 3.标记-清除算法的优点是内存利用率高。
  • 4.缺点是效率较低,因为需要遍历整个堆内存进行标记和清除操作。
  • 5.标记-清除算法还会产生内存碎片问题。
5.3 标记-整理算法
  • 1.为了解决标记-清除算法产生的内存碎片问题,老年代还可以采用标记-整理算法进行垃圾回收。
  • 2.该算法在标记出所有不再使用的对象后,会对存活的对象进行整理,使它们连续存放在内存中。
  • 3.标记-整理算法的优点是解决了内存碎片问题。
  • 4.缺点是效率较低,因为需要额外的整理操作。
相关推荐
yuanbenshidiaos11 小时前
c++---------数据类型
java·jvm·c++
java1234_小锋14 小时前
JVM对象分配内存如何保证线程安全?
jvm
40岁的系统架构师17 小时前
1 JVM JDK JRE之间的区别以及使用字节码的好处
java·jvm·python
寻找沙漠的人17 小时前
理解JVM
java·jvm·java-ee
我叫啥都行18 小时前
计算机基础复习12.22
java·jvm·redis·后端·mysql
bufanjun00120 小时前
JUC并发工具---ThreadLocal
java·jvm·面试·并发·并发基础
东阳马生架构1 天前
JVM简介—1.Java内存区域
jvm
工程师老罗1 天前
Android笔试面试题AI答之SQLite(2)
android·jvm·sqlite
Qzer_4072 天前
jvm字节码中方法的结构
jvm
奇偶变不变2 天前
RTOS之事件集
java·linux·jvm·单片机·算法