В Vala у меня есть TreeMultiMap
из библиотеки Gee
, созданной как закрытая переменная класса.Когда я использую дерево multi map и заполняю его данными, потребление памяти процессом увеличивается до 14.2 MiB.Когда я очищаю древовидную мультикарту, которая остается той же самой переменной, и использую ее снова, но добавляю к ней меньше данных, потребление памяти процессом не увеличивается, но и не уменьшается.Он остается на уровне 14,2 МБ.
Код выглядит следующим образом: MultiMapTest.vala
using Gee;
private TreeMultiMap <string, TreeMultiMap<string, string> > rootTree;
public static int main () {
// Initialize rootTree
rootTree = new TreeMultiMap<string, TreeMultiMap<string, string> > (null, null);
// Add data repeatedly to the tree to make the process consume memory
for (int i = 0; i < 10000; i++) {
TreeMultiMap<string, string> nestedTree = new TreeMultiMap<string, string> (null, null);
nestedTree.@set ("Lorem ipsum", "Lorem ipsum");
rootTree.@set ("Lorem ipsum", nestedTree);
}
stdout.printf ("Press ENTER to clear the tree...");
// Wait for the user to press enter
var input = stdin.read_line ();
// Clear the tree
rootTree.clear ();
stdout.printf ("Press ENTER to continue and refill the tree with less data...");
// Wait for the user to press enter
input = stdin.read_line ();
// Refill the tree but with much less data
for (int i = 0; i < 10; i++) {
TreeMultiMap<string, string> nestedTree = new TreeMultiMap<string, string> (null, null);
nestedTree.@set ("Lorem ipsum", "Lorem ipsum");
rootTree.@set ("Lorem ipsum", nestedTree);
}
stdout.printf ("Press ENTER to quit...");
// Wait for the user to press enter
input = stdin.read_line ();
return 0;
}
Скомпилировано с valac --pkg gee-0.8 -g MultiMapTest.vala
Считается ли этоутечка памяти?Если это так, есть ли способ правильно подходить к ситуации, например, когда память освобождается для ОС после очистки дерева multi-map, даже если оно предполагает использование других структур данных?
Я использовал valgrind, но не смогобнаружить любые утечки памяти.Я полагаю, что после выделения памяти для переменной TreeMultiMap
, если переменная не выйдет из области видимости, программа сохранит эту память до конца своего срока службы вместо того, чтобы возвращать ее обратно операционной системе.Даже если TreeMultiMap опустошен.