分享

Java的内存溢出和变量生存期

 履历馆 2011-06-02

Java的内存溢出和变量生存期

在Java中几乎没有所谓的内存泄漏,而只有内存溢出。意思就是不会出现内存不被释放,只会出现内存长期不释放现象。
原因就是不能及时把全局变量所存储的对象句柄赋为null造成的。
一般的局部变量其作用域只在方法体内,因此只要退出方法,句柄自动失效,不必显示赋null,而全局变量或长期驻留内存的类对象里的对象引用要及时赋为null,否则会一直占据内存,导致可用内存减少,直至内存溢出。
下面是一点关于变量生存期的介绍。
类中有几种变量,分别是:局部变量(英文可以为:local\automatic\temporary\stack variable)是定义在方法里的变量;实例变量(英文为:instance variable)是在方法外而在类声明内定义的变量,有时也叫成员变量;类变量(英文为:class variable)是用关键字static声明的实例变量,他们的生存期分别是:局部变量在定义该变量的方法被调用时被创建,而在该方法退出后被撤销;实例变量在使用new Xxxx()创建该类的实例时被创建,而其生存期和该类的实例对象的生存期相同;类变量在该类被加载时被创建,不一定要用new Xxxx()创建,所有该类的实例对象共享该类变量,其生存期是类的生存期。任何变量在使用前都必须初始化,但是需要指出的是局部变量必须显式初始化,而实例变量不必,原始类型的实例变量在该类的构造方法被调用时为它分配的缺省的值,整型是0,布尔型是false,而浮点型是0.0f,引用类型(类类型)的实例变量的缺省值是null(没有进行实际的初始化,对它的使用将引起NullPointException),类变量的规则和实例变量一样,不同的是类变量的初始化是在类被加载时。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多