Итак, я пишу алгоритм, который играет в настольную игру против алгоритма моих одноклассников. В основном он предусматривает все возможные исходы игры и выбирает лучший путь, основанный на% побед на каждом пути. В игре у каждого игрока есть 5 секунд, чтобы сделать свой ход. Поскольку все это работает на одном ПК, я не могу использовать вычислительную мощность или слишком много памяти во время движения моих противников.
Я использую древовидную структуру, каждый узел выглядит следующим образом:
public class Node {
//coordinates on the board
private Move move;
//winpercentage for choosing this path
private double winPercentage;
//is this move mine to make or is it opponents (the last person to make a move wins the game)
private boolean odd;
//all possible next moves
private Set<Node> children;
//previous move
private Node parent;
}
Я использую класс-оболочку Дерево , которое содержит корень дерева и некоторые методы для обхода и построения структуры.
public class Tree {
Node root;
public Tree() {
this.root = Node.createRoot();
}
//methods to traverse/build the tree
}
Даже после того, как я построил все дерево и выбрал свой ход, дерево остается в памяти во время движения моих оппонентов, что запрещено, поскольку он не может сделать свой ход, пока я занимал 4 ГБ ОЗУ. Я попытался установить ссылку на ноль для запуска GC, но, похоже, она не работает
} else if(input.equals("tree")){
System.out.println("Showing tree structure");
Tree tree = new Tree();
//does all the work
tree.mainFunctionWrapper(tree.getRoot());
tree.setRoot(null);
tree = null;
}
Поскольку все это в одном блоке кода, у меня больше нет ни предыдущих, ни предыдущих ссылок на древовидную структуру.
Как заставить работать сборщик мусора или, возможно, освободить память вручную?