Memory efficient programming
Upcoming SlideShare
Loading in...5
×
 

Memory efficient programming

on

  • 377 views

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 ...

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.

Statistics

Views

Total Views
377
Views on SlideShare
374
Embed Views
3

Actions

Likes
1
Downloads
17
Comments
0

2 Embeds 3

http://www.linkedin.com 2
https://www.linkedin.com 1

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Memory efficient programming Memory efficient programming Presentation Transcript

    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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; } 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
    • 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
    • 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 String(“MyString”); }   Indika Maligaspe 128 bits of char data, stored in 480 bits of memory Maximum overhead is char * 24 October 2013
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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