1 静态内存分配与回收
在Java中静态分配内存是指在Java被编译时就已经能够确定需要的内存空间,当程序被加载时系统把内存一次性分配给它。这些内存不会再程序执行时发生变化,直到程序运行结束才被回收。在Java的类和方法中的局部变量包括原生数据类型和对象的引用都是静态分配的。这些静态内存实际上是在栈上分配的。静态内存空间当代码运行结束后,对应的栈帧被撤销被回收。
public void main(int arg) {
String s="songxu";
Long long1=1l;
long long2=2l;
Object object=new Object();
int i=0;
}
如上面这个main方法,i,long2,arg是原生数据类型,i会占用4个字节,long2 会占用8个字节,s,args,long1,object是引用类型,他们会占用4个字节空间,因此这个方法实际占用28个字节。而这些空间是编译的时候就确定的。
2 动态内存分配与回收
在Java中对象的内存空间是动态分配的,所谓的动态分配是在程序执行时才知道要分配的储存空间大小,而不是在编译时就确定的。前面的long1代表Long对象,只有JVM在解析Long类型时才知道这个类中有哪些信息,这些信息有哪些类型,然后再为这些信息分配相应的储存空间储存相应的值。