JAVA对象内存逃逸技术

20 篇文章 0 订阅

“栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 ”

   
可见,垃圾回收GC是针对堆Heap的,而栈因为本身是FILO - first in, last out. 先进后出,能够自动释放。 这样就能明白到new创建的,都是放到堆Heap!

内存逃逸技术:
不在Heap Area分配对象,不需要GC来释放对象。
主要是在Stack中来分配,Stack中回收。
对象定义在方法体内部,又被外部引用使用,则为内存逃逸。


示例:

public class Test {

 public static void main() {

    Work worker = new Worker()

    while (true) {

        worker.useWorker();

    }

 }

}

class Worker {

  public Worker worker;

  public Worker getWorker() {

    return null == worker?new Worker() : worker;  //对象定义在方法体内部。

  }

  public void setWorker() {

      worker = new Worker();

  }


  public void useWorker() {

     Worker obj = getWorker();

  }


  public void useWorker2() {

     Worker obj = getWorker(); //没有被外部使用,不为内存逃逸

  }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值