我一直在尝试解决我的java代码中的堆栈溢出异常,这是由于我正在进行的一些递归而发生的。我知道在Eclipse IDE中增加堆栈大小可以解决这个问题。我想知道,如果这个异常,就像JVM一样,在我们创建可执行文件并运行时发生。操作系统不会处理该可执行文件所需的内存吗?
答案 0 :(得分:0)
运行应用程序时使用了两种不同类型(概念上)的内存。
堆是创建和存储对象实例的地方。这是内存的主要部分,它也是由JVM收集的垃圾,操作系统确实负责将此内存分配给您的应用程序。话虽如此,JVM总是以可能从OS获得的最大内存量的某种配置启动(这是可配置的)。
第二种类型的内存称为堆栈,JVM在内部使用它来支持方法调用。调用方法时,传递给方法的参数将被放置在堆栈中,并在引用方法参数时引用。堆栈的另一种用法是方法局部变量(即您在方法中定义的变量)。
当你用完堆栈时会发生堆栈溢出(多么令人惊讶)。由于其使用的性质,堆栈比堆更受限制,不应滥用。如果你有遍历整个树/层次结构的递归方法,并且你得到了一个带有更大输入的堆栈溢出异常的点,那么它肯定是你应该将递归转换为迭代的标志(参见:{{3 }})