在堆栈中还是在堆中分配变量引用的位置?
2022-09-04 05:19:39
我有一个问题
例如,当我在方法中声明变量时发生了什么。
void myMethod() { Ship myShip = new Ship(); }
在堆栈中还是在堆中分配 myShip 引用的位置?
我在堆栈中思考,但我感到困惑,因为我正在阅读J2ME游戏编程书“Java类被实例化到Java堆上”
所有 java clases ?
提前致谢
我有一个问题
例如,当我在方法中声明变量时发生了什么。
void myMethod() { Ship myShip = new Ship(); }
在堆栈中还是在堆中分配 myShip 引用的位置?
我在堆栈中思考,但我感到困惑,因为我正在阅读J2ME游戏编程书“Java类被实例化到Java堆上”
所有 java clases ?
提前致谢
myShip
是对一个对象的引用,是在方法调用堆栈上,它被称为“堆栈”。当一个方法被称为内存块被推到堆栈的顶部时,该内存块有空间用于该方法的所有基元(int,float,boolean等)和对象引用,其中包括方法参数。堆是为实际对象分配内存的位置。Ship
myShip
在堆栈上也是如此,对象在堆上。myShip
Ship
请注意,每个线程都有自己的堆栈,但共享堆。
Java确实以不同的方式做事。引用基本上在堆栈上。对象的内存按为堆传递的内容进行分配。但是,可分配内存的实现与 C/C++ 模型中实现堆的方式不太一样。
当您创建这样的新对象时,它有效地将名称放入该作用域的引用表中。这很像指向C++中的对象的指针。当它超出范围时,该引用将丢失;分配的内存不再被引用,并且可以进行垃圾回收。