当前位置:   article > 正文

【Android面试八股文】Java对象会不会分配到栈中?

【Android面试八股文】Java对象会不会分配到栈中?

Java对象会不会分配到栈中?

一、什么是堆(Heap) ,什么是栈(Stack)

在Java中,对象的内存分配主要发生在堆(Heap)中,而非栈(Stack)

  • 堆内存:几乎所有的对象实例(包括数组实例)都分配在堆内存中。堆是共享的内存区域,可以被所有线程访问。
  • 栈内存:栈内存存放局部变量和方法调用的栈帧(栈帧包含方法的局部变量表、操作数栈、动态链接和方法返回地址等)。每个线程都有自己的栈,不与其他线程共享。

二、栈上分配的特殊情况:逃逸分析

尽管Java对象通常分配在上,但有些情况下,编译器和JVM可以进行优化,使得对象在上分配。这种优化称为逃逸分析(Escape Analysis)

逃逸分析

逃逸分析指的是分析对象动态作用域,当一个对象在方法中定义后,它可能被外部方法所引用。

  • 方法逃逸
    比如:调用参数传递到其他方法中,这种称之为方法逃逸
  • 线程逃逸
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/754189
推荐阅读
相关标签
  

闽ICP备14008679号