My understanding is that call stack is supposed to keep track of which codes are getting executed, and memory heap is where the data is stored. However, I recently discovered that call stack also store data (such as primitive types)? If the purpose of heap is to store data, why are primitives stored in call stack?