java - 使用巨大的 ArrayLists,Java OutOfMemoryError : Java heap space. .. 使用 db?

标签 java database memory-management out-of-memory heap-memory

我有一个内存问题,我完全理解原因,但不知道如何解决。我试图使用 -Xmx2g 标签并使堆大小更大,但似乎有一个隐藏的最大值。 (如果我使用 -Xmx512m,我会同时用完空间)。

假设我有 2 个对象,一个区域和一个用户。我的 Area 对象包含用户的 ArrayList:

public class Area {
      int numUsers;
      ArrayList<User> userList;
}

我的 User 类包含 friend 的 ArrayList:

public class User {
      int userID;
      int numFriends;
      ArrayList<User> friends;
}

仅使用一个区域,有 100 万用户,每个用户平均有 200 个 friend ,我在创建大约 680,000 个用户后用完了堆空间。显然,如果我将 friend /用户的平均数量降低到接近 100,我就可以将所有这些对象存储在堆中。

如果我想在一个区域模拟 200 万用户怎么办?还是数百个区域的?

有了这么多数据,数据库是使用这些信息进行模拟的唯一可行方法吗?

最佳答案

只有当您能够承受 100.000 倍的随机访问性能损失时,磁盘/数据库才是解决方案(您可能有很多系统使用数据库)。您可以使用专门的数据结构做得更好。为完全连接的子网做一些特殊的事情可能会节省很多空间。

关于java - 使用巨大的 ArrayLists,Java OutOfMemoryError : Java heap space. .. 使用 db?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661963/

相关文章:

sql - 数据库表列名称

ios - Firebase-Swift : How to add every created user to a friends list when created?

python - 如何将 Django 连接到 MongoDB 数据库?

objective-c - 这个 objective-c 代码会导致内存泄漏吗?

linux - 从 CMA(连续内存分配器)区域迁移页面失败

java - 有没有办法在Java中 "clean"接受 header ?

java - 检索 HashMap 中的列表。

java - 仅允许某些类使用 System.exit

c - 除了 linux 中的 buddy allocator 之外,是否有不同的内存分配路径?

java - java中从一个套接字线程向所有现有套接字线程广播数据