【发布时间】:2011-03-25 05:43:19
【问题描述】:
我正在努力将 Roguelike 地牢冒险游戏移植到 Android。 http://tyrant.sourceforge.net
当我启动我的程序时,我首先初始化世界和它的所有对象。我有一个包含 300 万个(!)HashMap 条目的类。当我尝试初始化该类时,在我的 Android 上运行需要 5 分钟以上,这是一个非常不可接受的时间长度。类初始化后,游戏运行良好且非常有趣。
所以我想我可以序列化这个对象并在运行时重新加载它。我将它序列化,并打包成 .APK 文件,大小超过 5MB。 Android 只是窒息并给我一个 OutOfMemory 错误。
我可以反序列化部分类(800KB),然后动态创建其余条目。这仍然需要几分钟才能完成,它仍然需要从序列化数据中创建 300 万个条目。但我知道我的序列化代码运行良好。
如何将这个非常大的类文件存储在 Android 上并稍后加载?我可以探索哪些选项?让我的用户等待 5 分钟让应用程序启动一点都不好。
这是原始源代码中令人不安的类: http://tyrant.cvs.sourceforge.net/viewvc/tyrant/tyrant/mikera/engine/Lib.java?view=markup
麻烦的是:
private transient Map types;
(我知道这是暂时的)
它最终存储了超过 300 万个条目!
【问题讨论】:
标签: java android serialization out-of-memory