首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写低延迟Java

编写低延迟Java
EN

Software Engineering用户
提问于 2012-04-03 22:33:52
回答 2查看 34.7K关注 0票数 33

在Java中,是否有任何特定于Java的技术(不适用于C++)来编写低延迟代码?我经常看到Java低延迟角色,他们要求获得编写低延迟Java的经验--这有时看起来有点矛盾。

我唯一能想到的就是使用JNI的经验,将I/O调用外包给本机代码。也可能使用破坏模式,但这不是一个实际的技术。

是否有编写低延迟代码的Java特定提示?

我知道有一个实时Java规范,但我被警告过,实时并不等同于低延迟.

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2012-04-04 08:45:06

除了Martijn的评论之外,我还要补充如下:

  1. 热身你的JVM。字节码开始对Hotspot进行解释,然后在10K观测之后在服务器上编译。分层编译可以是一个很好的止损间隙。
  2. 类加载是一个顺序过程,涉及到磁盘的IO。确保您的主事务流的所有类都预先加载,并且它们永远不会从perm生成中被逐出。
  3. 遵循"单作者原则“,以避免争论和利特尔定律的排队效应含义,并研究阿姆杜尔定律,看看什么是平行的,它是否值得。
  4. 建模您的业务域,并确保所有算法都是O(1)或至少O(log )。在我的经验中,这可能是导致性能问题的最大原因。确保您有性能测试,以涵盖主要情况。
  5. Java中的低延迟并不仅限于Java。您需要了解代码正在执行的整个堆栈。这将涉及操作系统优化、选择适当的硬件、调优系统软件和该硬件的设备驱动程序。
  6. 现实点。如果您需要低延迟,请不要在管理程序上运行。确保您有足够的核心为所有线程需要处于可运行状态。
  7. 缓存丢失是性能的最大代价。使用与处理器内核友好的缓存算法,对于JVM使用任务集或numactl,对于单个线程使用JNI。
  8. 考虑另一个JVM,比如来自Azul的Zing,它有一个没有暂停的垃圾收集器。
  9. 最重要的是找一个有经验的人。从长远来看,这将为你节省很多时间。无耻的插头:-)

实时和低延迟是明显独立的主题,尽管经常相关。实时是指更容易预测而不是更快。根据我的经验,实时JVM,甚至是软实时JVM,都比正常的JVM慢。

票数 41
EN

Software Engineering用户

发布于 2012-04-04 06:21:49

有很多事情需要注意,是的。我目前在克里特岛有限的网络访问,所以这将是(相当)短。而且,我不是一个低延迟的专家,但我的几个同事在现实生活中扮演一个:-)。

  1. 你需要欣赏机械同情(一个由马丁·汤普森创造的术语)。换句话说,您需要了解您的底层硬件正在做什么。了解CPU是如何加载缓存线的,它们的读/写带宽是多少,主内存的速度等等都是非常重要的。为什么?因为您需要解释Java源代码如何通过运行时JVM影响操作系统/硬件。例如,您的字段变量在源代码中的布局方式导致缓存行被逐出(花费您大约150个时钟周期),嗯.-)。
  2. 通常,您需要无锁算法,而I/O即使是设计最好的并发应用程序(使用锁)也有阻塞的风险,低延迟阻塞通常是不好的:-)。
  3. 了解对象分配和垃圾收集。这是一个很大的主题,但基本上您希望避免GC暂停(通常是由停止各种GC集合的World特性造成的)。像Azul收集器这样的专家GC收集器在很多情况下可以为您解决这个问题,但是对于大多数人来说,他们需要了解如何调优Sun/Oracle (CMS、G1等)。
  4. 热点JIT真是太棒了。了解其优化,但一般来说,所有优秀的OO技术(封装、小方法、尽可能多的不可变数据)将允许JIT进行优化,为您提供精心编制的C/C++代码所提供的各种性能水平。
  5. 总体体系结构。要注意网络,如果你通过光纤等方式连接到交换机,那么机器是如何共存的。
  6. 注意日志记录的影响。记录二进制文件或使用可以离线解析的编码输出可能是个好主意。

总的来说,我强烈建议使用柯克胡椒的爪哇性能调优课程 免责声明:我自己教这门课,所以我有偏见。您将很好地了解JVM的各个方面及其对底层O/S和硬件的影响。

PS:我以后再试着重新考虑一下,把它整理一下。

票数 24
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/142864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档