(一、变量的生命周期)
java变量大概可以分为两种,一种是类里面定义的叫成员变量;一种是方法里定义的,是局部变量。
而成员变量中没有static修饰的,为实例变量;被static关键字修饰的,是静态变量。
所以,java里的变量大致可以分成三种,类的非静态成员变量(实例变量)、类的静态成员变量、方法的局部变量。其生命周期或者说作用域如下细述:
1:类的非静态成员变量的生命周期取决于实例的生命周期,当创建实例的时候,实例变量被创建并分配内存,当销毁实例的时候,实例变量被销毁并撤销所占内存;
2:类的静态变量的生命周期取决于类的生命周期,当加载类的时候,静态变量被创建并分配内存空间,当卸载类的时候,静态变量被销毁并撤销所占内存;
3:方法的局部变量的生命周期只在方法的两个{}之间,超过则结束;
(二、垃圾回收机制与生命周期的关系)
以上是对生命周期的理解,但生命周期与垃圾回收机制有没有必然联系呢?据我目前的认识是,垃圾回收机制跟生命周期其实没有必然的联系,就是说垃圾回收机制,其实不能影响一个变量的生命周期,垃圾回收顶多算是为变量服务的,为防止内存溢出,做善后处理的,大约可以分为两种情况:
1:在生命周期以内,垃圾回收机制会清理掉变量不需要了实例化对象,以释放内存,但他并不能清理掉生命周期以内的变量自身所占内存;
2:在生命周期结束后,垃圾回收机制做善后处理,会对变量本身所占内存,及变量指向的实例化对象所占的内存做一个全面清理;