У меня есть немного путаницы в отношении управления памятью.Когда релиз памяти Neo4j?
Я использую neo4j во встроенном режиме в Java-приложении. Версия - 1.8.1. Версия JVM - 1.6
У меня есть однопоточный загрузчик с петлей для цикла, который содержит вложенный цикл. Внутри внешнего цикла я делаю graphDb.beginTx();
, получаю идентификатор тестового объекта из mysql и создаю для него узел. Во внутреннем цикле for я запрашиваю mysql, чтобы получить кучу связанных объектов. Я создаю для них узлы и соответствующую связь с узлом, который я создал во внешнем цикле.
В конце внешней петли, я делаю tx.success()
и tx.finish()
.
for (int x = 0; x < 10000000; x++) {
Transaction tx = graphDb.beginTx();
Node n = graphDb.createNode();
Long id = n.getId();
System.out.println("ID: " + id);
n.setProperty("TestId", x);
* * * get the mysql ids * * * *
for (int y = 0; y < mysqlidlist; y++) {
Node n1 = graphDb.createNode();
Long id2 = n1.getId();
n1.setProperty("InnerTestId", y);
Relationship rel = n.createRelationshipTo(n1, NodeRelation.ATTRIBUTE);
rel.setProperty("Weight", 0.3);
}
tx.success();
tx.finish();
tx = null;
}
На основании моих показаний, я подумал, что Neo4j затем освободить память, которая захваченная транзакции. Тем не менее, я вижу, что использование памяти постоянно увеличивается, и через некоторое время она попадает в настройку Xmx. Я проконсультирую его, чтобы убедиться, что утечек нет. Я устанавливаю все остальные переменные в нуль в конце, и это должно помочь GC использовать его лучше.
Я не прав в своем понимании? Если да, то в чем рекомендуемая передовая практика управления памятью?
Следующий шаг - однопоточный погрузчик будет расширяться, чтобы быть многопоточным и, как таковой, должен быть уверенным в том, что управление памятью и управление транзакциями являются надежными.
Большое спасибо!
С уважением,
Сэчин
Можете ли вы показать код? – TizianoPiccardi
yep .... код. – user2158600
да .... код ... \t \t для (INT х = 0, х <10000000; х ++) \t \t { \t \t \t Transaction Тх = graphDb.beginTx(); \t \t \t Узел n = graphDb.createNode(); \t \t \t Длинный идентификатор = n.getId(); \t \t \t System.out.println ("ID:" + id); \t \t \t n.setProperty ("TestId", x); \t \t \t *** Получить MySQL Идентификаторы **** \t \t \t для (INT у = 0; у
user2158600