首页 > 解决方案 > 我在java中使用大内存的最佳实践是什么?

问题描述

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

标签: javacachingmemoryheap-memory

解决方案


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

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

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


推荐阅读