0

我们的应用程序是一个基于千兆空间的解决方案,它基本上从多个平面文件中读取数据并将数据存储在一个对象中。现在平面文件基本上包含一些货运细节。所以我们有多个文件

  1. 船坞详情
  2. 集装箱详情
  3. 物流信息
  4. 等等

现在我们有Dockyard一个父对象,在该对象下可以有许多货物的详细信息。我们目前使用 anArrayList来维护近 50k 船坞细节对象的装运细节。当前的数据量表明,对于每个Dockyard对象,我们必须维护大约 1500 个装运细节对象,并且堆中将有近 50k 船坞对象。我们当前的堆是 8GB。

所以想知道 ArrayList 是否是保留这么多对象的最佳方式。我也寻找过其他 API troveHPPC但它们在原始集合方面大多提供了好处。我们的将是对象的集合。所以除了增加堆大小。有人可以建议任何其他更好的选择。

4

1 回答 1

1

您不需要将所有对象都保存在堆上。例如,使用 Chronicle Map,您可以将所有对象保持在堆外,并且由于它们是内存映射文件,它们甚至不必在内存中。如果大量数据不在堆中,您可能会发现可以减小堆大小。

堆中将有近 50k 船坞对象。

这不是很多对象。即使每个对象使用 1 KB,那么您也只使用了 50 MB。如果您的对象比这大得多,那么您很可能应该寻找减小单个对象大小的方法。

当我们使用基于原始的集合时,主要是为了避免每个元素的对象头。这可以为每个条目节省 8 - 16 个字节,在您的情况下最多可以节省 800 KB。

但是,如果您的对象按照您的建议为 1 KB 到 100 KB,您可以通过重组它们或使用不同的数据类型将它们在内存中使用的大小减半。

顺便说一句,1 GB 值得您花费大约一个小时的时间。在花费太多时间之前,我会探索将内存大小加倍。

于 2015-09-05T07:43:30.263 回答