【发布时间】:2011-06-07 09:53:39
【问题描述】:
我有一个内存问题,我完全理解原因,但不知道如何解决。我尝试使用 -Xmx2g 标记并使堆大小变大,但似乎有一个隐藏的最大值。 (如果我使用 -Xmx512m 我会同时用完空间)。
假设我有 2 个对象,一个区域和一个用户。我的 Area 对象包含用户的 ArrayList:
public class Area {
int numUsers;
ArrayList<User> userList;
}
我的 User 类拥有一个朋友的 ArrayList:
public class User {
int userID;
int numFriends;
ArrayList<User> friends;
}
仅使用单个区域,有 100 万用户,每个用户平均有 200 个朋友,在创建大约 680,000 个用户后,我用完了堆空间。显然,如果我将朋友/用户的平均数量降低到接近 100,我可以将所有这些对象存储在堆中。
如果我想模拟一个区域内的 200 万用户怎么办?还是数百个地区的?
有了这么多数据,数据库是使用这些信息进行模拟的唯一可行方法吗?
【问题讨论】:
-
是的,将这种大小的图表放入单个 VM 会变得很拥挤。不,除了关系数据库之外,还有很多方法可以保存和处理这么多数据。哪种方式适合您的情况取决于您要对数据做什么,以及您的性能要求是什么。您甚至可以根据需要创建数据,而无需将其完整存储?
-
完整存储它的需要是最终有多个区域,其中区域 1 的一些用户可以有区域 42 的朋友。我想那时将它存储在内存中不会是一种选择.在这一点上,我只需要对这些信息进行建模。该项目需要一个现实的社交网络模型。有什么我应该研究的结构,你知道吗?
-
存储在内存中可以走很远。目前的内存定价为 100 欧元/8GByte,大多数系统不应基于磁盘。
标签: java database memory-management out-of-memory heap-memory