В моей программе есть графовая структура, которая содержит 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, но у меня это не сработало.