出现问题:
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
at TestNativeOutOfMemoryError.main(TestNativeOutOfMemoryError.java:20)
心路历程(坎坷到了极点):
新手小白,最近在使用Android studio打包的时候遇到了这个问题,当时脑子里的第一印象就是Android studio的内存不够了,需要扩大内存,但是尝试的结果是,Not ok。看来我的问题并不是这个原因导致的。
(PS:大部分原因是因为内存不足导致,具体的解决办法网上有很多,当然也可以参考下面这个链接https://blog.csdn.net/kylinsoong/article/details/16879653)
由于当时我的思路全都在扩大内存上,结果尝试各种修改内存大小,最终的结果都是,Not OK。
好吧,看来是别的问题。
这时有个同事过来告诉我说,如果不是内存的问题的话,网上说的最多的就是gradle的版本的问题,或者是gradle与Mac系统不兼容导致的。
当我听到这话的时候,内心是很绝望的。难道我为了打个Android包还需要再配置一台Windows系统,(也确实,在我同事的Windows上可以很好的运行。)那太不现实了,而且如果真是这样的话,那就有点太坑了吧。我不甘心啊,决定再找一找。
我又仔细看了一下工程,看到报出这个问题时候,刚好编译到mergeDebugAssets。而这个是在加载assets文件里的东西。我当时想到,会不会是我的assets文件里面的东西太多了,然后创建的线程太多了,导致内存不够用了呢?
于是我首先把assets文件里面的内容全部删除。运行了一遍,build successful。心中大悦,果然是这个理由,那我就一点一点加进去,看看Android studio能够承受到什么程度。
然后加一个文件进去,运行,successful,
再加两个,successful,
再加三个,还是successful,
最后我直接把剩下的几个文件全部加进去,然后运行。当时真的是一直向关二爷祈祷。结果。。。。。successful。
原来这个问题真的跟Mac系统有一定的关系。当总的内存是够的,但是一次让他创建太多的线程的话,他真的会罢工的。但是当你分批运行的话,有些已经build过了,就不用再创建新的了,所以压力会小一些,然后。。。就成功了。
这就好比策划跟你说,这里有十个需求,来来来,你给把它们做完。我相信,如果旁边有菜刀的话,你肯定会毫不犹豫的拿起来,架到策划的脖子上。
但如果策划跟你说,我这里有一个新的需求,需要你帮着做一下。然后你昨晚了,策划满脸崇拜的说,你真是太棒了,做的真好。然后又给你一个需求,你又做完了。就这样一次一次,等你突然发现,这不就是之前的那十个需求吗,这时你已经把这十个都做完了。
这样想想,还是决定把手里的菜刀放下了。