java高频面试_C ++或Java,高频交易哪个更快?
java高频面试
关于什么是高频交易的最佳解决方案,存在不同意见。 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义。
我的看法
如果您有一个典型的Java程序员和一个典型的C ++程序员,并且每个人都有几年编写典型的面向对象程序的经验,并且给了他们相同的时间,那么Java程序员可能会更早地拥有一个工作程序,并且将拥有更多的工作时间。是时候调整应用程序了。 在这种情况下,Java应用程序可能会更快。 恕我直言。
以我的经验,Java在检测不需要执行的代码方面在C ++上表现更好。 esp微型基准测试,没有任何用处。 ;)如果您以任意专业知识和时间调优Java和C ++的能力,C ++程序将更快。 但是,由于资源有限且在不断变化的环境中,动态语言将无法运行。 即在实际应用中。
在股票空间延迟中,您需要将潜伏期定为10次以下才能使频率很高。 不能选择Java甚至商用硬件上的标准OOP C ++。 您需要C或C ++的简化版本以及诸如FPGA,GPU之类的专业硬件。
在FX中,高频意味着延迟小于100 us。 在这种情况下,可以选择使用C ++或带有内核旁路网络适配器的精简Java(低GC)。 在这种情况下,使用一种或另一种语言将有加有减。 就个人而言,我认为随着交流的不断变化,Java会提供更大的灵活性,前提是您认为可以利用IT获得竞争优势。
在许多情况下,当人们谈论高频(尤其是Banks)时,他们谈论的是1 ms以下或一位数ms。 在这个领域,我想说Java,Scala或C#等的灵活性/动态编程将给您时间,与C / C ++或FPGA相比,具有可维护性和可靠性方面的优势。
Java面临的问题
问题不在于语言本身,而是缺乏对缓存,上下文切换和中断的控制。 如果复制一块内存(发生在本机内存中,但是在运行之间使用了不同的延迟),则该副本会变慢,具体取决于副本之间发生的情况。
问题不是GC或Java,因为这两者都不起作用。 问题在于缓存的一部分已被换出,副本本身需要更长的时间。 这对于访问内存的任何操作都是相同的。 例如访问普通对象也将变慢。
private void doTest(Pauser delay) throws InterruptedException {int[] times = new int[1000 * 1000];byte[] bytes = new byte[32* 1024];byte[] bytes2 = new byte[32 * 1024];long end = System.nanoTime() + (long) 5e9;int i;for (i = 0; i < times.length; i++) {long start = System.nanoTime();System.arraycopy(bytes, 0, bytes2, 0, bytes.length);long time = System.nanoTime() - start;times[i] = (int) time;delay.pause();if (start > end) break;}Arrays.sort(times, 0, i);System.out.printf(delay + ": Copy memory latency 1/50/99%%tile %.1f/%.1f/%.1f us%n",times[i / 100] / 1e3,times[i / 2] / 1e3,times[i - i / 100 - 1] / 1e3);
}
测试多次执行相同的操作,但执行该测试之间的延迟有所不同。 该测试将大部分时间都用在本地方法上,并且没有像在测试期间那样创建或丢弃任何对象。
收益:复制记忆体延迟1/50/99%tile 1.6 / 1.6 / 2.3 us
NO_WAIT:复制内存延迟1/50/99%tile 1.6 / 1.6 / 1.6 us
BUSY_WAIT_10:复制内存延迟时间为1/50/99%tile 3.1 / 3.5 / 4.4 us BUSY_WAIT_3:复制内存延迟时间为1/50/99%tile 2.7 / 3.0 / 4.0 us BUSY_WAIT_1:复制内存延迟时间为1/50/99%tile 1.6 / 1.6 / 2.6 us SLEEP_10:复制内存延迟时间为1/50/99%tile 2.3 / 3.7 / 5.2 us SLEEP_3:复制内存延迟时间为1/50/99%tile 2.7 / 4.4 / 4.8 us SLEEP_1:复制内存延迟时间为1/50/99%tile 2.8 / 4.6 / 5.0 us
执行内存复制所需的典型时间(中间值)在1.6到4.6 us之间,这取决于是否有1到10毫秒的繁忙等待或睡眠时间。 这是大约3倍的比率,与Java无关,但是它并没有真正的控制权。 甚至最好的时间也相差约2倍。
代码
ThreadlatencyTest.java
结论
在超高频下,核心引擎将比OOP C ++或Java更多的C,汇编和自定义硬件。 在引擎的延迟要求不太严格的市场中,C ++和Low GC Java成为了选择。 随着等待时间要求变得不那么严格,Java和其他动态语言可能会变得更有效率。 在这种情况下,Java投放市场的速度更快,因此您可以利用市场/需求的变化带来的优势。
参考: C ++或Java,高频交易更快? 来自我们的JCG合作伙伴 Peter Lawrey在Vanilla Java 。
- Java中的低GC:使用原语而不是包装器
- Java Lambda语法替代
- JVM如何处理锁
- Erlang与Java内存架构
- Java Fork / Join进行并行编程
- Java最佳实践系列
- 如何在Java中获得类似于C的性能
翻译自: https://www.javacodegeeks.com/2011/07/c-or-java-which-is-faster-for-high.html
java高频面试
java高频面试_C ++或Java,高频交易哪个更快?相关推荐
- 《Java 后端面试经》Java 基础篇
<Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...
- Java经典面试套路讲解:Java Killer系列
Java经典面试套路讲解:Java Killer系列 java编程语言是目前应用较为广泛的一门计算机编程语言,目前java市场需求量有增无减.java作为目前IT软件开发行业的重要技术之一,人才市场出 ...
- java后端面试大全,java后端面试宝典
文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...
- 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?
转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...
- Java里的 for (;;) 与 while (true),哪个更快?
在JDK8u的jdk项目下做个很粗略的搜索: 并没有差多少. 其次,for (;;) 在Java中的来源.个人看法是喜欢用这种写法的人,追根溯源是受到C语言里的写法的影响.这些人不一定是自己以前写C习 ...
- C ++或Java,高频交易哪个更快?
总览 关于什么是高频交易的最佳解决方案,存在不同意见. 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义. 我的看法 如果您有一个典型的Java程序员和一个典型的C ++程序员,并且每个 ...
- 并发执行变成串行_大白话Java并发面试问题之Java 8如何优化CAS性能?
专注于Java领域优质技术,欢迎关注 来自:石杉的架构笔记 一.前言 这篇文章给大家聊一下java并发包下的CAS相关的原子操作,以及Java 8如何改进和优化CAS操作的性能. 因为Atomic系列 ...
- 图文详解!java开发面试简历模板java
开头 对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一.因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统.内存.CPU.编程语言等多方面的基础能力,更为考验一 ...
- java 基础面试 英文_[Java面试] 面试java基础总结大全
原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...
最新文章
- python教程app下载地址_python教程
- Xamarin.Forms教程开发的Xcode的下载安装
- Java基础02 方法与数据成员
- Python开发之--前端 HTML基础
- HTTP协议学习随笔
- effective C++ 条款 11:在operator= 处理‘自我赋值’
- springCloud 搭建Eureka
- [Perl]利用XML::DOM生成XML文档
- JSONP和CORS两种跨域方式的介绍和方案实例
- unity 创建中文自定义字体
- [转]新建一个Android工程项目
- 如何查看两个word文档的不同之处
- pr如何跳到关键帧_【技能培训营】Pr基本操作(五)
- 加州戴维斯分校计算机专业排名,加州大学戴维斯分校的计算机专业如何?
- 在命令行中快速移动光标的快捷键
- android打开微信运动,小米手机怎么开启微信运动?
- coreseek 词库 导入搜狗词库
- java提取word中的图片_Java怎么获取Word批注的文字和图片
- 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”?
- 两张显卡在win10上如何使用