JVM——分代模型(2)

在这里插入图片描述

1.JVM分代模型:年轻代和老年代

大部分对象都是存活周期极短的少数对象是长期存活的

年轻代:创建和使用完之后立马就要回收的对象放在里面

老年代:创建之后需要一直长期存在的对象放在里面

2.什么是永久代?

JVM里的永久代其实就是我们之前说的方法区,1.8叫元空间。

3.方法区内会不会进行垃圾回收

方法区里的类会被回收。前提有三个条件:

  1. 首先该类的所有实例对象都已经从Java堆内存里被回收
  2. 其次加载这个类的ClassLoader已经被回收
  3. 最后,对该类的Class对象没有任何引用
4.什么情况下会触发新生代的垃圾回收?

大部分的正常对象,都是优先在新生代分配内存的。

​ 如果新生代我们预先分配的内存空间,几乎都被全部对象给占满了!此时假设我们代码继续运行,他需要在新生代里去分配一个对象,怎么办?发现新生代里内存空间都不够了!

​ 这个时候,就会触发一次新生代内存空间的垃圾回收,新生代内存空间的垃圾回收,也称之为“Minor GC”,有的时候我们也叫“Young GC”,他会尝试把新生代里那些没有人引用的垃圾对象,都给回收掉。

5长期存活的对象会躲过多次垃圾回收

成功的在15次垃圾回收之后,还是没被回收掉,那么就会被认为是会长期存活在内存里的对象。

然后他会被转移到Java堆内存的老年代中去,顾名思义,老年代就是放这些年龄很大的对象。

6老年代会垃圾回收吗?

肯定的,因为老年代里的对象也有可能随着代码的运行,不再被任何人引用了,就需要被垃圾回收。

特别大的超大对象直接不经过新生代就进入老年代。

7.每个线程执行方法的时候,那些方法对应的栈帧出栈了,那么那里的局部变量需要垃圾回收吗?

JVM里垃圾回收针对的是新生代,老年代,还有方法区(永久代),不会针对方法的栈帧,方法一旦执行完毕,栈帧出栈,里面的局部变量直接就从内存里清理掉了。

8 总结 :
  • 先理解对象优先分配在新生代
  • 新生代如果对象满了,会触发Minor GC回收掉没有人引用的垃圾对象
  • 如果有对象躲过了十多次垃圾回收,就会放入老年代里
  • 如果老年代也满了,那么也会触发垃圾回收,把老年代里没人引用的垃圾对象清理掉
9每个线程执行方法的时候,那些方法对应的栈帧出栈了,那么那里的局部变量需要垃圾回收吗?

​ JVM里垃圾回收针对的是新生代,老年代,还有方法区(永久代),不会针对方法的栈帧。

方法一旦执行完毕,栈帧出栈,里面的局部变量直接就从内存里清理掉了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值