What does the memory usage look like in Java when extending a base class.
Do the child class contain an instance of the base class (with it\'s own overhead and all)
There is no double overhead.
Java will take the class, the superclasses, compute the space needed for all the fields, and allocate space needed for one single instance.
Form a memory point of view only, there does not exist the notion of superclass at all, there are instance of Foo that need memory for only one int, and instances of Bar that need memory for two ints, of which one is there because Bar happens to extend Foo.
So the overhead (or bookkeeping or whatever you want to call) happens only once.
However, when developing in java, is usually better not to care about memory stuff too much, unless you have very specific (and i mean very very very specific) use cases on which the bookkeping overhead is causing you serious problems. In that case, also the 8 byte padding should be considered.
Usually, there are many other ways you can improve the memory footprint of your application or it's overall performance, than not worrying about the memory overhead of each single instance.
There is only one class header per object, so it has only the latter.
By the way, you can easily check this using https://sourceforge.net/projects/sizeof/ or https://code.google.com/p/memory-measurer/