We all know that objects have their own copy of instance variables. But what about methods ? Do the methods that are non-static, occupy memory for every object that is created, i.e. does Java make a distinction between memory maps of instance variables and instance methods or not ? The question may seem too naive but i could not find this fact explicitly cited in any of the books on Java that i have and i happen to have a lot of them.
help your PC help you best
No, each method does not contribute to the size of each object; methods, and information about methods, is stored just once.
There are many ways to implement this, and the details of the implementation change from time to time, but all are variations on the classic vtbl approach. Every object does have a reference to a class-wide data structure. Part of that data structure is a list of methods and reference to the code for each method. To invoke a method on an object, the VM follows the chain of references from the object, to the class, to the code for the method.