gpt4 book ai didi

java - java中的内存高效集合

转载 作者:行者123 更新时间:2023-12-01 11:10:48 25 4
gpt4 key购买 nike

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

  1. 造船厂详情
  2. 容器详细信息
  3. 发货详情
  4. 等等

现在我们有Dockyard作为父对象,其下可以有许多装运详细信息的对象。我们目前使用ArrayList维护近 50k 造船厂详细对象的装运详细信息。当前的数据量表明,对于每个 Dockyard对象 我们将必须维护大约 1500 个装运详细对象,并且堆中将有近 50k 个船厂对象。我们当前的堆是 8GB。

所以想知道 ArrayList 是否是保存这么多对象的最佳方式。我也寻找过其他 API,例如 trove , HPPC但它们主要在原始收集方面提供好处。我们的将是对象的集合。所以除了增加堆大小之外。有人可以建议任何其他更好的选择吗?

最佳答案

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

there will almost 50k dockyard object lying in heap.

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

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

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

顺便说一句,1 GB 大约相当于您一个小时的时间。在花费太多时间之前,我会尝试将内存大小加倍。

关于java - java中的内存高效集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com