Indika Maligaspe is a developer, designer, architect and trainer specialized in Java and .NET with over 13 years of experience. The document discusses how to write efficient Java code by understanding how memory is used in the JVM and its different areas. It also compares different Java collections and their memory usage, and how to analyze a Java application's performance using tools like VisualVM and JConsole.
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Efficient Memory Java Collections Analyze
1. Reservations Gateway Inc.
YOUR LINK to e-TRAVEL SOLUTIONS
- Efficient ProgrammingCreating memory efficient
Applications
“Any intelligent fool can make things bigger and more complex...
It takes a touch of genius - and a lot of courage to move in the
opposite direction”
- Albert Einstein
Indika Maligaspe
October 2013
2. Intro...
K. Indika Maligaspe
Developer, Designer, Architect , Trainer
Tech Geek specialized in JAVA and .Net
Over 13 years if experience in IT / Web Technologies
Lover of almost all sports...
http://www.linkedin.com/profile/view?id=201732082&trk=nav_responsive_tab_profile
Indika Maligaspe
October 2013
3. What we will cover
Understanding the memory modal of JVM
Efficient usage of Java
What's in a Collection
How to analyze
QA
Indika Maligaspe
October 2013
4. Understanding the memory
modal of JVM
The JVM is made up of several areas
Threads & Stack
Heap
Non Heap Permanent generation
Indika Maligaspe
October 2013
5. Understanding the memory
modal of JVM
Three main areas that effects performance
Young Generation
Short lived, smaller footprints
Newly Created Objects
Broken down to 3 areas as Eden & 2 Survivor Spaces
Old Generation
GC runs less frequently
Indika Maligaspe
Where older objects are maintained
Larger Footprints
October 2013
6. Understanding the memory
modal of JVM
Three main areas that effects performance cntd.
Permanent Generation
Meta data about the objects in the heap
Information about classes and methods
Indika Maligaspe
October 2013
8. Efficient usage of Java
Anatomy of a Java Object - Integer
public static void main(String[] args){
int integer = 10;
}
public static void main(String[] args){
Integer integer = new
Integer(10);
}
Indika Maligaspe
Memory allocation of an int = 32bits
Memory allocation of an Integer Object = 128bits (4:1)
October 2013
9. Efficient usage of Java
Anatomy of a Java Object
public static void main(String[] args){
int integer = 10;
}
public static void main(String[] args){
Integer integer = new
Integer(10);
}
Indika Maligaspe
October 2013
10. Efficient usage of Java
Anatomy of a Java Object
Indika Maligaspe
October 2013
11. Efficient usage of Java
Anatomy of a Java Object - Strings
public static void main(String[] args){
String myString = new
String(“MyString”);
}
Indika Maligaspe
128 bits of char data, stored in 480 bits of memory
Maximum overhead is char * 24
October 2013
12. Efficient usage of Java
Typical inefficient code
public static void main(String[] args){
1. String[] constVals = {“A”,”B”,”C”,”D”};
2. String valToCheck = “D”;
3. Integer indexToCheck = new Integer(0);
While(loop *10){
4. String toSave = new String();
SaveData(....,...,....,toSave);
}
While(loop *10){
5. Integer bookingData = new Integer(rs.getInt(1));
6. Integer retries = new Integer(rs.getString(2));
}
}
Indika Maligaspe
October 2013
13. Efficient usage of Java
Another String Problem
public static void main(String[] args){
1. String s1 = “Hello”;
2. String s2 = “World”;
3. String s3 = s1 +s2
}
The above is equal to String s3 = new StringBuilder(String.valueOf(s1)).append(s2).toString();
Avoid String appending
Use StringBuffers
Indika Maligaspe
October 2013
14. Efficient usage of Java
Efficient usage of Java - Summary
Objects are much larger the the data you store in them.
Use PDT's where ever possible
Avoid using new instances and re-use existing instances
as mush as possible
Avoid String operations, at least unless you must
Minimize objects that are long lasting and not used they
will be moved to old generation and a GC in old gen is
stop the world
Indika Maligaspe
October 2013
15. What's in a Collection
Each Java collection does different functionality and they
have different memory usages
java.util.HashSet
java.util.HashMap
java.util.Hashtable
java.util.LinkedList
java.util.ArrayList
Indika Maligaspe
October 2013
16. What's in a Collection
HashMap - java.util.HashMap
Implementation - “An Object that maps keys and values
. A map cannot
contain duplicate keys, each key can map to at most one value
Implementation is an array of HashMap$Entry Objects
Default capacity is 16 entries
Empty size is 128 bytes
Overhead is 48 bytes for HasMap, plus (16 + (entries* 4 bytes)) for an array and
the overhead of HashMap$Entry objects
Indika Maligaspe
October 2013
17. What's in a Collection
LinkedList – java.util.ArrayList
Implementation - “An ordered collection (AKA sequence). The user of this
interface has precise control over where in the list each element is inserted.
Implementation is an array of Objects
Default capacity is 10 entries
Empty size is 88 bytes
Overhead is 32 bytes for ArrayList, plus (16 + (entries* 4 bytes)) for an array
For a 10,000 entry ArrayList, the overhead is - 40k
Indika Maligaspe
October 2013
18. What's in a Collection
HashMap$Entry
Each HashMap$Entry contains
Int
KeyHash
Object
next
Object
key
Object
value
Additional 32 bytes per key <> value entry
Overhead of a HashMap is therefore – 48 bytes, plus 36 bytes per entry
For a 10,000 entry HashMap, the overhead is - 360k
Indika Maligaspe
October 2013
20. What's in a Collection
Hash* collections vs Others
Hash collections are much larger (almost 9x of an ArrayList)
Additional size helps search / add / remove (performance is constant to Hash
collections but linear to ArrayList)
Really know when to use what and use properly
Indika Maligaspe
October 2013
21. How to analyze
Several tools available to analyze performance within the
JVM
VisualVM - Production / Development
Eclipse – Memory Analysis Tool (MAT) - Development
Jconsole - Development
Just reading hprof - Production / Development
Nagios – Production
NewRelic - Production
Indika Maligaspe
October 2013
22. How to analyze
Most of the tools will give
Memory Usage (Heap / Perm etc..)
CPU stats for JVM
GC usage and behavior
Threads and how threads are being used
Hot spots
Indika Maligaspe
October 2013
23. Thank You
Reservations Gateway Inc.
YOUR LINK to e-TRAVEL SOLUTIONS
Reservations Gateway Inc.
Reservations Gateway Inc.
11654 Plaza America Drive , Unit 645
Reston, Virginia 20190-4700
USA
Tel :
Fax :
Email :
Web :
Indika Maligaspe
703 286 5331
703 433 0146
info@rezgateway.com
www.rezgateway.com
October 2013