是的,相互引用的对象会导致不释放所以你可以显式的把引用关系去掉,比如:
在a里面 b=null;
在b里面 a=null;

解决方案 »

  1.   

    哎,测过了,进行了显式释放,发现ClassB是释放了,但是ClassA,也就是Logic还没有被释放,仍然存在。
    难道是Spring配置或者其他的问题?
      

  2.   

    是还有被其他引用,貌似是Spring的代码,搞不懂Spring为什么没有释放这个Logic。作用域也没有问题。。
    难道是Spring1.2.6版本本身的问题?
      

  3.   

    可能是lz的使用方法有错误。java中,如果一个实现被引用,那么它占用的内存就不会被释放。
    spring也是java下的框架,无论怎么设置,也脱离不了JVM的规则。所以,lz的程序结构应该存在问题。
    spring种logic的实现管理,都是通过DI进行的,是不是在程序内部自行new了?
      

  4.   

    谢谢大家关注!
    没有在程序自行new,都是通过XML注入的啊。。难道是作用域的问题?我们所有BEAN的作用域多是设singleton="false"。。查了下资料,貌似Spring1.0的并不管理Bean的回收和释放,应该还是交予JVM控制的。
    唉,现在只能尽量释放Logic引用,是其内存占用到最少。。但还没找到根本解决方案
      

  5.   

    1.确认是否有严谨、清晰的编码规则
    2.如果有,是否对所有的代码进行过确认如果以上两点都没有问题,就只能找服务器的配置问题了。
    例如,增加tomcat的设置内存,增加服务器内存,AP服务器集群化等。
      

  6.   

    这个..似乎我还没遇到过...我一般都用tomcat 的..
      

  7.   


    出现这种情况的原因,不能排除程序运行所需要的内存大于现有环境的设置。>2.如果有,是否对所有的代码进行过确认
    这一步是在开发过程中必须做的。
    如果现在已经进入到应用维护阶段,只能是制定周密、严谨的性能测试计划,找出具体在什么地方出现了性能瓶颈。
    工具可以用到jvmstat、vmstat和JMeter,把结果作成图表进行对比。
      

  8.   

    安装一个apach再下面放2个tomacat就能解决这个问题了,