一次奇怪的StackOverflowError问题查找之旅
一次奇怪的StackOverflowError问题查找之旅 公司最近买了一套老代码,在测试环境部署的时候发生了 nested exception is java.lang.StackOverflowError 的异常,当时看到这个异常首先想到是栈内存溢出,网上给出的解决办法就是加栈内存大小就行。趁着这个机会也了解一下什么是Java虚拟机栈。 Java虚拟机栈 我们想要解决 StackOverflowError 问题就得了解其内部工作机制,首先我们需要了解Java虚拟机栈是什么。了解Java虚拟机栈之前我们先看一段代码。 public class TestStack { public static void main(String[] args) { a(); } public static void a(){ int a = 10; b(); } public static void b(){ int b = 10; } } 上面的一段代码非常简单,整体流程就是 先执行main()方法 执行main()方法调用的a()方法,并且赋值a=10 执行a()方法调用的b()方法,并赋值b=10 现在让我们了解上面一段简单流程情况下栈的动作流程,首先我们需要知道栈是每个线程独有的,而存放在栈里面的叫做栈帧,每进入一个方法就会有一个栈帧入栈的动作,即下面的黄色方块就是栈帧