Usage of stacks and heaps in object-oriented programming. Reasons?
I am not sure if choosing stacks/heap is related with object oriented programming. The stacks are adopted by many programming languages because they are perfect fit for scoped variables, e.g. create new stack frame at the beginning of a function, and discard it when leaving. They don't always store reference variables, but actual objects. In C++, you can allocate objects on stack and they will be destroyed when the control exits the scope. 
While stacks are often used with scopes, which determines the variables lifetime, heaps are used for objects that live longer without predefined lifetime.