Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非常快的8字节在Java中翻倍-用于HFT应用程序_Java_Performance_Low Latency_Hft - Fatal编程技术网

非常快的8字节在Java中翻倍-用于HFT应用程序

非常快的8字节在Java中翻倍-用于HFT应用程序,java,performance,low-latency,hft,Java,Performance,Low Latency,Hft,我们的HFT交易应用程序是用Java开发的。我们需要将8个字节转换为双倍数字,但转换速度必须非常快。请记住,我们的延迟不到15微秒,所以传统的java方法可能不适合我们。任何建议都会有帮助。提前谢谢 [编辑] 我们已经研究了一些方法,如byetebuffer、nio类、旋转方法(使用移位)等。 但是,我想再次重申,需要尽可能快地完成每个操作。使用这些形式的转换是昂贵的(即使它们作为独立的转换看起来更快)&我们最终会在应用程序中引入延迟。 我正在寻找开箱即用的想法(不限于Java提供的API),任

我们的HFT交易应用程序是用Java开发的。我们需要将8个字节转换为双倍数字,但转换速度必须非常快。请记住,我们的延迟不到15微秒,所以传统的java方法可能不适合我们。任何建议都会有帮助。提前谢谢

[编辑]

我们已经研究了一些方法,如byetebuffer、nio类、旋转方法(使用移位)等。 但是,我想再次重申,需要尽可能快地完成每个操作。使用这些形式的转换是昂贵的(即使它们作为独立的转换看起来更快)&我们最终会在应用程序中引入延迟。 我正在寻找开箱即用的想法(不限于Java提供的API),任何人都可能有过以不同格式(int、double、float等)使用字节的经验。
这方面的一个想法可能是缓存double值并与接收到的字节进行比较,从而消除了转换的需要。

您可能希望将java.nio用于IO,在这种情况下,您可以在ByteBuffer和DoubleBuffer之间进行转换,以完成所需的操作。这将比自己在转换逻辑上瞎搞快得多

这很容易:

ByteBuffer buffer.allocateDirect(<size>);
... add to the buffer ...
DoubleBuffer db = buffer.asDoubleBuffer();
ByteBuffer buffer.allocateDirect();
... 添加到缓冲区。。。
DoubleBuffer db=buffer.asDoubleBuffer();

瞧。

你能添加一个java方法来更好地理解这个问题吗?OP的问题非常清楚。“在Java中将double的逐字节表示转换为double的最快方法是什么?”你可能会责备他/她没有先做任何研究,但为了清楚起见,你当然不能这样做。如果你知道所涉及的技术,这是一个常见的、具体的问题,并且有一个立即清晰的“正确答案”。@BadZen不太清楚。您的答案很好(因为它是一个非黑客标准Java解决方案),但考虑到HFT所需的速度,甚至您的方法也可以改进。然而,你最终用清洁和可靠性代替了速度。我不知道怎么做。直接分配的缓冲区与本机C转换加上Java对象开销的速度差不多。如果后一段时间让你丧命,你不想使用Java。你还提出了什么“用清洁和可靠性代替速度”的更快的解决方案?@Neha-你能准确描述一下你在nio上的尝试吗?当然,如果您从Java数组将所有数据加载到ByteBuffer中,然后进行转换,然后加载到双数组中,这不会更快。您需要使用频道,或使用专门的矩阵库。你到底是如何使用nio的?您的数据是如何存储的?如果您正在处理这种级别的实时需求,那么您可能已经将所有数据存储在通道/缓冲区中了,尽管重构一切可能会很痛苦……感谢您的快速响应,我们已经更新了有关此问题的更多详细信息。