以下问题很常见,并且与OutOfMemoryError有关:在JVM线程创建过程和JVM线程容量期间无法创建新的本机线程问题。 这也是我向新技术候选人(高级职位)提出的典型面试问题。 我建议您在查看答案之前尝试提供自己的答复。
题:
为什么不能通过-Xmx扩展Java堆空间容量来增加JVM线程容量(线程总数)?
回答:
Java线程创建过程要求本机内存可用于JVM进程。 通过–Xmx参数扩展Java堆空间实际上会减少 Java线程的容量,因为该内存将从本地内存空间“窃取”。
- 对于32位JVM,Java堆空间与本机堆处于竞争状态,包括线程容量
- 对于64位JVM,线程容量将主要取决于您的操作系统物理和虚拟内存的可用性以及当前与操作系统进程相关的调整参数。
为了更好地理解此限制,我现在向您建议以下视频教程。 您还可以从下面的链接下载示例Java程序:
https://docs.google.com/file/d/0B6UjfNcYT7yGazg5aWxCWGtvbm8/edit
参考: QOTD:来自Java EE支持模式和Java教程博客的JCG合作伙伴 Pierre-Hugues Charbonneau的Java Thread vs. Java Heap Space 。
翻译自: https://www.javacodegeeks.com/2013/01/qotd-java-thread-vs-java-heap-space.html