java - Java实时应用的纵向扩展

标签 java garbage-collection jvm heap-memory

通过 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/

相关文章:

ruby - Ruby 1.9 中的垃圾收集器调整

java - Files.getLastModifiedTime() 是否泄漏内存?

Scala 类型错误

algorithm - 如果没有垃圾收集,算法和/或数据结构的一些例子很难或不可能正确实现?

java - 我的 Apache CXF 客户端出了什么问题?

java - 使用反射设置 JUnit 测试超时

java - 双重加密/解密失败但单一加密/解密失败 - AES 256 位

python - 在 Windows 10 任务管理器的内存使用 View 中绘制正弦曲线?

java - 静态方法与内部类方法 - 性能 [java 8]

java - 如何更新Mongodb的文档而不影响其字段值之一