Question

Here's my understanding.

In C programming, if I do int a then that a is created on stack and thus the memory is taken from stack. Heap plays no part here.

But if I do something like

int *a;
a=(int*)malloc(sizeof(int));

and dynamically allocate the memory, then the reference variable will be placed on stack, but the memory it points to will be on the heap.

Am I correct with my understanding?

Now, I picked up this book on java that says

Whenever you need an object, you simply write the code to create it by using new, and the storage is allocated on the heap when that code is executed.

So there's no way of creating objects on Stack in Java?

I guess, the primitive data types can still be placed on stack, but I am concerned about the Objects.

Was it helpful?

Solution

There is no way to create objects on the stack in Java. Java also has automatic garbage collection, so you don't have any way of deleting objects. You just let all references to them go out of scope and eventually the garbage collector deals with them.

OTHER TIPS

That is correct. Objects are stored on the heap. The stack contains primitive values like int and double (from local variables) and references to objects (again from local variables).

The whole premise of your question is false: in Java you don't have any control over where the objects will be allocated. Some are indeed stack-allocated, but you'll never notice the difference.

What is fundamentally different between Java and C is that in Java the value of a variable can never be the object itself, whereas in C the value can be the struct itself, with no indirection. You can pass such structs by value to other functions and there is no equivalent of that in Java.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top