如何在不使用新的java.util.concurrent包的情况下处理Java中的数千个线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在不使用新的java.util.concurrent包的情况下处理Java中的数千个线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1070字,纯文字阅读大概需要2分钟。
内容图文
![如何在不使用新的java.util.concurrent包的情况下处理Java中的数千个线程](/upload/InfoBanner/zyjiaocheng/764/fa50cc107559470bb20db1adddba9dc9.jpg)
我有一种情况需要从第三方API创建数千个类的实例.每个新实例都会创建一个新线程.一旦线程超过1000,我就开始得到OutOfMemoryError.但我的应用程序需要创建30,000个实例.每个实例始终处于活动状态.该应用程序部署在一个64位的Linux机器上,内存为8GB,我的应用程序只有2GB.
第三方库的工作方式,我不能使用新的Executor框架或线程池.
那么我该如何解决这个问题呢?
请注意,使用线程池不是一个选项.所有线程都在一直运行以捕获事件.
Linux机箱上的正弦内存大小不在我的控制范围内,但如果我可以选择在32GB系统中为我的应用程序提供25GB可用,那么这会解决我的问题还是JVM仍会窒息?
上述方案是否有一些最佳的Java设置?
系统使用Oracle Java 1.6 64位.
解决方法:
我同意Ryan的回答.但问题比他的分析所暗示的还要糟糕.
Hotspot JVM具有硬连线的最小堆栈大小 – Java 6为128k,Java 7为160k.
这意味着即使您将堆栈大小设置为可能的最小值,您也需要使用大约两倍的分配空间…仅用于线程堆栈.
此外,拥有30k本机线程可能会导致某些操作系统出现问题.
我告诉你,你的任务是不可能的.您需要找到一种不需要同时拥有30k线程的替代设计.或者,您需要一台更大的机器来运行该应用程序.
参考:http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2012-June/003867.html
内容总结
以上是互联网集市为您收集整理的如何在不使用新的java.util.concurrent包的情况下处理Java中的数千个线程全部内容,希望文章能够帮你解决如何在不使用新的java.util.concurrent包的情况下处理Java中的数千个线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。