通过 GC 调整,我成功地获得了实时 Java 应用程序的性能并避免了可识别的 GC 暂停。但是,这最多可容纳约 20 GB 的堆空间。
硬件成本的降低甚至让 100GB RAM 的机器都可以负担得起。但是,由于 GC 暂停,对于 Java 来说,更大的堆大小(如 50 GB)有时会让您陷入噩梦。
我知道有堆外和分布式堆之类的选项。但是,堆外有序列/序列化的缺点,手头的分布式堆增加了维护成本。此外,在分布式堆中,您实际上并没有充分利用 RAM(例如 64 GB),这些如今已成为商品。
因此,要充分发挥RAM的潜力,Java应用的垂直扩展有哪些好的解决方案?
最佳答案
我正在开发一个名为 Banana 的原始集合库. Banana 解决了这些确切的问题。 它很快就支持 LinkedLists、HashMaps 和可能的其他数据结构,而无需保留 N 个对象的开销。基本上 - 整个存储可以在一个 int[] 数组(或多个)中。
虽然我还没有正式发布它,但大部分都经过了很好的测试,我已经在具有 144GB RAM 的服务器上成功运行它,保持快速和一致的性能,没有任何 GC 暂停。
查看 this HashMap 基准,以了解如何使用 Banana 存储数据以及它的垂直扩展能力。
https://github.com/omry/banana/wiki/Long-to-fixed-size-object-benchmark
参见 wiki了解更多信息。
关于java - Java实时应用的纵向扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682605/