【问题标题】:What is the best practice I utilize large memory size in java?我在java中使用大内存的最佳实践是什么?
【发布时间】:2019-01-30 20:29:52
【问题描述】:

我有一个应用服务器服务器和 64 GB 内存。还有一个 java web 应用程序。利用所有这些 64 GB 的最佳做法是什么?我需要存储大量对象(HashSet) 使用 -Xms -Xmx 是最佳解决方案吗?但是 GC 会运作良好吗? 我应该使用缓存库(memcache 等)之类的第三方解决方案吗?

【问题讨论】:

  • 您在上面运行了一个 Web 应用程序?这对于单个应用程序来说是很多内存,而且很可能甚至是浪费的。你打算记住什么?一个更好的选择可能是集群中的多个服务器。
  • 我想把复杂的对象保存在内存中,这些对象是从真实的地理数据映射而来的(几个图层。包含详细的景观)
  • 根据您的要求,您应该考虑拥有多个 JVM,每个 JVM 处理一组不同的数据。例如在地理区域附近。
  • 好的,我明白了,所以假设我将它分成 5 个块并放入一个集群。我应该使用 redis 之类的东西在所有 5 个块之间共享数据并利用内存吗?
  • 这将是一个新问题,但很大程度上取决于您的确切要求。除此之外,我感谢您的快速接受!

标签: java caching memory heap-memory


【解决方案1】:

一个非常笼统的问题,所以一个广泛的答案。

  • 尽管最近做得更好,但“免费”JRE(Oracle、IBM)都不是因为支持 大量 内存而“出名”。如果您出于某种原因确实需要一个 JVM,那么您可能应该咬紧牙关,从 Azuul 购买像 zing 这样的产品。 zing 允许您在每个 JVM 上使用多达 2 TB 的容量,并且它还旨在最大限度地减少 GC 暂停。 (这是其他 VM 的真正问题:至少几年前,它们的 GC 暂停会随着内存大小线性增长。)
  • 但是,2018 年更好的方法是:横向扩展而不是纵向扩展。含义:宁可拥有多个 JVM(可能消耗 4、8、16 GB),并使用负载平衡之类的东西来保持这些 JVM 忙碌。

换句话说:当然,如果您有一个大型单片应用程序,只能通过添加更多 RAM 来“扩展”,那么您必须忍受它。但是,如果您想知道如何更明智地花钱,那么请研究一下微服务,以及如何使用它们来将这个单体分解成许多小部分(以及通过实例化进行扩展的地方) 更多这些小部件)。

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多