Reservations Gateway Inc.
YOUR LINK to e-TRAVEL SOLUTIONS

- Efficient ProgrammingCreating memory efficient
Applications
“...
Intro...


K. Indika Maligaspe


Developer, Designer, Architect , Trainer



Tech Geek specialized in JAVA and .Net


...
What we will cover



Understanding the memory modal of JVM



Efficient usage of Java



What's in a Collection



Ho...
Understanding the memory
modal of JVM


The JVM is made up of several areas


Threads & Stack



Heap



Non Heap Perm...
Understanding the memory
modal of JVM
Three main areas that effects performance


Young Generation




Short lived, sma...
Understanding the memory
modal of JVM



Three main areas that effects performance cntd.


Permanent Generation


Meta ...
Understanding the memory
modal of JVM

Indika Maligaspe

October 2013
Efficient usage of Java

Anatomy of a Java Object - Integer
public static void main(String[] args){
int integer = 10;
}
pu...
Efficient usage of Java
Anatomy of a Java Object
public static void main(String[] args){
int integer = 10;
}
public static...
Efficient usage of Java
Anatomy of a Java Object

Indika Maligaspe

October 2013
Efficient usage of Java

Anatomy of a Java Object - Strings
public static void main(String[] args){
String myString = new
...
Efficient usage of Java
Typical inefficient code
public static void main(String[] args){
1. String[] constVals = {“A”,”B”,...
Efficient usage of Java
Another String Problem
public static void main(String[] args){
1. String s1 = “Hello”;
2. String s...
Efficient usage of Java
Efficient usage of Java - Summary



Objects are much larger the the data you store in them.



...
What's in a Collection
Each Java collection does different functionality and they
have different memory usages
java.util.H...
What's in a Collection
HashMap - java.util.HashMap


Implementation - “An Object that maps keys and values
. A map cannot...
What's in a Collection
LinkedList – java.util.ArrayList


Implementation - “An ordered collection (AKA sequence). The use...
What's in a Collection
HashMap$Entry


Each HashMap$Entry contains


Int

KeyHash



Object

next



Object

key



O...
What's in a Collection
Summary of Collections
Collection

Default Capacity

Empty Size

10k Overhead

HashSet

16

144

36...
What's in a Collection
Hash* collections vs Others



Hash collections are much larger (almost 9x of an ArrayList)



Ad...
How to analyze
Several tools available to analyze performance within the
JVM


VisualVM - Production / Development



Ec...
How to analyze
Most of the tools will give


Memory Usage (Heap / Perm etc..)



CPU stats for JVM



GC usage and beha...
Thank You
Reservations Gateway Inc.
YOUR LINK to e-TRAVEL SOLUTIONS
Reservations Gateway Inc.
Reservations Gateway Inc.
11...
Upcoming SlideShare
Loading in …5
×

Memory efficient programming

681 views
577 views

Published on

A simple way to develop in java with performance in mind. In this presentation we will look at some of the basics that we tend to miss when developing, which eventually leads to memory inefficiencies in our applications.

Published in: Technology, News & Politics
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
681
On SlideShare
0
From Embeds
0
Number of Embeds
11
Actions
Shares
0
Downloads
28
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Memory efficient programming

  1. 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. 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. 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. 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. 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. 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
  7. 7. Understanding the memory modal of JVM Indika Maligaspe October 2013
  8. 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. 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. 10. Efficient usage of Java Anatomy of a Java Object Indika Maligaspe October 2013
  11. 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. 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. 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. 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. 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. 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. 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. 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
  19. 19. What's in a Collection Summary of Collections Collection Default Capacity Empty Size 10k Overhead HashSet 16 144 360k HashMap 16 128 360k Hashtable 11 104 360k LinkedList 1 48 240k ArrayList 10 88 40k StringBuffer 16 72 240k Indika Maligaspe October 2013
  20. 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. 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. 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. 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

×