Java 内存管理

java内存管理主要包括对象的分配和释放。内存的分配主要由程序完成的,而内存的释放是由java垃圾回收器(GC)完成的。java这种方式简化了程序员的工作,但加重了java虚礼机(JVM)的工作量,这也是java程序运行较慢的原因之一。

java的内存分配:静态存储,堆存储,栈存储。

静态存储:主要存储静态变量,方法 。这块内存在程序编译时已经分配好了,在整个程序运行期间一直存在。

堆存储:主要存储new出来的对象,成员变量。存储的对象在不使用时,这空间会被释放。

栈储存:当方法运行时,此期间产生的局部变量(基础数据类型,对象的引用)进行存储,此方法运行结束,产生的空间会被释放。因为栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

例子:

public  class Storage{

   int  i=0;

  Storage s=new Storage();

 public static void main(String[] args){

    int i2=0;

   Storage s2=new Storage(); 

}

}

此类的中 i2 和 s2 存放在栈中,S2的实例存放在堆中,i 和 s存放在堆中。

结论:

局部变量的基本数据类型和引用存储于栈中,引用的对象实体存储在堆中 —— 因为他们属于方法中的变量,生命周期随方法而结束

成员变量全部存储于堆中(包括基本数据类型,引用和引用的对象实体)—— 因为它们属于类,类对象终究是要被 new 出来使用的

Java 垃圾回收器

在 Java 堆和静态存储区(方法区)中,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾回收器所关注的便是这部分的内存。



你可能感兴趣的:(java)