Java01_内存管理

Java的内存由JVM管理,分为堆、栈、方法区三部分。

1. 堆


1)用于存储所有new出来的对象(包括实例变量)。

2)实例变量的生命周期: 创建(new)对象时存在堆中,对象被GC回收时一并消失。

3)垃圾回收器(GC)不定时到堆中查看,看到垃圾则自动回收。 垃圾:没有任何引用所指向的对象。 回收过程是透明的,并非一看到垃圾就马上回收。 若想让它快一点回收,可以调用System.gc()。

4)内存泄露:不再使用的对象没有被及时地回收。 建议:当对象不再使用时,应及时将引用设置为null。


2. 栈(堆栈)


1)用于存储正在调用中的所有局部变量(包括参数)。

2)调用方法时在栈中为该方法分配一块对应的栈桢。 栈桢中包含所有的局部变量(包括参数)。 方法调用结束时,栈桢消失,局部变量一并消失。

3)局部变量的生命周期: 调用方法时存在栈中,方法调用结束时与栈桢一并消失。


3. 方法区


1)用于存储.class字节码文件(包括静态变量和方法)。

2)方法只有一份。通过this来区分具体是哪个对象引用的。

3)静态变量只有一份。建议通过类名.来访问。

Java内存管理:栈-堆-方法区


Java内存管理_静态变量

4. 成员变量和局部变量


成员变量分为实例变量和静态变量

1)实例变量:

1.1)属于对象的,存在堆中;

1.2)有几个对象就有几份实例变量;

1.3)必须通过对象名.来访问。

2)静态变量:

2.1)属于类的,存在方法区中;

2.2)只有一份;

2.3)建议通过类名.来访问;

2.4)何时用:所有对象的数据都一样时使用,只有一份。



成员变量:

1)类中,方法外;

2)实例变量:new时存在堆中,对象被回收时消失;

    静态变量:存在方法区中;

3)有默认值。

局部变量:

1)方法中;

2)调方法时存在栈中,方法调用结束时与栈桢一并消失;

3)没有默认值。

你可能感兴趣的:(Java01_内存管理)