我正在尝试编写一个填字游戏生成器,使用给定的字典txt文件和给定的模式txt文件。基本思路是使用DFS算法。问题在于当字典文件非常大(约50000个单词)时会出现问题,然后我收到以下错误信息:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道我的程序中有一部分浪费了内存,但我不知道它在哪里、如何找到它以及如何修复它。
我正在尝试编写一个填字游戏生成器,使用给定的字典txt文件和给定的模式txt文件。基本思路是使用DFS算法。问题在于当字典文件非常大(约50000个单词)时会出现问题,然后我收到以下错误信息:
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded
我知道我的程序中有一部分浪费了内存,但我不知道它在哪里、如何找到它以及如何修复它。
它是否真的会浪费内存?如果你正在加载一个庞大的字典,那么你可能只需要增加JVM内存设置(JVM有一个最大内存分配-取决于您的平台,并可配置)。
例如:
$ java -Xmx512m ....
将JVM的最大内存分配增加到512m。
如果您认为存在内存泄漏(由于引用未被释放而导致垃圾回收未启动),那么像YourKit这样的分析工具可能会有所帮助。注意,这不是免费的,但试用版可能会帮助您解决问题。
While(condition){
String s="tttt";
}
这应该被避免,因为它浪费了大量的内存。
大型字典...嗯...是否有将其直接存储在JVM内存中的绝对要求?
像我这样懒惰的人会将其存储在数据库中(甚至可能是内存中的数据库?例如Hypersonic),将搜索列表的责任转移到数据库,而我的程序则专注于创建有趣的对称黑白方块组合 :)
只是一个想法。