CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

讨论一段关于java内存管理的代码

楼主Octer()2006-02-16 11:43:31 在 Java / J2SE / 基础类 提问

讨论一段关于java内存管理的代码  
  代码:  
  package   test;  
  import   org.apache.commons.collections.ReferenceMap;  
  public   class   MemoryTest  
  {  
  public   ReferenceMap   getSoftCache()   {  
  return   softCache;  
  }  
  private   final   transient   ReferenceMap   softCache   =   new   ReferenceMap(ReferenceMap.SOFT,ReferenceMap.SOFT);  
  public   static   void   main(String[]   args)  
  {  
  MemoryTest   tester   =   new   MemoryTest();  
  tester.prepared();  
  System.out.println("cache   size:"+tester.getSoftCache().size());  
  //tester对象是否最终能被回收?  
  MyThread   myThread   =   new   MyThread(tester.getSoftCache());  
  myThread.start();  
  }  
  public   void   prepared()  
  {  
  for(int   i=0;i<1000;i++)  
  {  
  ConcreteObserver   observer   =   new   ConcreteObserver();  
  softCache.put(observer.toString(),observer);  
  }  
  }  
   
  }  
  class   MyThread   extends   Thread  
  {  
  private   Object   cacheObj;  
  public   MyThread(Object   cacheObj)  
  {  
  this.cacheObj=cacheObj;  
  }  
  /*   (non-Javadoc)  
    *   @see   java.lang.Thread#run()  
    */  
  public   void   run()   {  
                      while(true)  
                      {  
                      //以下代码被注释掉内存是否有不同变化,强制GC内存是否有不同变化?  
                      //System.out.println(cacheObj);  
                      }  
    }  
   
  } 问题点数:200、回复次数:7Top

1 楼infowain(infowain)回复于 2006-02-16 11:54:32 得分 50

你的main执行完毕后,tester会被回收Top

2 楼Octer()回复于 2006-02-16 12:11:53 得分 0

继续!Top

3 楼TinyJimmy(Jimmy)回复于 2006-02-16 13:19:18 得分 50

tester会被回收.   经过编译器优化后,   MyThread的cacheObj真正存在对象句柄Top

4 楼treeroot(旗鲁特)回复于 2006-02-17 09:07:37 得分 50

这里设计到软引用,楼主是否已经了解了引用(强引用,弱引用,软引用,虚引用)的概念是关键Top

5 楼Octer()回复于 2006-02-17 12:18:36 得分 0

楼上的,对于这些原理我是知道的,但有一点不是很明白就是  
  对于softCache中的Object如果没有被应用,强制GC,是否应该都被回收  
  我的测试是结果是被回收的,但又有些不相信我写的测试程序  
  呵呵,所以求证各位Top

6 楼treeroot(旗鲁特)回复于 2006-02-17 12:35:00 得分 50

http://blog.csdn.net/treeroot/articles/171786.aspx  
  我觉得这些东西还是比较繁,不过用的机会也不多Top

7 楼Octer()回复于 2006-02-17 15:06:37 得分 0

to   楼上:  
  这篇文章我看过  
  我说一下我的测试代码:  
  public   void   run()   {  
                      while(true)  
                      {  
                      //当该行代码被注释掉,被Cache的对象最终,我可以通过强制GC,被回收掉,反之就不行  
                      //System.out.println(cacheObj);  
                      }  
    }  
  问这个问题的起因是在用Hibernate时,借助内存分析工具,发现有很多QueryTranslator对象被SessionFactoryImpl cache住了,不能释放,持续增长  
  即使我的   所有page都logout后,也并没有被释放掉,所以猜测有可能我们的程序仍然有强应用cache中的对象,或者它的实现也许有问题  
   
   
   
  Top

相关问题

  • 这段代码会不会内存泄漏,如果是java呢
  • 我出100分重新讨论《100分求助:如何解决内存泄漏,代码如下》
  • 有关内存的讨论!
  • 内存使用大讨论
  • 内存的使用 讨论
  • 程序代码大讨论
  • 这段代码吃内存严重
  • 欢迎讨论:优秀的crm(jsp+java)功能--及其优秀代码--及其发展放向!跟贴有分
  • 讨论假内存的问题:)
  • 关于“内存映射文件”讨论

关键词

  • 代码
  • 内存
  • 管理
  • soft
  • referencemap
  • getsoftcache
  • memorytest
  • tester
  • softcache
  • mythread

得分解答快速导航

  • 帖主:Octer
  • infowain
  • TinyJimmy
  • treeroot
  • treeroot

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo