【发布时间】:2016-02-16 20:13:30
【问题描述】:
我想限制 Java VM 可用的线程/进程数,类似于设置可用内存的方式。我希望能够将其指定为仅使用 1 个线程或任意数量。
注意:我无法在代码中设置它,因为我想限制的代码是一个我无法修改源代码的库。因此,它必须是对虚拟机级别施加的硬性上限。 (或者,如果您可以对可以覆盖库的应用程序本身施加线程限制?)
注意 2:这样做的目的是进行性能测试,以限制我要测试的库,看看当它可以访问不同数量的 CPU/线程时它的性能如何。
谢谢!
【问题讨论】:
-
你为什么要这样做?
-
@Matt Timmermans 一些 JVM 在无法再创建一个线程时的行为是抛出
OutOfMemoryError'。 -
您可以在一个 CPU 上拥有任意数量的线程。几乎所有时候,如果一个库试图创建一个线程并且不能,那么它将无法工作。如果您有一个创建一大堆线程的库,那么它可能有一个配置选项来设置它将使用的最大数量。
-
为什么要限制Java线程的数量?如果您想要进行与实际场景有任何相似之处的性能测试,您应该限制 Java VM 可用的内核数量(可能还有亲和力)。
-
这是操作系统的任务,而不是 JVM。如果你使用linux,可以使用专用的cgroup。
标签: java multithreading jvm