首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"java.lang.OutOfMemoryError:无法创建新的本机线程“在Mac上有64位和8G字节!

"java.lang.OutOfMemoryError:无法创建新的本机线程“在Mac上有64位和8G字节!
EN

Stack Overflow用户
提问于 2011-05-26 05:53:28
回答 2查看 7.8K关注 0票数 1

可能重复:

Can't get past 2542 Threads in Java on 4GB iMac OSX 10.6.3 Snow Leopard (32bit)

我正在我的Mac 64位上运行一个线程密集型应用程序,内存为8G字节。我尝试更改VM参数的选项(进入Eclipse行),但对于2500个线程,我总是得到“线程中的异常”主“java.lang.OutOfMemoryError:无法创建新的本机线程”。

当它崩溃时我看到堆内存只有100兆字节..。

怎么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-26 06:01:55

线程的最大数量是有限制的,这与实际拥有多少内存无关。见this question

票数 9
EN

Stack Overflow用户

发布于 2011-05-26 06:03:02

JVM的大多数实现在创建数千个线程后都会遇到限制。虽然可能有一些方法可以对此进行优化(比如使用-Xss来减小堆栈大小),但是除非您有数千个处理器,否则没有什么好的理由可以使用数千个线程。

相反,您应该考虑使用更少的线程来提高效率。如果CPU密集的话,关闭处理器数量的东西将是理想的。如果它们在非CPU上被阻塞,那么比处理器更多的线程可能会有所帮助。

您可以使用ExectorService来管理线程池。例如:

代码语言:javascript
复制
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService service = Executors.newFixedThreadPool(processors);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6134269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档