浅谈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出来的对象。