对象如何存储在堆中?

时间:2014-03-13 18:45:30

标签: java object memory-management heap

对象在堆中的存储方式。例如,自行车类可以这样定义:

public class Bicycle {

   public int gear;
   public int speed;

   public Bicycle(int startSpeed, int startGear) {
       gear = startGear;
       speed = startSpeed;
   }

   public void setGear(int newValue) {
       gear = newValue;
   } 

   public void applyBrake(int decrement) {
       speed -= decrement;
   }

   public void speedUp(int increment) {
      speed += increment;
   }   
}

然后我可以创建一个自行车对象:

Bicycle bicycle = new Bicycle(20,10)

然后这个自行车对象应该存储在堆中。但我不明白堆如何准确存储这些实例变量和方法,如速度和齿轮。我知道堆应该实现为树。那么对象如何存储在树中?此外,当您使用bicycle.speed查找速度值时,时间复杂度会是多少?

3 个答案:

答案 0 :(得分:11)

答案 1 :(得分:2)

Bicycle bicycle = new Bicycle(20,10)

引用自行车将存储在stack中,而对象和实例变量将存储在heap中,并且堆的地址在堆栈中分配,因此意味着说堆栈将链接到堆。

答案 2 :(得分:1)

首先,你应该用Java来理解Object的含义。

对象只是Heap中的缓冲区(内存区域)。该缓冲区或内存区域称为Object。

对象包含该类的所有非静态数据成员。

所有 -

  

Heap中的对象存储。

     

Class Area中的静态数据成员存储。

     

Stack中的引用变量存储。

     

方法区域中的方法(静态或非静态)存储。

Memory Area