请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如果count++是一个耗时操作则会出现内存溢出错误

我尝试着设置信号量为500,总请求次数为5000,然后在add()方法里休眠100毫秒,这样运行起来后导致了内存溢出,我猜测这个信号量设置后如果有超过信号量的请求进来,就会导致内存溢出,望老师解惑

https://img1.sycdn.imooc.com//szimg/5b35069f0001ef1004170147.jpg

https://img1.sycdn.imooc.com//szimg/5b3506a000011ea006600146.jpg


正在回答

1回答

你好,并不是你猜测的那样,这里因为有sleep存在,导致同一时间是有大量线程存在的,而每个线程都要占申请相应的内存空间和资源,这时候就可能出现操作系统已经无法提供足够的内存和资源了,同时还有一种可能,就是操作系统设置了应用创建线程的最大数量,并且已经达到了最大允许数量

0 回复 有任何疑惑可以回复我~
  • 提问者 kenja #1
    非常感谢!感谢老师的解答,我理解错了信号量的作用,以为达到数量后线程会停止继续创建,但这里信号量的限制是允许同一时间规定数量的线程活动,超过则刮起,所以当进行耗时操作后,线程池会因为前面的线程没有执行完而创建了比之前更多的线程数,导致了oom
    回复 有任何疑惑可以回复我~ 2018-06-29 20:28:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信