JVM - 5:分代模型:年轻代、老年代、永久代

12 篇文章 2 订阅

对象存活周期极短的

在这里插入图片描述

执行 main 方法的时候 会把 main 方法的栈帧 压入 当前线程的虚拟机栈

在每次的循环里

会一直创建 ReplicaManager 对象 的实例

对于创建出来的对象,会放到 堆内存 里面

大部分的对象存活时间都是很短的

执行下面的方法,创建一个对象 ,调用它的 load 方法,然后 loadReplicasFromDisk() 方法就会出栈

此时没有,没人引用这个对象之后,就会被 垃圾回收线程 清理掉

如此循环往复

每个方法 可能不到 1毫秒,就成为了垃圾

这在我们的 Java 代码中,占据了绝大部分的比例


有的对象可能是长期存活的

在这里插入图片描述
这个Kafka类是在JVM 方法区里的,通过它的静态变量,引用堆内存中的对象实例

下面循环的时候,会一直调用 ReplicaManager 类的方法

在这个过程中 ReplicaManager 会一直被 这个变量引用,长期停留在堆内存中,周期性的调用

所以这种是不会被 垃圾回收掉的


分代模型:年轻代,老年代

年轻代,就是第一种代码示例中的那种,创建和使用完之后立马就要回收的对象放在里面

老年代,就是第二种代码示例中的那种,创建之后需要一直长期存活的对象放在里面

为什么要区分年轻代,老年代

对于年轻代的对象,它的特点是朝生夕死,所以需要一种特定的垃圾回收算法来回收
对于老年代的对象,它的特点是长期存活,需要另外一种算法来进行回收

所以需要分成两个区域来存放不同的对象


永久代

在 JDK 1.8 之前,堆内存划分为,年轻代,老年代,永久代

JDK 1.8 去掉永久代,方法区,改为元空间


方法区会不会进行垃圾回收

该类的所有实例对象都已经从Java堆内存里被回收
加载这个类的ClassLoader被回收了
对该类的 class 对象,没有任何引用

满足以上条件才会被回收

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值