1.首先必需掌握概念:
栈与堆:生成空间
当java虚拟机启动时,它会从底层的操作系统取得一块内存,并以此区段来执行java程序。
所有的对象都存活在可垃圾回收的堆上
区域变量有称为栈变量
栈:方法调用和局部变量
堆:所有的对象(可垃圾回收的堆)
实例变量 :实例变量是被声明在类而不是方法里面。它们代表每个独立对象的“字段”(每个实例可能有不同的值)。
(截图来自Head First Java书籍,注:本文的图片也是这要来自这本书籍)。
局部变量:局部变量和方法的参数都是被声明在方法中。它们是暂时的,且生命周期只限于方法被访者栈上的这段期间。
2.方法是怎么调用的
当你调用一个方法时,该方法会放在调用栈的栈顶。实际被栈上的是堆栈块,它带有方法的状态,包括执行到哪一行程序以及所有的局部变量的值。注意:要理解栈的性质“先进后出”。
如果有声明变量但没有给它赋值,则只会留下变量的空间:
private Antenna ant;
直到引用变量被赋值一个新的Antenna对象才会在堆上占有空间:
private Antenna ant = new Antenna();
4.Java内存图: