Overview of the Java Stack
Before we dive into the stack walker, let's start by covering the Java Stack. This is basic stack information, not specific to the stack walker.
The Java runtime has a class named Stack, which can be used to store objects using the last-in-first-out (LIFO) policy.
When arithmetic expressions are calculated they are done using a stack. If we add A and B in our code first A is pushed on the Operand Stack, then B is pushed on the Operand Stack and finally the addition operation is executed, which fetches the two topmost elements of the Operand Stack and pushes the result, A + B there.
The JVM is written in C and executes calling C functions and returning from there. This call-return sequence is maintained using the Native Method Stack just like any other C program.
Finally, when the JVM creates a new thread it also allocates a call stack containing frames that in turn contain the local variables, reference to the previous frame, and reference to the class that contains...