java.lang.OutOfMemoryError: unable to create new native thread

出现问题:

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过了,就不用再创建新的了,所以压力会小一些,然后。。。就成功了。

这就好比策划跟你说,这里有十个需求,来来来,你给把它们做完。我相信,如果旁边有菜刀的话,你肯定会毫不犹豫的拿起来,架到策划的脖子上。

但如果策划跟你说,我这里有一个新的需求,需要你帮着做一下。然后你昨晚了,策划满脸崇拜的说,你真是太棒了,做的真好。然后又给你一个需求,你又做完了。就这样一次一次,等你突然发现,这不就是之前的那十个需求吗,这时你已经把这十个都做完了。

这样想想,还是决定把手里的菜刀放下了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值