java学习之堆与栈的区别
一、栈
1.消失的方式不同:方法变量随着栈方法的释放而释放
2.存储的位置不同,默认复制的处理机制不同:不会给方法的属性附初值,可以理解为类中的方法中的属性为局部变量,无法给局部变量附初值,类的状态由类的成员变量的值来体现,所以称类是有状态的对象,而方法中的变量不能默认附初值,则属于无状态,而且存储的空间是在栈方法区内。
二、堆
1.成员变量不会随着没有引用的存在而消失,会等着jvm的垃圾回收装置来回收,即jvm的gg
2.对实例化的对象的成员属性附初值
3.只要是new的,内存会开辟新的空间
4.擦除引用,即使引用名为null,如下:
package com.dreamly.day01; /** * @author dreamly * */ public class ArrayTest01 { public static void main(String[] args) { int[] x=new int[3]; x[0]=2; x=null;//擦除掉与实例对象的联系,即不保存地址值。 } }