This document discusses memory leaks in Java. It begins with an introduction explaining that in Java, memory is automatically allocated by the JVM for new objects but unused objects may not be garbage collected, causing a memory leak. The document then outlines symptoms of memory leaks like increasing memory usage and decreasing performance. It discusses tools for detecting leaks and provides tips for preventing leaks such as avoiding string concatenation, unnecessary object creation, and properly closing resources. The document concludes with a question and answer section.
3. Introduction
In procedural language like C, before a developer
uses a variable he/she has to manually allocate a
region in the memory where the value will reside and
once the application finishes using that value, the
region of the memory must be manually freed by
writing the code for this. But in java when a
developer creates an object using the key word new
JVM automatically allocates the memory for that
object.
2
4. Introduction (cont…)
During the life of the application JVM keeps on check
which objects in memory are in use and which are not
at a regular interval. Unused objects can be freed and
memory occupied by the object can be reclaimed and
reused. This process is called garbage collection and
the corresponding piece of JVM is called garbage
collector. Memory Leak in java is a situation when
some of the objects are not used by the application
3
5. Introduction (cont…)
any more but GC failed to recognize them as unused
there by the unused objects remain in the memory
indefinitely and the amount of memory available to
the application is reduced.
4
6. Symptoms of memory leak
When an application has memory leak we will notice
the following things.
Memory usage consistently increases during the
application life span. Sooner or later the application
will crash because of out of memory.
Performance consistently decreases.
5
7. Detecting memory leak
Several tools are available to detect
memory leak in a java application such
as:
Yourkit
Jprofiler
Visual VM
AppPerfect
JProbe
6
8. Preventing memory leak
While writing code if we can take care of a few
points we can avoid memory leak.
Avoid String Concatenation. Use StringBuilder.
Avoid unnecessary object creation.
7
9. Preventing memory leak (Cont…)
Static Objects : By default live for the entire life of
the application unless explicitly set to null. So it is
better to set the references to null once the use the
static member is over.
Avoid Using System.gc()
8
10. Preventing memory leak (Cont…)
9
Close ResultSet, Statement and Connection objects
in finally block.
Unregister Event listener class.
Disable Jsp Page buffer if you are not using jsp
feature that needs buffering so that performance will
improve as memory will not be used in creating
buffer and output will go directly to the browser.
11. Preventing memory leak (Cont…)
Set session = false in the jsp page if the page is not
accessing the data from the session.
Avoid storing huge data in the session.
Invalidate the session when no longer used.
Avoid duplicating libraries. For ex. If a library is
shared among multiple modules in the same
application then use WAR file manifest's
CLASSPATH to share the libraries instead of
11
12. Preventing memory leak (Cont…)
Duplicating the library in the WEB-INF/lib of
each module.
12
Set session timeout appropriately.