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,高频交易哪个更快?相关推荐

  1. 《Java 后端面试经》Java 基础篇

    <Java 后端面试经>专栏文章索引: <Java 后端面试经>Java 基础篇 <Java 后端面试经>Java EE 篇 <Java 后端面试经>数 ...

  2. Java经典面试套路讲解:Java Killer系列

    Java经典面试套路讲解:Java Killer系列 java编程语言是目前应用较为广泛的一门计算机编程语言,目前java市场需求量有增无减.java作为目前IT软件开发行业的重要技术之一,人才市场出 ...

  3. java后端面试大全,java后端面试宝典

    文章目录 -2 flink -1 linux of view linux查看占用cup最高的10个进程的命令: 〇.分布式锁 & 分布式事务 0-1分布式锁--包含CAP理论模型 概述 分布式 ...

  4. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?

    转自:知乎 www.zhihu.com/question/52311366/answer/1300903 在 JDK8u 的 jdk 项目下做个很粗略的搜索: mymbp:/Users/me/work ...

  5. Java里的 for (;;) 与 while (true),哪个更快?

    在JDK8u的jdk项目下做个很粗略的搜索: 并没有差多少. 其次,for (;;) 在Java中的来源.个人看法是喜欢用这种写法的人,追根溯源是受到C语言里的写法的影响.这些人不一定是自己以前写C习 ...

  6. C ++或Java,高频交易哪个更快?

    总览 关于什么是高频交易的最佳解决方案,存在不同意见. 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义. 我的看法 如果您有一个典型的Java程序员和一个典型的C ++程序员,并且每个 ...

  7. 并发执行变成串行_大白话Java并发面试问题之Java 8如何优化CAS性能?

    专注于Java领域优质技术,欢迎关注 来自:石杉的架构笔记 一.前言 这篇文章给大家聊一下java并发包下的CAS相关的原子操作,以及Java 8如何改进和优化CAS操作的性能. 因为Atomic系列 ...

  8. 图文详解!java开发面试简历模板java

    开头 对于一个Java程序员而言,能否熟练掌握并发编程是判断他优秀与否的重要标准之一.因为并发编程是Java语言中最为晦涩的知识点,它涉及操作系统.内存.CPU.编程语言等多方面的基础能力,更为考验一 ...

  9. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

最新文章

  1. python教程app下载地址_python教程
  2. Xamarin.Forms教程开发的Xcode的下载安装
  3. Java基础02 方法与数据成员
  4. Python开发之--前端 HTML基础
  5. HTTP协议学习随笔
  6. effective C++ 条款 11:在operator= 处理‘自我赋值’
  7. springCloud 搭建Eureka
  8. [Perl]利用XML::DOM生成XML文档
  9. JSONP和CORS两种跨域方式的介绍和方案实例
  10. unity 创建中文自定义字体
  11. [转]新建一个Android工程项目
  12. 如何查看两个word文档的不同之处
  13. pr如何跳到关键帧_【技能培训营】Pr基本操作(五)
  14. 加州戴维斯分校计算机专业排名,加州大学戴维斯分校的计算机专业如何?
  15. 在命令行中快速移动光标的快捷键
  16. android打开微信运动,小米手机怎么开启微信运动?
  17. coreseek 词库 导入搜狗词库
  18. java提取word中的图片_Java怎么获取Word批注的文字和图片
  19. 图解ARP协议(三)ARP防御篇-如何揪出“内鬼”并“优雅的还手”?
  20. 两张显卡在win10上如何使用

热门文章

  1. 《此生未完成》痛句摘录(一)
  2. RPC(远程过程调用)
  3. Java标识符与命名规则
  4. cmw500综合测试仪使用_山西优质三相直流电阻测试仪图片-南电合创
  5. 10.1-控制单元CU的组合逻辑设计
  6. javaI/O流小结
  7. FAT12中,如何定位大于一个扇区(512B)的文件内容
  8. Spring IOC 如何解决循环依赖?
  9. SpringMvc @RequestParam、 @RequestBody、@RequestPart 的区别
  10. 开发罪过_七大罪过与如何避免