据Oracle称,StackOverflowError是:
在发生堆栈溢出时抛出,因为应用程序过于严重.
我知道递归是什么,通常递归函数,如果没有正确终止,会导致StackOverflowError.为了检查StackOverflowError抛出之前发生的递归调用的数量,我写了这段代码:
package ErrorCases;
public class StackOverFlowError {
static int i=0;
void a()
{
//System.out.println("called "+(++i));
try{
++i;
a();
}catch(Error e)
{
System.out.println(e.getClass());
System.out.println(i);
}
}
public static void main(String[] args) {
new StackOverFlowError().a();
}
}
Run Code Online (Sandbox Code Playgroud)
在JVM抛出StackOverflowError之前,i给出递归调用计数的值a().每次运行
的价值i都不同,如:
output 1: class java.lang.StackOverflowError
10466
Output 2: class java.lang.StackOverflowError
10470
Run Code Online (Sandbox Code Playgroud)
我的疑问是?
在JVM抛出之前递归有多深
StackOverflowError?
一旦StackOverflowError投掷,我们可以恢复吗?
我最近遇到了"linux stack"和"linux stack size"的错误.我遇到了一个指导我尝试的博客
ulimit -a
Run Code Online (Sandbox Code Playgroud)
看看我的盒子的限制是什么,它被设置为8192kb默认值.
什么是"linux堆栈"?它是如何工作的,它存储了什么,它做了什么?
可能重复:
什么是堆栈溢出错误?
当我声明大小为4096*1024的大型数组时,就会发生这种情况
First-chance exception at 0x01382e97 in nsfclient.exe: 0xC00000FD: Stack overflow.
Unhandled exception at 0x01382e97 in nsfclient.exe: 0xC00000FD: Stack overflow.
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能在Visual Studio中声明大数组?
为什么我收到stackoverflow错误?
我的课 -
public class Tester {
int id;
Tester(int id){
this.id = id;
}
public String toString(){
String rep = "Hex: " + this + ", Id: " + this.id;
return rep;
}
}
Run Code Online (Sandbox Code Playgroud)
主要方法 -
class Driver{
public static void main(String [] args){
Tester t = new Tester(123);
System.out.println(t);
}
}
Run Code Online (Sandbox Code Playgroud)
错误 -
Exception in thread "main" java.lang.StackOverflowError
at java.lang.String.length(Unknown Source)
at java.lang.AbstractStringBuilder.append(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at java.lang.StringBuilder.<init>(Unknown Source)
at com.examscam.model.Tester.toString(Tester.java:13)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我是 Java 的初学者,我目前正在尝试解决树章节中的练习。
一棵树由这些节点组成。
在此处输入图像描述。一个节点保存一个对应于整数的值。除了位于树根的节点之外,一个节点始终只有一个其他节点引用它。如果一个节点在右边或左边没有子节点,那么对应的引用是null。左侧子树中任何子树的值都小于其父树的值,而右侧子树中任何子树的值都大于其父树的值。树的高度在 0 到 100 000 节之间。
我正在尝试实现一个find(int v)方法,v如果节点不存在,则返回保存该值的节点,然后 find 将必须返回null。
这是我一直在做的事情,但我有点迷茫:
class Node{
Node left, right;
int value;
public Node find (int v){
Node result = null;
if (this.left != null) result = find(v);
if (this.value == v) return this;
if (result == null && this.right != null)
result = find(v);
return result;
}
public static void main (String[] args){
Node n = smallNode.find(8);
System.out.println(n);
n = …Run Code Online (Sandbox Code Playgroud) 我创建了带有 100 个字段 +- 的 scala case 类,当我尝试构建项目(使用 gradle)时,出现错误:
Cause: java.lang.StackOverflowError
at scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:698)
at scala.tools.nsc.typechecker.Typers$Typer.runTyper$1(Typers.scala:5396)
at scala.tools.nsc.typechecker.Typers$Typer.scala$tools$nsc$typechecker$Typers$Typer$$typedInternal(Typers.scala:5423)
Run Code Online (Sandbox Code Playgroud)
我正在使用 scala 2.11 ,发现过去有 22 个字段的限制。但它是固定的。
那么为什么构建失败呢?(我试图增加 -Xss20m ,但没有帮助)
interface CrudRepo {
fun save()
fun saveAll()
}
interface CustomRepo : CrudRepo {
fun validate()
override fun save() {
validate()
saveAll() // can call saveAll, I need to call save on CrudRepo here
}
}
Run Code Online (Sandbox Code Playgroud)
CrudRepo有一个不做验证的功能保存。我决定编写自己的接口来扩展CrudRepo和覆盖 save 方法。在我自己的定义,save我想验证,然后调用save的方法CrudRepo。
我应该尝试什么?
我有一个递归函数的例子,我不明白的是事情发生的顺序:
function power(base, exponent) {
if (exponent == 0)
return 1;
else
return base * power(base, exponent - 1);
}
Run Code Online (Sandbox Code Playgroud)
函数何时返回值,在所有过程结束时或每次?
对于Java函数中的语句:
Xxx xxx = new Xxx() {
public Abc abc(final Writer out) {
return new SomeFunction(out) {
boolean isDone = false;
public void start(final String name) {
/* blah blah blah */
}
};
}
};
Run Code Online (Sandbox Code Playgroud)
哪个变量(包括函数)放在堆上,哪些变量放在堆栈上?
我问这个的原因是JVM中的分段错误:
kernel: java[14209]: segfault at 00002aab04685ff8 rip 00002aaab308e4d0 rsp 00002aab04685ff0 error 6
Run Code Online (Sandbox Code Playgroud)
00002aab04685ff8并且00002aab04685ff0附近,似乎堆栈增长太快.我尝试研究这部分代码,并怀疑它是多次调用此函数时是否是问题的原因.如果堆被堆上的某些变量引用,堆栈是否可能被清除?
这是我第一次遇到这个错误.此代码基本上获取特定日期内销售的每件商品的总和.
有关解决此问题的任何提示吗?谢谢.
Run Code Online (Sandbox Code Playgroud)Statement statement = connection.createStatement(); String query = "SELECT itemcode, SUM(quantity) AS 'Total Sales Per Day' " + "FROM sales " + "WHERE real_pur_date = '" + date + "' " + "GROUP BY itemcode "; ResultSet rs = statement.executeQuery( query ); // this line gets the error / exception while( rs.next() ){ Vector row = new Vector(); row.add( rs.getString( "itemcode" ) ); row.add( rs.getInt( "Total Sales Per Day" ) ); dailyData.add( row ); } statement.close();
Exception in thread …Run Code Online (Sandbox Code Playgroud) java ×5
recursion ×2
stack ×2
c ×1
case-class ×1
heap ×1
javascript ×1
kotlin ×1
linux ×1
linux-kernel ×1
mysql ×1
scala ×1
scala-2.11 ×1
tree ×1