java 静态变量的使用_java的static静态变量是不是不安全的?应该如何正确的使用他呢...

类中的静态变量在程序运行期间,其内存空间对所有该类的对象实例而言是共享的,为了节省系统内存开销、共享资源,应该将一些变量声明为静态变量。

代码一:

public class MemoryTest {

static class Data{

private int week;

private String name;

Data(int i, String s){

week = i;

name = s;

}

}

Data weeks[] = {

new Data(1,"monday"),

new Data(2,"Tuesday"),

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 = 20000;

MemoryTest test = null;

for (int i = 0; i <=N; i++) {

test = new MemoryTest();

}

System.out.println(test.weeks.length);

}

}

代码二:

public class MemoryTest {

static class Data{

private int week;

private String name;

Data(int i, String s){

week = i;

name = s;

}

}

static Data weeks[] = {

new Data(1,"monday"),

new Data(2,"Tuesday"),

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 = 20000;

MemoryTest test = null;

for (int i = 0; i <=N; i++) {

test = new MemoryTest();

}

System.out.println(test.weeks.length);

}

}

应该发现上面那两个类的区别吧

Data weeks[] 与 static Data weeks[]

代码一会在内存中保存20000个weeks的副本,而代码二则在内存中保存1个weeks的副本,然后共享该副本,这样的话就不会造成内存的浪费。

虽然静态的变量能节约大量的内存,但是并不是所有的地方都适合用,建议在下列条件都符合的情况下,尽量用静态变量:

(1)变量所包含的对象体积较大,占用内存较多。

(2)变量所包含的对象生命周期较长。

(3)变量所包含的对象数据稳定。

(4)该类的对象实例有对该变量所包含的对象的共享需求。

如果变量不具备上述特点,建议不要轻易使用静态变量。

最后,再提一点内存的优化,就是有关对象的重用,比如:对象池和数据库连接池等。那样的话,是很节约内存空间的,不过,在用的时候要考虑各个方面,比如:运行环境的内存资源的限制等。为了防止对象池中的对象过多,要记得清除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值