gpt4 book ai didi

java - 如何在不使用新的 java.util.concurrent 包的情况下在 Java 中处理数千个线程

转载 作者:搜寻专家 更新时间:2023-11-01 04:02:59 24 4
gpt4 key购买 nike

我有一种情况需要从第三方 API 创建一个类的数千个实例。每个新实例都会创建一个新线程。一旦线程超过 1000,我就开始出现 OutOfMemoryError。但是我的应用程序需要创建 30,000 个实例。每个实例始终处于 Activity 状态。该应用程序部署在 64 位 linux 机器上,内存为 8gb,我的应用程序只有 2gb 可用。

第三方库的工作方式,我不能使用新的执行器框架或线程池。

那么我该如何解决这个问题呢?

请注意,使用线程池不是一种选择。所有线程一直在运行以捕获事件。

Linux 机器上的正弦内存大小不在我的控制范围内,但如果我可以选择在 32GB 的系统中为我的应用程序提供 25GB 的可用空间,这会解决我的问题还是 JVM 仍然会阻塞?

是否有针对上述场景的最佳 Java 设置?

系统使用Oracle Java 1.6 64位。

最佳答案

我同意 Ryan 的回答。但问题比他的分析表明的更严重。

Hotspot JVM 具有硬连线的最小堆栈大小 - Java 6 为 128k,Java 7 为 160k。

这意味着即使您将堆栈大小设置为可能的最小值,您也需要使用大约两倍于分配的空间……仅用于线程堆栈。

此外,拥有 30k 个 native 线程可能会在某些操作系统上引起问题。

我告诉你,你的任务是不可能完成的。您需要找到一种不需要同时拥有 30k 线程的替代设计。或者,您需要一台大得多的机器来运行该应用程序。


引用:http://mail.openjdk.java.net/pipermail/hotspot-runtime-dev/2012-June/003867.html

关于java - 如何在不使用新的 java.util.concurrent 包的情况下在 Java 中处理数千个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18263815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com