浅谈java的内存管理机制

来源:互联网 发布:淘宝店铺需要的软件 编辑:程序博客网 时间:2024/06/05 03:47

浅谈java的内存管理机制

       内存管理(百度百科定义):是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

从上面的定义中我们可以知道,内存管理实际上就是两块内容:内存分配与内存回收。

在java的机制中,内存的回收是由java虚拟机来完成的,也就是讲作为java的开发人员,可以不用自己去手动的回收内存。其实是没有权限对内存进行内存回收管理。这样我们就把精力放在内存分配上。

java的内存分为:栈、堆、代码区和静态变量存储区  四个部分。

栈: 

int i = 20 ; //<--->int i ; i = 20 ;

i = 30;

这两行代码的机制是:第一步,执行int i ; 即在栈中申请变量存储空间 i ,第二步,给申请的栈空间装入初值20,第三步,重新在栈中给变量赋值,为30 

堆:

........

public class Text {

   int a;    //第一步

   char b;

   public Text ( int a1 , char b1 ){

     a = a1;

     b = b1;

    } 

   public static void main (String[ ] args){

         Text  t = new Text(2, L);  .//<---->Text t = new Text();   第二步  ,   t(2, L); 第三步  

    }

.....

}

......

说明:第一步:在栈中给a、b分配内存空间;第二步在堆中给a1、b1分配内存空间;第三步,在堆中给a1 b1 赋值,即a= 2;b = L;

需要值得说明的是,在第三步的时候,与第二步中的内存空间可能不是同一块空间,即两块有一段很短暂时间的共存区。然后虚拟机发现有两个变量名相同的地址块,这时候就会自动的回收掉旧的空间快。这也是与栈不同的地方。

代码区:就是存放代码的区域,这个英爱比较好理解,就不赘述。

静态变量存储区:与动态变量存储区(包括栈和堆)相对应,是存放静态变量的。

总结:栈中一般存放局部变量、形参、引用类型;堆中一般存放new出来的对象。