Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 堆栈帧大小是否有上限_Java_Jvm_Out Of Memory_Heap Memory_Stack Memory - Fatal编程技术网

Java 堆栈帧大小是否有上限

Java 堆栈帧大小是否有上限,java,jvm,out-of-memory,heap-memory,stack-memory,Java,Jvm,Out Of Memory,Heap Memory,Stack Memory,我们有一个堆内存不足错误,但(出于好奇)单个堆栈的大小是否有一个等效的限制?如果不是,那么如果堆栈帧需要多余的内存(如数千个局部变量等),如何防止这种溢出 如果线程请求的堆栈空间大于其可用空间,则会收到StackOverflowerError 单个堆栈帧的大小在编译时确定,并与方法代码一起存储在类文件中。实际上有两个字段:局部变量数组的大小和操作数堆栈的深度。两者都限于2^16-1 我认为,分配给运行时堆栈的空间是用于单个执行线程上的所有堆栈帧的 大多数操作系统的默认大小不同。看看这些文件。如

我们有一个堆内存不足错误,但(出于好奇)单个堆栈的大小是否有一个等效的限制?如果不是,那么如果堆栈帧需要多余的内存(如数千个局部变量等),如何防止这种溢出

如果线程请求的堆栈空间大于其可用空间,则会收到StackOverflowerError


单个堆栈帧的大小在编译时确定,并与方法代码一起存储在类文件中。实际上有两个字段:局部变量数组的大小和操作数堆栈的深度。两者都限于2^16-1

我认为,分配给运行时堆栈的空间是用于单个执行线程上的所有堆栈帧的

大多数操作系统的默认大小不同。看看这些文件。如果需要,可以使用
-Xss
JVM参数来增加大小


每个线程都有自己的堆栈空间分配。您可以使用Java命令行上的-Xss选项设置此分配的大小;默认值在不同的平台上有所不同,但始终是“每个线程”的值


限制是每个线程的内存量,而不是堆栈上的条目数。

我猜当
堆栈帧数
更多时,会发生堆栈溢出。我说的是使用大量空间的
单个堆栈
。当堆栈上剩余的空间小于所需的空间时,就会发生堆栈溢出;并非所有堆栈帧的大小都相同。类文件规范对局部变量的数量有限制;如果超过这个限制,这将是一个编译时错误。堆栈帧的大小由编译器计算。数组存储在堆上,而不是堆栈上。嗯,是的,你完全正确。我不知道我在想什么。我将删除最后一句话。