在“深入理解 Java 虚拟机(第 2 版)- 2.4.2 虚拟机栈和本地方法栈溢出”中,它说:
关于虚拟机栈和本地方法栈,在 Java 虚拟机规范中描述了两种异常:
- 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出 StackOverflowError 异常。
- 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemoryError 异常。
关于“如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出 StackOverflowError 异常”,我查阅了What is the maximum depth of the java call stack? - Stack Overflow,其实根本没有"maximum depth of the java call stack"这个东西。在memory leaks - What is a StackOverflowError? - Stack Overflow中,Varun 的回答说“If there is no space for a new stack frame then, the StackOverflowError is thrown by the Java Virtual Machine (JVM).”。
关于“如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出 OutOfMemoryError 异常”,在java - JVM option -Xss - What does it do exactly? - Stack Overflow中,Adam Adamaszek 的回答说“OutOfMemoryError: unable to create new native thread (too many threads, each thread has a large stack)”。
书中所说的内容是不是不太正确?或者说不太容易理解?
关于 StackOverflowError 和 OutOfMemoryError 的定义,"StackOverflowError: the stack size is greater than the limit, OutOfMemoryError: unable to create new native thread"是正确的。对吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.