3分钟搞懂jvm垃圾回收机制

几句话概括jvm垃圾回收机制

1. jvm在堆内存中分为新生代和老年代。

2. 新生代中分为eden区和from区、to区。新来的对象会放到eden区内。当eden区放不下了,会将eden区的对象移到from区。要是from区装不下,就放到将from区里的对象移到to区。如果to区内存也不够,to区中的东西会先查from区,from区不够,则会放到老年代内存中,此时该对象的年龄加一。当from区或者to区有足够内存空间了,从老年代移到from区和to区。当对象年龄大于一定阈值的时候(XX:MaxTenuringThreshold),对象被当作垃圾回收。

3. 在2中,每一次移动都会是一个minor GC。当老年代空间满了,会发生full gc。

4. 在程序执行的维度看下垃圾回收:

public static void testGc() {
        {
            byte[] b = new byte[1024 * 1024];
        }
        int c = 0;
        System.gc();
    }

这个程序,b被分了1M的内存,一个引用架在了变量b和1M内存之间。此时,b和1m内存被牢牢的连在一起,如果立马进行gc,那么肯定是不成功的。之后出了作用域,来了一个新的变量c,原先b的栈帧会在栈内存中出栈,之后c的栈帧进栈,并和0绑定在一起。此时运行gc,那么原先b所拥有的1M内存会被释放。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值