Java低延迟应用程序的开发清单是什么?

问题描述 投票:33回答:11

我想为Java低延迟应用程序创建全面的清单。你能在这里添加清单吗?

这是我的清单 1.使对象不可变 2.尝试减少同步方法 3.锁定顺序应妥善记录,并小心处理 4.使用分析器 5.使用Amdhal定律,找到顺序执行路径 6.使用Java 5并发实用程序和锁 7.避免使用Thread优先级,因为它们取决于平台 8.可以使用JVM预热 9.首选不公平的锁定策略 10.避免上下文切换(许多线程导致反效果) 11.避免拳击,解拳 12.注意编译器警告 13.线程数应等于或小于核心数

低延迟应用程序每毫秒调整一次。

java multithreading concurrency low-latency
11个回答
7
投票

虽然不变性很好,但它不一定会改善延迟。确保低延迟可能取决于平台。

除了一般性能外,GC调整非常重要。减少内存使用量将有助于GC。特别是如果你可以减少需要移动的中年对象的数量 - 保持对象长寿或短寿。也避免任何接触烫发的东西。


0
投票

我认为“仅在适当的地方使用可变对象”优于“使您的对象不可变”。许多非常低延迟的应用程序都有重用的对象池,以最大限度地减少GC不可变对象不能以这种方式重用。例如,如果您有Location类:

class Location {
    double lat;
    double lon;
}

您可以在启动时创建一些并反复使用它们,因此它们永远不会导致分配和后续GC。

这种方法比使用不可变的位置对象要复杂得多,所以它只应该在需要的地方使用。


0
投票

除了此处建议的开发人员级别解决方案之外,考虑加速JIT运行时(例如Zing和off堆内存解决方案,如Teracotta BigMemory,Apache Ignite以减少Stop-the-world GC暂停)也是非常有益的。如果使用二进制协议(如Hessian,ZERO-C ICE而不是webservice等)涉及的某些GUI非常有效。


5
投票

避免装箱/拆箱,尽可能使用原始变量。


4
投票

购买,阅读和理解Effective Java。还有available online


4
投票

在消息处理路径上尽可能避免上下文切换结果:使用NIO和单事件循环线程(reactor)


4
投票

避免广泛的锁定和多线程,以免破坏现代处理器(及其缓存)中的增强功能。然后,您可以使用单个线程达到其令人难以置信的限制(每秒600万次交易),并且延迟非常低。

如果您想看到一个真实世界的低延迟Java应用程序,其中包含有关其体系结构的足够详细信息,请查看LMAX:

The LMAX Architecture


2
投票

测量,测量和测量。使用尽可能靠近生产硬件的实际数据来定期运行基准测试。低延迟应用程序通常被更好地视为设备,因此您需要考虑部署的整个框不仅仅是特定的方法/类/包/应用程序/ JVM等。如果您没有在生产环境中构建逼真的基准测试,那么您将会遇到意外情况。生产。


1
投票

不要在应用程序中安排比在底层硬件上具有核心更多的线程。请记住,操作系统将需要线程执行以及可能需要共享相同硬件的其他服务,因此可能需要使用您的应用程序以使用少于最大可用内核数量的应用程序。


0
投票

在生成大字符串时使用StringBuilder而不是String。例如查询。


0
投票

另一个重要的想法是首先使其工作,然后测量性能,然后隔离任何瓶颈,然后优化它们,然后再次测量以验证改进。

正如Knuth所说,“过早优化是所有邪恶的根源”。

© www.soinside.com 2019 - 2024. All rights reserved.