我正在阅读Java concurrency in Practice并且在下面的段落中有点丢失,关于可以在32位机器中用Java创建的线程数:
在32位机器上,一个主要的限制因素是地址空间 线程堆栈。每个线程维护两个执行堆栈,一个用于 Java代码和本机代码。典型的JVM默认值为a 组合堆栈大小约为半兆字节。 (你可以改变这个 使用-Xss JVM标志或通过Thread构造函数。)如果 你将每个线程堆栈大小分成2个 32 ,你得到一个 数千或数万个线程的限制。 其他因素,如操作系统限制,可能会施加更严格的限制。
这是什么意思? 2 32 号码来自哪里?如果没有构造函数将堆栈大小作为Thread类中的参数,我如何在Thread构造函数中更改堆栈大小?
答案 0 :(得分:3)
图2 32 是对32位进程的address space大小的硬性限制。 “32位进程”表示32位用于表示每个地址,因此最多可以有2个 32 个不同的地址。
该段落说,因为每个线程必须保留大约512 * 1024个地址,仅用于线程'堆栈,因为地址数量有限,所以只能有这么多线程。
请注意,2 32 是理论上的定义限制。实际上,如果操作系统将3/4可用于32位进程,您可能会认为自己很幸运。
答案 1 :(得分:1)
有一个constructor将堆栈大小作为参数。
2^32
是虚拟地址空间的大小。