Reading through some answers of SO and articles, My understanding is :
The answer is stack. All local variable (final or not) stored into the stack and go out of scope when the method execution is over.
But about final variable JVM take these as a constant as they will not change after initiated . And when a inner class try to access them compiler create a copy of that variable (not that variable it self) into the heap and create a synthetic field inside the inner class so even when the method execution is over it is accessible because the inner class has it own copy.
so does it finally means that final variables are stored in finally Stack memory Area?
final variable also stored in stack but the copy that variable which a inner class have stored in heap.
synthetic field are filed which actually doesn't exist in the source code but compiler create those fields in some inner classes to make those field accessible. In simple word hidden field.
References :