0

我正在使用访问直接内存的 Apache Arrow Java API。

我也在使用 Redis,当这个 Java API 访问直接内存时,Redis xstream 在内存中继续增长。

偶尔发现,Arrow 会计算以下操作的错误结果,

public static int bytesToInt(byte[] bytes) {
    return ((bytes[3] & 255) << 24) +
           ((bytes[2] & 255) << 16) +
           ((bytes[1] & 255) << 8) +
           ((bytes[0] & 255));
  }

此方法返回否定结果并且以下代码引发错误

messageLength = MessageSerializer.bytesToInt(buffer.array());
ByteBuffer.allocate(messageLength);

我发现如果我重新启动 Redis(删除所有以前的数据),错误会消失一段时间。如果没有,当我调用 Arrow 方法时,错误会更快发生。

重现至关重要,以我的经验,Arrow 直接内存访问应该很频繁,并且 redis xstream 增长应该足够快。

所以我不是要完全重现和解决问题,而是要问这两个内存访问是否可能发生冲突?上述结果是否有合理的理论支持?

4

0 回答 0