ZeroMQ(JeroMQ)接收调用会导致java gc循环
我正在评估ZeroMQ作为低延迟项目的候选。但是我找不到一种方法来阻止GC循环,这是纯java实现recv调用导致的。有没有办法告诉ZeroMQ使用相同的字节缓冲区进行同步读取ZeroMQ(JeroMQ)接收调用会导致java gc循环,java,garbage-collection,jeromq,Java,Garbage Collection,Jeromq,我正在评估ZeroMQ作为低延迟项目的候选。但是我找不到一种方法来阻止GC循环,这是纯java实现recv调用导致的。有没有办法告诉ZeroMQ使用相同的字节缓冲区进行同步读取 private static ZContext context; public static void main(String[] args) { try { context = new ZContext(); ZFrame qFrame = new ZFrame(quer
private static ZContext context;
public static void main(String[] args)
{
try
{
context = new ZContext();
ZFrame qFrame = new ZFrame(queryBuffer);
// Socket to talk to clients
ZMQ.Socket socket = context.createSocket(SocketType.REQ);
socket.connect(ConnectionUtils.tcp(serverIp, serverPort));
//socket.setHWM(1000);
//socket.setReceiveBufferSize(2000);
//socket.setLinger(1000);
//socket.setRcvHWM(1000);
int i = 0;
while (!Thread.currentThread().isInterrupted())
{
qFrame.sendAndKeep(socket, 0);
socket.recv(0);
// ZFrame f= ZFrame.recvFrame(socket,0);
// f.destroy();
//ZMsg answer=ZMsg.recvMsg(socket,0);
//answer.destroy();
//socket.recvByteBuffer(answerBuf,0);
// answerBuf.clear();
i++;
}
}
}
这里gc与
zeromq
有什么关系?你分配了吗?如果您得到GC调用,请尝试不同的方法签名。将静态字节数组传递给recv方法。但似乎zeromq在recv调用期间分配了新的字节缓冲区。我试图找到一种方法告诉zeromq不要分配新的字节缓冲区。基本上,我想为recv调用分配一个固定的缓冲区。但是socket api以某种方式创建了新对象,最终导致了gc。我对zeromq不太了解,但您需要提供获得该屏幕截图的示例。@Eugene我做了一个简单的请求-应答服务器/客户端,问题仍然存在。我认为这是一个非常基本的例子。例如代码