jvm内存分析法(马士兵)

1.  局部变量和成员变量的重要区别
局部变量没有初始化就打印时,会报错。
而成员变量,我们不用初始化,java会自动对它初始化。
当变量是引用的时候,java会赋给它null。

2.  基本类型:在栈中占一块内存。
引用类型:占两块内存,一块在栈,一块在堆。
在栈中的key是这个变量的名字,value值就是它在堆中的地址。

3.  类是静态的概念,它放在代码区。
对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量),
而方法只有一份,执行的时候才占内存(其余它就是放在代码区中)。
堆内存:是在程序运行时动态分配的。
同一类的每个对象有不同的成员变量存储空间。
同一类的每个对象共享该类的方法。 4.  code,data,stack,heap
局部变量分配在stack.
代码都是放在code segment里面。一旦找到main方法开始执行,其他开始起作用。

5.  写new的时候,就是调用的构造方法。
在写Pserson tom = new Pserson(1,25);的时候:
在栈中开辟了一块新内存,名字是tom,值是一个地址。
同时在堆中开辟了一块内存,里面有1和25两个数据。
但注意:在栈中的内存里的值不是堆中的地址,而是另一个地址。jvm通过这个地址可以找到堆中的相应对象。

当方法调用结束时,栈内存中的局部变量就没有了。而堆中的,是等垃圾回收机制将其回收。
系统添加构造方法,只是在自己没有写任何构造方法时才会加。

6.  基础类型变量:就一处内存。
int date = 9;  //则在栈中有一块内存,叫date,值是9.

7.  public static void main(String[] args){
  int date = 9;
  Test test = new Test();
  test.change1(date);
 }

  public void change1(int i){
    i = 1234;
  }

在内存中,先开辟一个局部变量,名字是date,值是9.
当执行到test.change1(date)的时候,在栈中开辟另一块内存。
名字是i,然后把date的值赋给i.当执行完change1之后,i所在内存消失。

8.  public static void main(String[] args){
  Test test = new Test();
  BirthDate d1 = new BirthDate(1,1,2000);
  test.change2(d1);
  test.change3(d1);
   }

public void change2(BithdayDate b){
  b = new BirthDate(22,2,2004);
}

public void change3(BithdayDate b){
  b.setDay(22);
}

执行change2的时候,在栈中新建个变量b,它里面的值就是栈中d1的值的复制。
然后执行b = new BithDate(22,2,2004)的时候,在堆中新开辟一块给BirthDate的内存。
然后在栈中,把b的值改成新的对应的地址。方法结束时,栈中的b被清除。堆中的BirthDate的对象等待垃圾回收机制把它收回去。

执行change3的时候,在栈中新建个变量b,它里面的值就是栈中d1的值的复制。
然后执行b.setDay(22)的时候,在栈中开辟个新内存,名字是d,值是22。然后,由于setDay(d){day = d; },则把d的值,复制给test对象的day属性当中。方法结束,栈中的d被回收。

9. double getDistance(Point p){
  return p.x + p.y + p.z;
   }

public static void main(String[] args){
     Point p = new Point(1,2,3);
     Point p1= new Point(0,0,0);
     System.out.println(p.getDistance(p1));
     p.sexX(5.0);
     System.out.println(p.getDistance(new Point(1.0,1.0,1.0)));

}

主要是对最后一句话的内存分析:
首先,实例了一个Point对象,三个属性都是1.0.则它会在堆中开辟出这样一块内存。调用了getDistance方法,有个参数p,则会在栈中开辟个新的内存,name是p,而value就指向了堆中新开辟的内存。

将结果输出之后,栈中的p消失。

 
原文地址:https://www.cnblogs.com/min-yu/p/13410575.html