

Building Memory-efficient Java Applications - markerdmann
http://domino.research.ibm.com/comm/research_people.nsf/pages/sevitsky.pubs.html/$FILE/oopsla08%20memory-efficient%20java%20slides.pdf

======
DanielRibeiro
Very nice presentation. However much of this can be actually discovered and
felt first hand just by playing with profilers that support memory profiling
(such as yourkit[1]).

After a few hours playing with it, you will never forget the precious lessons
on this presentation.

[1] <http://www.yourkit.com/>

------
NSMeta
This is probably an 'apple and oranges' type of question, but I haven't used
Erlang, nor Java to build large applications.

Does anyone know how Erlang compares to Java in regards to memory
usage/performance?

~~~
jamii
Per object overhead in functional languages is usually lower since
polymorphism is handled at the function level rather than the data level. You
don't have to store class pointers etc, just the raw data and probably a type
tag.

I can't find a reference for erlang's representation but I _believe_ it has
only a little more overhead than ocaml which is described here -
<http://rwmj.wordpress.com/2009/08/04/ocaml-internals/>

~~~
NSMeta
I know I should thank you by up voting. But also, just want to say that the
guide was a very interesting and insightful read.

------
joshhart
For those of you who may not be familiar with them, using
<http://fastutil.dsi.unimi.it/> collections instead of Java collections is
essentially the work-around for most things you'll use. Fastutil has custom
classes that remove the pointer overhead associated with storing primitives.
Unfortunately, Java really falls apart at the primitives aren't objects thing
when it comes to performance.

------
insom
It just goes to show that whatever language you use, you need to understand
what the abstractions are doing: what bytes are really going where?

------
dasmoth
Some (not all) of these cases would be helped massively if the JVM gained an
equivalent of the fixnum/flonum types from the LISP world. This has been
proposed kind-of seriously in the past, e.g.:

<http://blogs.oracle.com/jrose/entry/fixnums_in_the_vm>

Has anyone seen anything more recent?

------
gtani
from 2008. slide 25:

 _experiments on a sampling of different JVMs._

More recent :

[http://vanillajava.blogspot.com/2011/07/java-getting-size-
of...](http://vanillajava.blogspot.com/2011/07/java-getting-size-of-
object.html)

[http://vanillajava.blogspot.com/2011/07/java-how-much-
memory...](http://vanillajava.blogspot.com/2011/07/java-how-much-memory-do-
different.html)

[http://kohlerm.blogspot.com/2008/10/knowledge-about-much-
mem...](http://kohlerm.blogspot.com/2008/10/knowledge-about-much-memory-
things-need.html)

[http://kohlerm.blogspot.com/2009/02/how-to-really-measure-
me...](http://kohlerm.blogspot.com/2009/02/how-to-really-measure-memory-usage-
of.html)

[http://marxsoftware.blogspot.com/2011/12/estimating-java-
obj...](http://marxsoftware.blogspot.com/2011/12/estimating-java-object-sizes-
with.html)

(i have zillions bookmarks on this)

------
jesperhh
Does anyone know of a similar study of memory efficiency in C# (or the CLR in
general)?

------
dikanggu
Cool! Very good explanations.

------
morsch
TreeMap<Double, Double>, 100 entries, 8.6 kB, 82% overhead

Man, that's just annoying.

------
sjwright
That's great, but perhaps they should teach some of this to their colleagues
at IBM first.

