Snipaste_2021-08-25_17-54-42.png

1、为什么要画内存图?

更深层次的理解代码,在代码没有运行之前就能猜测出结果。
会内存图,后期调错的时候会有很大的帮助。

2、方法区存什么?

代码

3、栈内存存储什么?

方法执行的内存空间
以及局部变量。

4、方法调用时:压栈。分配空间

5、方法结束时:弹栈。释放空间。

6、栈特点:先进后出。后出先出原则。


局部变量:只在方法体中有效,方法结束之后,局部变量的内存就释放了。
JVM三块主要的内存:栈内存、队内存、方法区内存。
方法区最先有数据:方法区中放代码片段。存放class字节码。
堆内存:后面讲
栈内存:方法调用的时候,该方法需要的内存空间在栈中分配。
方法不调用是不会在栈中分配空间的。

方法只有在调用的时候才会在栈中分配空间,并且调用就是压栈。
方法执行结束之后,该方法所需要的空间就会释放,此时发生弹栈动作。

栈中存储什么?方法运行过程中需要的内存,以及栈中会存储方法的局部变量。

  1. public class MethodTest08{
  2. //主方法:入口
  3. public static void main(String[] args){
  4. //int a = 100;
  5. // 这个赋值原理是:将a变量中保存的100这个数字复制一份传给b变量。
  6. // 所以a和b是两个不同的内存空间,是两个局部变量。
  7. //int b = a;
  8. System.out.println("main begin");
  9. int x = 100;
  10. m1(x);
  11. System.out.println("main over");
  12. }
  13. public static void m1(int i){
  14. System.out.println("m1 begin");
  15. m2(i);
  16. System.out.println("m1 over");
  17. }
  18. public static void m2(int i){
  19. System.out.println("m2 begin");
  20. m3(i);
  21. System.out.println("m2 over");
  22. }
  23. public static void m3(int i){
  24. System.out.println("m3 begin");
  25. System.out.println(i);
  26. System.out.println("m3 over");
  27. }
  28. }