Мы стремимся минимизировать (если не исключить) распределение объектов в некотором высокопроизводительном коде. Это было / в значительной степени возможно в предыдущих версиях Chronicle Map (версия 2.x). В последней версии Chronicle Map (3.17.1) мы видим значительные выделения при использовании ExternalMapQueryContext. Мы следуем за учебником здесь: https://github.com/OpenHFT/Chronicle-Map/blob/master/docs/CM_Tutorial.adoc
Это ожидается? Используем ли мы правильный подход?
VOInterface voi = VO.get();
try (ExternalMapQueryContext < CharSequence, voi, ? > ctx = map.queryContext(key)) {
if (ctx.readLock().tryLock()) {
MapEntry < CharSequence, voi > entry = ctx.entry();
if (entry != null) {
// Entry is present, return
entry.value().getUsing(voi);
accessor.accessData(voi);
// Key is absent
// Need to unlock, to lock to update lock later. Direct upgrade is forbidden.
ctx.readLock().unlock();
return true;
} else {
accessor.notFound();
// Key is absent
// Need to unlock, to lock to update lock later. Direct upgrade is forbidden.
ctx.readLock().unlock();
return false;
}
}
ctx.updateLock().lock();
MapEntry < CharSequence, voi > entry = ctx.entry();
if (entry != null) {
entry.value().getUsing(voi);
accessor.accessData(voi);
return true;
} else {
accessor.notFound();
return false;
}
}
У нас есть скриншоты стеков распределения, которые мы также можем поделиться.