java对象的内存分配流程

了解对象的内存分配流程对常见内存溢出问题、jvm优化有很大作用。

内存分配原则

  • 对象栈内分配

通常理解new对象都在堆中分配存储空间,但是当(通过逃逸分析 确定)对象仅在方法内使用而未被外部访问的时候,jvm会将对象分配到栈内。

逃逸分析:就是分析对象动态作用域,当一个对象在方法中被定义后,它可能被外部方法所引用,例如作为调用参数(或者return)传递到其他地方中。

对应参数:-XX:+DoEscapeAnalysis;JDK7之后默认开启逃逸分析

  • 减量保证对象在Eden区分配

了解这一原则,必须先掌握gc流程:

  1. 对象首先分配到Edgn,存满之后触发minor gc,剩余仍然存活的对象会被存到from区;
  2. 下次Edgn存满之后再次出发minor gc,回收Edgn和from区,把剩余存活的对象转移到to 区(转移的原因参见之后的垃圾回收算法),然后form区和to区对换;

那么为什么尽量保证对象尽量存活在Edgn区呢?我们先来看看 Minor GC和Full GC 有什么不同呢?
Minor GC/Young GC:指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。
Major GC/Fu

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值