ITPUB??ì3
ITPUB论坛 » Java入门与认证版 » 如何减少这个递归的内存占用呢

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 如何减少这个递归的内存占用呢
离线 duxiaochu1972
资深会员



精华贴数 0
个人空间 0
技术积分 6352 (208)
社区积分 4 (18488)
注册日期 2006-7-13
论坛徽章:14
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星
开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠

发表于 2008-4-26 09:08 
如何减少这个递归的内存占用呢

Java code
    public static void searchForChains(Synset source,Synset target,ArrayList<ChainNode> inherit)
    {
        if(inherit.size() < max+1)
        {
            try
            {
                ArrayList<ChainNode> temp = (ArrayList<ChainNode>inherit.clone();
                PointerUtils util = PointerUtils.getInstance();

                PointerTargetNodeList list = util.getDirectHypernyms(source);
                if(0 != list.size())
                {
                    searchForChain(list,target,temp,1);
                }

                list =    util.getDirectHyponyms(source);
                if(0 != list.size())
                {
                    searchForChain(list,target,temp,2);
                }

                list =    util.getHolonyms(source);
                if(0 != list.size())
                {
                    searchForChain(list,target,temp,3);
                }

                list =    util.getMeronyms(source);
                if(0 != list.size())
                {
                    searchForChain(list,target,temp,4);
                }
                inherit = null;
                list = null;
            }
            catch(JWNLException e)
            {
                e.printStackTrace();
            }
        }
        else
        {
            inherit = null;
            return;
        }
    }
    static ArrayList<ChainNode> temp = new ArrayList<ChainNode>();
    public static void searchForChain(PointerTargetNodeList list,Synset target,ArrayList<ChainNode> inherit,int type)
    {
        for(Iterator it = list.iterator();it.hasNext()
        {
            PointerTargetNode Node = (PointerTargetNode)it.next();
            if(!target.equals(Node.getSynset()))
            {
                if(!Circle.hasCircle(inherit,Node.getSynset()))
                {
                    temp = (ArrayList<ChainNode>inherit.clone();
                    switch(type)
                    {
                        case 1:
                            temp.add(new ChainNode(Node.getSynset(),"hypernym");
                            break;
                        case 2:
                            temp.add(new ChainNode(Node.getSynset(),"hyponym");
                            break;
                        case 3:
                            temp.add(new ChainNode(Node.getSynset(),"holonym");
                            break;
                        case 4:
                            temp.add(new ChainNode(Node.getSynset(),"meronym");
                            break;
                        default:
                            break;
                    }
                    searchForChains(Node.getSynset(),target,temp);
                    Node = null;
                    temp = null;

                }
                else
                {
                    inherit = null;
                    return;
                }
            }
            else
            {
                switch(type)
                {
                    case 1:
                        inherit.add(new ChainNode(Node.getSynset(),"hypernym");
                        break;
                    case 2:
                        inherit.add(new ChainNode(Node.getSynset(),"hyponym");
                        break;
                    case 3:
                        inherit.add(new ChainNode(Node.getSynset(),"holonym");
                        break;
                    case 4:
                        inherit.add(new ChainNode(Node.getSynset(),"meronym"));
                        break;
                    default:
                        break;
                }
                Chains.add(inherit);
                return;
            }
        }
    }


只看该作者    顶部
离线 smartpig
老会员



精华贴数 1
个人空间 160
技术积分 6369 (211)
社区积分 0 (1065463)
注册日期 2006-8-9
论坛徽章:33
会员2007贡献徽章开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-4-26 09:09 
不要在局部变量里创建很多对象
递归算法每递归一次,就要把所有局部变量和对象创建一次,所以消耗内存
及时释放无用的对象引用


只看该作者    顶部
离线 cyntha80
中级会员



精华贴数 1
个人空间 0
技术积分 4707 (292)
社区积分 2 (30343)
注册日期 2007-2-8
论坛徽章:20
开发板块每日发贴之星生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠
生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠生肖徽章2007版:鼠

发表于 2008-4-26 09:10 
建议lz去看看一些关于 GC 的文章,会对你很有帮助。


只看该作者    顶部
离线 javalod
天下江湖


精华贴数 0
个人空间 0
技术积分 587 (3266)
社区积分 6 (14899)
注册日期 2008-6-4
论坛徽章:5
行业板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星开发板块每日发贴之星 
      

发表于 2008-6-12 16:06 
*** 作者被禁止或删除 内容自动屏蔽 ***
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问