【发布时间】:2015-03-04 05:53:36
【问题描述】:
我正在阅读Java concurrency in Practice,在下面的段落中有点迷失了,关于可以在 Java 中在 32 位机器中创建的线程数:
在 32 位机器上,一个主要的限制因素是地址空间 线程堆栈。每个线程维护两个执行堆栈,一个用于 Java 代码和一个本地代码。典型的 JVM 默认值会产生 组合堆栈大小约为半兆字节。 (你可以改变这个 使用 -Xss JVM 标志或通过 Thread 构造函数。)如果 你将每个线程的堆栈大小分成 232,你得到一个 限制为几千或几万个线程。 其他因素(例如操作系统限制)可能会施加更严格的限制。
这是什么意思? 232 数从何而来?如果 Thread 类中没有将堆栈大小作为参数的构造函数,我如何更改 Thread 构造函数中的堆栈大小?
【问题讨论】:
-
2^32 值是可用虚拟地址空间的大小。
-
您所说的 232 实际上是 2^32。现在这个错字已经修正,您还有疑问吗?
-
哦,我的上帝,在我的 pdf 中,它被读作 232,感谢您纠正错字! :)
-
该段的语法似乎被破坏了。我同意它的解释,“如果你将理论上的最大地址空间除以最小堆栈大小,那么......”(但是从技术上讲,当你考虑段时,这是不正确的)。尽管如此,拥有这么多线程还是个坏主意。
标签: java multithreading concurrency