最近碰到以前做的一款游戏要移植繁体版,测试下来发现有一定几率出现程序异常,仔细看了一下,应该是内存不足造成的,可能是移植繁体版的时候有些图片尺寸加大了些,导致本来很紧张的内存在特定机器上溢出。可是为什么不是每次都溢出呢,而且我看了代码,不用的图片都会及时回收,那问题出在那里呢?
后来突然想起可能是把图片置null之后执行了System.gc(),但是gc没有按期望的运行,导致内存没回收干净的情况下又执行了下面的代码。载入了图片,造成瞬间内存峰值过高,由于System.gc()的回收内存时间上的不确定性导致并不是每次都会出错,后来在System.gc()后加上了Thread.yield()让gc有机会回收内存,之后测试了10多遍都没出过类似问题。