java 释放静态变量_java静态变量

静态static

静态出现最大的原因:节约内存,只存一份,由对象共享这个属性。

静态的作用是什么?

场景:

当每个对象都有一个相同的属性,如country="China",那么每个对象所在的堆内存中都会为其分配空间来保存这个属性值country="Chian"。

既然每个对象的country属性值都是一样的,能否只用一个存储空间就行了呢?这样节约堆内存空间。

答案是可以的。

通过static修饰的属性,其值将被所有对象共享使用。

注意:对象特有的属性不能定义为静态的,因为静态即共享。如Person类的name不能是静态的。

如,饮水机是共享的,大家都共同使用同一个饮水机,则静态;

如,杯子是特有的,每个人都有属于自己的水杯,则非静态。

静态的特征:

静态static修饰的成员,优先于对象存在;

静态static修饰的成员,随着类的加载而进入内存;

静态static修饰的成员,是共享的,而对象中存储的则是特有的;

静态static修饰的成员,不仅可以被对象所使用,还能被类直接使用;

静态的优点:

实现共享数据在内存中的唯一存储,节约了内存空间;

每个对象都不用在堆内存中为其单独开辟空间保存,直接使用共享的数据即可。

静态的缺点:

常驻内存,内存释放周期长,只随着类的消失而消失。

类什么时候消失?

类其实也是对象,JVM启动时就会加载类路径目录下的类,当内存中加载的类太多太多,JVM的GC会根据某种算法对加载的某些类进行清理,释放空间。

当JVM关闭时,类消失。

类变量与成员变量的区别

类变量不是类的成员变量

存储位置不一样

成员变量,在堆内存中,每个对象都有自己的一份不同的成员变量存储区

静态变量,在方法区中,只有唯一的一份,是类变量,每个对象都共享使用这个变量

生命周期不一样

成员变量,随着对象的创建而存在,随着对象的回收而释放

静态变量,随着类的加载而存在,随着类的消失而释放

调用方式不

你可能感兴趣的:(java,释放静态变量)