0

当我执行包含 2 个循环的程序时,其中一个嵌套在另一个循环中,我收到此错误 OutOfMemoryError java heap space。我一直在寻找解决方案一周但没有结果。我知道可能问题在于在我的循环中创建实例所以它需要大量的 memory.son 导致内存泄漏。我尝试增加内存大小,但这还不够。我的问题是如何在不使用大量内存的情况下开发相同的程序。这是我的程序。

public String getAllActionsJson(){
        //liste des actions de la table action
        List<Action> actions = actionService.getAllActions();
        //liste onglets de la table typeAction
        List<TypeAction> typesActions=actionService.getTypeActions();
        ActionNoeudJson actionRacine = null;
        ActionNoeudJson actionFeuille = null;
        List<ActionNoeudJson> listeFilles = null;
        for(int i=0;i<typesActions.size();i++)
        {
            listeFilles = new ArrayList<ActionNoeudJson>();
            actionRacine=new ActionNoeudJson();
            actionRacine.setId(typesActions.get(i).getId());
            actionRacine.setText(typesActions.get(i).getLibelle());
            for(int j=0;j<actions.size();j++)
            {
                //si le type de l'action est le meme que le type de l'onglet
                //on affecte actionFeuille à la racine courante(onglet approprié) 
                if(typesActions.get(i).getId()==actions.get(j).getTypeAction().getId())
                {   
                    actionFeuille = new ActionNoeudJson();
                    actionFeuille.setId(actions.get(j).getId());
                    actionFeuille.setText(actions.get(j).getLibelle());
                    actionFeuille.setIconCls("icon-tip");
                    listeFilles.add(actionFeuille);
                    actionRacine.setChildren(listeFilles);
                }   
            }
            listeActions.add(actionRacine);

        }
        return ActionSupport.SUCCESS;

    }
4

1 回答 1

0

这是一个称为算法分析的主题的研究领域。如果您至少不熟悉 Big O Notation,那么您将很难理解如何改进您的算法。

如果您确实理解该表示法并且可以进行基本分析,那么请尝试找出代码的哪一部分使用的内存量最多,并首先尝试对其进行优化。例如,也许您携带的数据在计算中并不真正需要。

您似乎正在尝试为所有类型的所有操作设置一些值。分块做怎么样?尝试拆分工作,这样您就不会同时将所有内容都保存在内存中。然后逐渐构建一个平面动作数组,然后对数组中的每个元素执行一次 for listeActions.add()。

于 2013-02-10T16:53:18.250 回答