我有一个内存问题,我完全理解原因,但不知道如何解决。我试图使用 -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/