在32位计算机中可以用Java创建的线程数

时间:2015-01-06 14:29:44

标签: java multithreading concurrency

我正在阅读Java concurrency in Practice并且在下面的段落中有点丢失,关于可以在32位机器中用Java创建的线程数:

  

在32位机器上,一个主要的限制因素是地址空间   线程堆栈。每个线程维护两个执行堆栈,一个用于   Java代码和本机代码。典型的JVM默认值为a   组合堆栈大小约为半兆字节。 (你可以改变这个   使用-Xss JVM标志或通过Thread构造函数。)如果   你将每个线程堆栈大小分成2个 32 ,你得到一个   数千或数万个线程的限制。   其他因素,如操作系统限制,可能会施加更严格的限制。

这是什么意思? 2 32 号码来自哪里?如果没有构造函数将堆栈大小作为Thread类中的参数,我如何在Thread构造函数中更改堆栈大小?

2 个答案:

答案 0 :(得分:3)

图2 32 是对32位进程的address space大小的硬性限制。 “32位进程”表示32位用于表示每个地址,因此最多可以有2个 32 个不同的地址。

该段落说,因为每个线程必须保留大约512 * 1024个地址,仅用于线程'堆栈,因为地址数量有限,所以只能有这么多线程。

请注意,2 32 是理论上的定义限制。实际上,如果操作系统将3/4可用于32位进程,您可能会认为自己很幸运。

答案 1 :(得分:1)

  1. 有一个constructor将堆栈大小作为参数。

  2. 2^32是虚拟地址空间的大小。