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...