JVM 垃圾回收的一些知识( 新生代老年代 / MinorGC和MajorGC / 可达分析与回收算法 )

本文介绍了JVM的垃圾回收机制,包括新生代与老年代的内存划分,MinorGC和MajorGC的工作过程,以及可达分析与常用的垃圾回收算法。详细讨论了新生代的Eden、Survivor区的分配策略,以及如何通过调整参数影响GC行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

JVM的自动垃圾回收处理的是不再使用的对象/数组, 这些对象/数组都是存储在堆内存中, 堆内存相关介绍请看这里:
https://blog.youkuaiyun.com/j550341130/article/details/82152054


新生代/老年代

在 Java 中, 堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old ).
新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor.
这里写图片描述

默认比例:
1. 新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 );
2. 新生代 Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 )

新生代 是基本上所有对象创建/保存的区域, 一般新建的对象会分配到Eden区 ( 另一部分是大对象, 它们会直接放入老年代, 这是为了保留新生代的内存复制效率, 大对象标准可以使用-XX:PretenureSizeThreshold 来设置 ).

JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务, 所以无论什么时候, 总是有一块 Survivor 区域是空闲着的. 因此, 新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间.

每次GC时, 把Eden存活的对象和From Survivor中存活且没超过年龄阈值的对象复制到To Su

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值