以下問題很常見,并且與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