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

作者 : admin 本文共499个字,预计阅读时间需要2分钟 发布时间: 2024-06-16 共1人阅读

文章目录

  • Java对象会不会分配到中?
    • 一、什么是`(Heap)` ,什么是`栈(Stack)`?
    • 二、栈上分配的特殊情况:逃逸分析
      • 逃逸分析
      • 逃逸分析的触发前提条件必须触发JIT执行
        • 如何在IDEA中关闭逃逸分析
        • 对比开启和关闭逃逸分析的耗时
      • 逃逸分析的局限性
      • 总结

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

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

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

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

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

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

逃逸分析

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

  • 方法逃逸
    比如:调用参数传递到其他方法中,这种称之为方法逃逸
  • 线程逃逸
本站无任何商业行为
个人在线分享 » 【Android面试八股文】Java对象会不会分配到栈中?
E-->