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;//擦除掉与实例对象的联系,即不保存地址值。
    }
}

 

posted @ 2017-12-12 23:16  dreamy_java  阅读(278)  评论(0编辑  收藏  举报