我还没有找到任何可靠的文献资料,但是我对如果在方法内部创建对象存储在哪里感到好奇?在java 8中的堆栈上还是堆上?

public class A {}
.
.
.
public class B {
  public void test(){
   A m = new A();
  }
}


我知道通常只有本地基元,引用变量和函数调用存储在堆栈上,而对象存储在堆中

所以我假设以下两种情况之一是正确的


情况1:在方法中实例化的对象像往常一样存储在堆中,并带有对该对象的引用,然后在函数完成时,该对象引用超出范围,然后可以将堆中的对象用于垃圾回收
情况2:在方法中实例化的对象存储在堆栈中,然后在函数完成时可用于垃圾回收


我强烈怀疑它的情况1,将对象存储在堆栈中是没有意义的,我唯一怀疑的原因是,因为IVE遇到了一些关于堆栈的文献,而又有一些关于堆栈的文献

感谢您的提前反馈

最佳答案

局部引用变量在堆栈上,而对象在堆中。

请注意,您的问题标题,


  在方法内部声明的实例


这是一种误导,因为没有在任何地方声明对象/实例-仅声明了变量,并且在方法中创建的对象可以放在集合中的字段上或需要的任何位置。因此,不能保证在方法退出时应该对对象进行GC处理。

关于java - 在方法内部创建的实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50053849/

10-10 12:48