gpt4 book ai didi

java - 使用 ChronicleMap 和ExternalMapQueryContext 进行对象分配

转载 作者:行者123 更新时间:2023-12-02 05:56:34 25 4
gpt4 key购买 nike

我们希望在一些高性能代码中最小化(如果不是消除的话)对象分配。这在历史 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;
}
}

我们也可以共享分配堆栈的屏幕截图。

最佳答案

我们有一个测试 net.openhft.chronicle.map.ChronicleMapTest#testAcquireLockedPerf 每秒执行数百万次操作。您可以使用以下命令运行它

-Xmx64m -verbose:gc

对于这种情况,尽管有 64 MB 堆,但在预热后,测试不会触发一次 gc,进行数亿次操作。

要弄清楚为什么您的特定案例会产生大量垃圾,需要进行更多调查。

关于java - 使用 ChronicleMap 和ExternalMapQueryContext 进行对象分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com