对象的分配流程,什么是逃逸分析,如何确定对象分配在哪个分代上面

本文介绍了Java对象的分配流程,强调了逃逸分析的重要性。逃逸分析用于确定对象是否会被外部引用,以便优化内存分配。通过开启逃逸分析,对象可能在栈上分配,减少GC压力。此外,讨论了大对象直接进入老年代、对象年龄与晋升机制、动态年龄判断以及老年代的空间分配担保机制。
摘要由CSDN通过智能技术生成

对象分配流程图

 对象栈上分配

        我们通过jvm内存分配可以了解到对象都是在堆上分配的,如果对象没有被使用了会由GC进行回收,如果垃圾对象比较多那么会给GC的回收带来较大的压力,间接影响了应用的性能,为了减少临时对象在堆上分配的数量,JVM会通过逃逸分析来确定对象会不会被外部引用,如果不会逃逸则会将对象在栈上分配内存,这样该对象所占用的内存空间会随着栈针的出栈而销毁,减轻了GC回收的压力

逃逸分析

        就是分析对象的作用域当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数传递到其他地方中。

public User escape1() {
   User user = new User();
   user.setId(1);
   user.setName("jackandpig");
   //TODO 保存到数据库
   return user;
}

public void escape2() {
   User user = new User();
   user.setId(1);
   user.setName("jackandpig");
   //TODO 保存到数据库
}

从上面可以看出escape1方法中的user对象被返回了,这个对象的作用域范围不确定,escape2方法中的user对象我们可以确定当方法结束这个对象就可以认为是无效对象了,像escape2里面的user对象我们可以将它分配在栈

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值