JVM内存可主要划分为三个部分
1.方法区内存(method area)
存储.class相关信息,包含方法的信息。
2.栈(stack)
方法中的局部变量存放在此。
方法的运行一定在栈当中。
局部变量: 方法中的参数,或者方法体{}内部的变量。
3.堆(heap)
对象在堆当中分配内存,对应的地址存储在栈区的引用中。
堆内存里面的数据,都有相应的默认值。
参数传递、弹栈和堆内存回收
1.调用一个方法时,实参传递给形参的是值。单向传递:调用方法的实参的值不变,被调方法的形参被处理时不影响主调方法的实参。
2.由main()方法开始,依次按调用顺序执行方法。方法执行时,被分配内存压栈,执行完毕后弹栈,释放内存。
3.栈中方法体代码创建对象时,在栈区存在引用(局部变量),在堆中生成对象并分配内存,对象的内存地址存储在引用中。对象的代码执行完毕且没有引用含有指向它的地址时,对象占有的内存被回收。