Thursday, 24 May 2012

Memory management in java



When Each time an object is created in java it goes to area of memory known as heap. The primitive variables like int and double are allocated in the stack. If they are local method variables and in the heap. if they are member variables like fields of a class. In java methods local variables are pushed into stack when a method is invoked and stack pointer is decremented when a method call is completed.
In a multi-threaded application each thread will have its own stack but will share the same heap. This is why care should be taken in your code to avoid any concurrent access issue in the heap space. The stack is thread-safe because each thread will have its own stack, but the heap is not thread safe unless guarded with synchronization through your code.
A method in stack is re-entrant allowing multiple concurrent invocations that do not interface with each other. A function is recursive if it calls itself. Given enough stack space, recursive method calls are perfectly valid in java though it is tough to debug. Recursive functions are useful in removing iterations from many sorts of algorithms. All recursive functions are re-entrant but not all re-entrant are recursive. Idempotent methods are methods, which are written in such a way that repeated call to the same method with the same arguments yield same results. For example clustered EJBs, which are written with idempotent methods, can automatically recover from a server failure as long as it can reach another server.

What is garbage collector?

When each time an object created in java, it goes into area of memory called as heap. The java heap is called the garbage collectable heap. The garbage collection cannot be forced. When garbage collector runs in low memory situations, it releases the memory allocated by an unreachable object. The garbage collector runs on a low priority daemon background thread. You can nicely ask the garbage collector to collect by calling Sysytem.gc() but you cannot force it.

What is unreachable object?

An object's life has no meaning unless something has reference to it. If you cannot reach it then you cannot ask it to something. Then the object becomes unreachable and the garbage collector will figure it out. Java automatically collects all the unreachable objects periodically and release the memory consumed by those unreachable objects to be used by the future reachable objects.

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...