OOM с данными, добавленными в HashMap в java - PullRequest
0 голосов
/ 27 апреля 2020

В моей программе есть графовая структура, которая содержит 1353940 узлов и 26275938 ребер. Я использую HashMap для хранения этого графика. Проблема в том, что у меня возникает ошибка памяти, когда я хочу сохранить этот график.
Вот мой код:

private void createGraph() throws IOException {
    V = st.size();
    E = 0;
    graphH = new HashMap<Integer, ArrayList<Integer>>();
    BufferedReader in = new BufferedReader(new FileReader(principalsFile));
    String tconst = "tconst";
    String line;
    String[] lineArray;
    ArrayList<String> actorArray = new ArrayList<String>();
    while ((line = in.readLine()) != null) {
      lineArray = line.split(DELIMITER);
      if (lineArray[3].equals("actor") || lineArray[3].equals("actress") || lineArray[3].equals("self")) {  
        if (tconst.equals(lineArray[0])) {
          actorArray.add(actors.get(lineArray[2]));
        }
        else {
          if (actorArray.size() > 1){
            for (int i = 0; i < actorArray.size()-1; i++) {
              if (actorArray.get(i) != null && st.get(actorArray.get(i)) != null) {
                int v = st.get(actorArray.get(i));
                for (int j = i+1; j < actorArray.size(); j++) {
                  if (actorArray.get(j) != null && st.get(actorArray.get(j)) != null) {
                    int w = st.get(actorArray.get(j));

                    if (!graphH.containsKey(v)){
                      graphH.put(v, new ArrayList<Integer>());
                    }
                    ArrayList<Integer> k = graphH.get(v);
                    k.add(w);
                    if (!graphH.containsKey(w)){
                      graphH.put(w, new ArrayList<Integer>());
                    }
                    k = graphH.get(w);
                    k.add(v);
                    E++;
                  }
                }
              }
            }
          }
          actorArray.clear();
          tconst = lineArray[0];
          actorArray.add(actors.get(lineArray[2]));
        }
      }
    }
  }

Как можно избежать получения этой ошибки OOM?
Я уже попробовал usin -Xmx1024m, но у меня это не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...