我正在学习Java,目前遇到了对象和局部变量的内存分配问题。 有人能够解释一下或者解答我的疑问吗?
- 我读过实例变量和局部变量使用堆内存和栈内存的知识,我想问每个方法是否会创建一个新的栈?还是对于每个类只会使用一个栈?
- 我曾经看到过每个线程都会创建一个栈,请问这意味着什么?
谢谢 Mahaveer
我正在学习Java,目前遇到了对象和局部变量的内存分配问题。 有人能够解释一下或者解答我的疑问吗?
谢谢 Mahaveer
每个线程都有自己的堆栈。
new
时,都会在堆上创建一个对象。int
)和对所创建任何对象的引用。实际的对象本身不是在堆栈上创建的,正如我提到的,当您使用new
时,它们将在堆上创建。我有一个问题,每个方法是否都会创建一个新的堆栈?
当方法被调用时,使用同一个堆栈。该方法将创建自己的小节称为“堆栈帧”,用于保存其本地变量。
就像一摞盘子一样,当调用方法时,在堆栈顶部添加一个盘子(一个堆栈帧),当方法结束时,从堆栈中移除该盘子。所有该方法的局部变量都将被销毁,但使用new
创建的实际对象不会。
JVM的垃圾回收器将负责在看到您不再需要它们时销毁堆上的对象(使用new
创建的对象)。
堆栈与线程一一对应。堆栈绝对不与方法和类相关联。
理解这一切的方式是,方法的局部变量对于该方法的每次调用是私有的。