A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zxg08042810 中级黑马   /  2014-3-3 12:40  /  688 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问静态变量什么时候被回收掉?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
静态变量是随类的加载而加载的,生命周期和类是一样的。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。所以他的生命周期是从相关类类被声明,到这个类彻底被垃圾回收机制彻底回收才会被销毁。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
类的东西,生命周期就随类!
回复 使用道具 举报
Java类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,有些时候可以认为是全局变量。因此在某些时候为了节省系统内存开销、共享资源,可以将类中的一些变量声明为静态变量
package study2;

public class Week {
       
     static class Data {   
        private int week;  
        private String name;  
        Data(int week, String name) {  
              this.week= week;  
              this.name = name;  
       }
        }
    static Data weeks[] = {  
        new Data(1, "Monday"),  
        new Data(2, "Tuesay"),  
        new Data(3, "Wednesday"),  
        new Data(4, "Thursday"),  
        new Data(5, "Friday"),  
        new Data(6, "Saturday"),  
        new Data(7, "Sunday")  
        };  

        public static void main(String args[]) {  
         final int N = 10000;  
         Week weekinstance;  
         for (int i = 1; i <= N; i++){  
               weekinstance = new Week ();  
         }  
}  
}
在Data weeks[]之前添加了static关键字,将该对象变量声明为静态的,因此当你创建10 000个WeekB对象时系统中只保存着该对象的一份拷贝,而且该类的所有对象实例共享这份拷贝,这无疑节约了大量的不必要的内存开销,同时实现了要完成的系统功能。静态变量生命周期较长,而且不易被系统回收,因此如果不能合理地使用静态变量,就会适得其反,造成大量的内存浪费
下列全部条件的情况下,尽量使用静态变量:
(1)变量所包含的对象体积较大,占用内存较多。
(2)变量所包含的对象生命周期较长。
(3)变量所包含的对象数据稳定。
(4)该类的对象实例有对该变量所包含的对象的共享需求。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马