逃逸分析与栈上分配

本文探讨了内存管理中的逃逸分析技术,介绍了逃逸对象的概念,并列举了几种发生逃逸的情景。此外,还讨论了如何利用逃逸分析来优化内存分配,减轻垃圾回收的压力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内存管理主要分为两部分:内存分配、垃圾回收

逃逸对象:对象的作用于仅在当前方法中有效,称为没有发生逃逸,反之就认为是逃逸对象

发生逃逸情景举例:

1.方法返回对象

public static StringBuffer craeteStringBuffer(String s1, String s2) {

        StringBuffer sb = new StringBuffer();

        sb.append(s1);

        sb.append(s2);

        return sb;

    }

2.对象为成员变量赋值

public class Student{

         public Student a;

         public void test(){

                a=new Student();

         }

}

3.引用成员变量的值

Java中的对象都是在堆上分配的,而垃圾回收机制会回收堆中不再使用的对象,但是筛选可回收对象,回收对象还有整理内存都需要消耗时间。如果能够通过逃逸分析确定某些对象不会逃出方法之外,那就可以让这个对象在栈上分配内存,这样该对象所占用的内存空间就可以随栈帧出栈而销毁,就减轻了垃圾回收的压力。

但是分析逃逸对象也需要时间,所以性能未必提升多少。

目前主流商用hotSpotVm 并没有做这项优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值