黑马程序员技术交流社区

标题: 静态 [打印本页]

作者: zxg08042810    时间: 2014-3-3 12:40
标题: 静态
请问静态变量什么时候被回收掉?

作者: volvoxc    时间: 2014-3-3 12:43
静态变量是随类的加载而加载的,生命周期和类是一样的。
作者: 黄陂酷歌    时间: 2014-3-3 14:03
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。所以他的生命周期是从相关类类被声明,到这个类彻底被垃圾回收机制彻底回收才会被销毁。
作者: 行如止水    时间: 2014-3-3 14:10
类的东西,生命周期就随类!
作者: skyname    时间: 2014-3-3 14:19
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)该类的对象实例有对该变量所包含的对象的共享需求。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2