Java Memory Management and Garbage Collection
April 29, 2017
Categorised in: Java Core
Automatic Memory Management
- Objects are allocated memory automatically unlike in C or C++
- Objects are created in Heap Memory.
- Heap memory is a little slower than stack. But, heap is more dynamic.
- Complex objects are always stored in heap.
- If a variable references an object, it is retained i.e. it won’t be available for garbage collection.
In other words, as long as a variable can be address in code, the object will be available. - When all the references of object expire, it is eligible for garbage collection.
However, garbage collection decides when to do that.
Lifetime of References
- Local variables within method or code block expire with the end of its scope.
- Explicitly dereferenced variables with null keyword are eligible for garbage collection.
String tempStr = "Something"; tempStr = null; //this is dereferencing.
Here, the object tempStr might be available for sometime but if garbage collector picks it then it will not exist.
Garbage Collector
- Runs in its own thread.
- You might detect it in execution as a little pause while the program is executing.
- It can destroy dereferenced objects and reclaim their memory.
But it is not required to do that. - Programmer cannot make the garbage collector work.
- Programmer can request garbage collection, however there is no guarantee.
E.g. Methods like System.gc() and Runtime.gc() - If no memory is available for newly created object, then the system throws:
OutOfMemoryError (TIP: this is an exception)
What can you do?
- Lower the number of objects you create.
- Understand when objects are created.
- Try to re-use objects.
- Some important methods:
- Runtime.maxMemory()
- Runtime.totalMemory()
- Use command-line options to manage available heap memory:
- java -Xms256s HelloWorld (Sets initial heap size)
- java -Xmx256m HelloWorld (Sets maximum heap size)
- java -Xmn256n HelloWorld (Sets heap size for new objects)
Pratik Kataria is currently learning Springboot and Hibernate.
Technologies known and worked on: C/C++, Java, Python, JavaScript, HTML, CSS, WordPress, Angular, Ionic, MongoDB, SQL and Android.
Softwares known and worked on: Adobe Photoshop, Adobe Illustrator and Adobe After Effects.