提问人:Gestalt 提问时间:10/1/2023 更新时间:10/1/2023 访问量:97
堆空间/非堆空间内存对 JVM 进程的可能线程数的影响
Impact of heap space / non heap space memory on number of possible threads for a jvm process
问:
根据一些博客文章和stackoverflow问题,我得出了以下结论:
我没有考虑堆大小对我的应用程序可以创建的线程数的影响,就像 SO 问题中的答案所建议的那样。
有没有一个简单的 jvm 属性允许我配置可用于创建新线程的最大内存?我认为我无法证明增加 -Xmx 或任何其他未明确用于线程创建的内存部分以增加我的应用程序中的线程数量是合理的,但我似乎找不到这样的 jvm 属性。
有问题的 JVM 是 openjdk 8 (hotspot) 1.8。
答:
0赞
Yahor Barkouski
10/1/2023
#1
在 OpenJDK 8 中,没有直接的 JVM 属性来专门为线程创建配置最大内存。用于线程堆栈的内存是进程本机内存的一部分,进程可以使用的总本机内存由操作系统管理。
所以你对参数的看法是正确的——它控制着最大堆大小,但不影响可用于线程创建的本机内存。需要注意的是,如果您的应用程序使用较少的堆内存,则假设系统的总内存是固定的,则可能会有更多的本机内存可用于线程创建 - 也许您可以尝试这样做。-Xmx
所以是的,这里没有一个直接的 JVM 属性来专门控制用于线程创建的总内存。
评论
1赞
Tim Moore
10/1/2023
另一方面,大多数线程将分配内存来执行它们执行的任何特定于应用程序的工作。因此,堆大小也以这种方式限制了线程的数量:运行的并发线程越多,它们消耗的堆就越多。在变得有害之前,您可以并发运行的线程数的实际限制取决于许多交互因素。
0赞
Gestalt
10/8/2023
感谢您抽出宝贵时间。Hotspot 1.8 以外的某些 JDK 实现是否存在此类属性?
评论