JVM的内存管理(2)

发表于:2010-12-13 10:51  作者:青竹少年(cnblogs)   来源:51Testing软件测试网采编

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签:

  代码二:

 1 public class MemoryTest {
2     static class Data{
3         private int week;
4         private String name;
5         Data(int i, String s){
6             week = i;
7             name = s;
8         }
9     }
10    
11     static Data weeks[] = {
12             new Data(1,"monday"),
13             new Data(2,"Tuesday"),
14             new Data(3,"Wednesday"),
15             new Data(4,"Thursday"),
16             new Data(5,"Friday"),
17             new Data(6,"Saturday"),
18             new Data(7,"Sunday")
19     };
20    
21     public static void main(String[] args) {
22         final int N = 20000;
23         MemoryTest test = null;
24         for (int i = 0; i <=N; i++) {
25             test = new MemoryTest();
26         }
27         System.out.println(test.weeks.length);
28     }
29 }

  我想大家应该发现上面那两个类的区别了吧!

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

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

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

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

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

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

  如果变量不具备上述特点,建议不要轻易使用静态变量,以免弄巧成拙。

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

相关链接:

JVM的内存管理


22/2<12

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海信义律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2021, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道