如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误

Posted

技术标签:

【中文标题】如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误【英文标题】:How can I reproduce EXCEPTION_STACK_OVERFLOW error in Java 【发布时间】:2011-10-01 04:52:53 【问题描述】:

PS:我不是在谈论优雅地关闭 JVM 的 Java 中的 ***Error 错误。我说的是 error.log 中的 EXCEPTION_STACK_OVERFLOW 会导致 JVM 崩溃。

【问题讨论】:

请仔细检查你的PS,我猜在“am”和“talking”之间有一个很小的not... 目前我发现的大多数EXCEPTION_STACK_OVERFLOW 错误都发生在JVM 之外的本机代码中...如果内部 有一个错误,那将是一个错误并需要修复。 不是确切的答案,但***.com/questions/65200/how-do-you-crash-a-jvm有一些人 【参考方案1】:

到目前为止,我发现的大多数 EXCEPTION_STACK_OVERFLOW 错误都发生在 JVM 之外的本机代码中。 JVM 内部崩溃值得报告错误,并将得到修复。还是您需要(未知)漏洞利用?

因此,最简单且最可靠的方法是编写一个包含一些导致 JVM 崩溃的代码的本机库,然后使用 JNI 调用它。

(一般的答案,我其实不知道该怎么做。不能只用java代码来完成;))

【讨论】:

+1。我只能做+1,但想做+100以确认我的理解。大多数其他人都提到了 ***Error!【参考方案2】:
public static void ***()

     ***();

调用它,然后享受吧:D

【讨论】:

这会导致 ***Error 而不是 JVM 崩溃!【参考方案3】:

吹栈:

public static void main(String[] args) 
    main(null);

吹堆:

public static void main(String[] args) 
    List<String> list = new ArrayList<String>();
    while(true) list.add(new String("boom"));

【讨论】:

以上都不会导致JVM崩溃。第一个会导致 ***Error,第二个会导致 OutOfMemoryError。

以上是关于如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误的主要内容,如果未能解决你的问题,请参考以下文章

Java VM:1.6.0_17 和 1.6.0_18 上的可重现 SIGSEGV,如何报告?

JVM-OutOfMemory异常重现

Java实战分布式锁实战之重现高并发场景一

如何重现静默断开的 TCP/IP 连接?

在 Oracle 中执行 DELETE 查询时如何重现异常

如何在 NSPredicate 中重现 MATCHES 以查询 Realm?