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

可在32位计算机中用Java创建的线程数,java,multithreading,concurrency,Java,Multithreading,Concurrency,我正在阅读下面的一段内容,关于32位机器中可以用Java创建的线程数量,我有点不知所措: 在32位机器上,一个主要的限制因素是 线程堆栈。每个线程维护两个执行堆栈,一个用于 Java代码,一个用于本机代码。典型的JVM默认值会产生 组合堆栈大小约为半兆字节。(你可以改变这个 使用-Xss JVM标志或通过线程构造函数。)如果 将每个线程的堆栈大小划分为232,得到一个 限制几千或上万个线程。 其他因素,如操作系统限制,可能会施加更严格的限制 这是什么意思?232号码是从哪里来的?如果Thread

我正在阅读下面的一段内容,关于32位机器中可以用Java创建的线程数量,我有点不知所措:

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

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

  • 有一个函数将堆栈大小作为参数

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

  • 图232是对32位进程大小的硬限制。“32位进程”意味着32位用于表示每个地址,因此最多可以有232个不同的地址

    这段话的意思是,由于每个线程必须为线程的堆栈保留大约512*1024个地址,因此由于地址的数量是有限的,所以只能有这么多线程


    请注意,根据定义,232是理论极限。在实践中,如果OS使3/4的可用性达到32位进程,您可能会认为自己是幸运的。

    2 ^ 32值是可用的虚拟地址空间的大小。实际上,您所谈论的232个是2 ^ 32。你现在还有问题吗?我的天啊,在我的pdf文件中,它读作232,谢谢你纠正了这个错误!:)那一段的语法似乎有误。我同意这样的解释,即“如果你将理论上最大的地址空间除以最小的堆栈大小,那么……”(但从技术上讲,当你考虑段时,这是不正确的)。然而,无论如何,拥有这么多线程是个坏主意。