1

Could anyone make me understand the term "object header" and "padding" in java?

class A{

int a;

}

what "object header" and "padding" would be here ?

Mohsin AR
  • 2,998
  • 2
  • 24
  • 36
  • possible duplicate of [What is the memory consumption of an object in Java?](http://stackoverflow.com/questions/258120/what-is-the-memory-consumption-of-an-object-in-java) – Turing85 Jun 11 '15 at 17:51

2 Answers2

4

"Padding" is the tendency of objects in Java to be a multiple of 8 due to memory alignment: Why do Java objects have to be a multiple of 8?

All objects in Java contain an "object header" with a bit of extra overhead information (causing them to take up a little extra space): What is in java object header

So in your example, there would be space taken up by the header for class A along with the space needed to hold it's field int a. If these two values did not add up to a multiple of 8, extra space would be added to the memory location so that it was a multiple of 8, and therefore properly aligned in memory.

Community
  • 1
  • 1
River
  • 8,585
  • 14
  • 54
  • 67
0

We can use an external library called jol to get into details of memory makeup while creating a class.

JOL : Java Object Layout, is a build tool that helps us in identifying the system properties, size of classes and objects in them. It tells the configuration of how a class is build and how much space is used by what component of the class.

This library can be easily found on mvn repository, just search jol-core.

As per your Question, the definition of 'A' Class is :

class A {
    int a;
}

Now, create another demo class and write this line in the main function:

public static void main (String[] args) {
    System.out.println(ClassLayout.parseClass(Temp.class).toPrintable());
}

This would print something like this which will clearly describe what is the memory mapping of a class in Java.

OFF  SZ   TYPE DESCRIPTION               VALUE  
 0   8        (object header: mark)     N/A     ->  The mark word describes the object header. 
                                                    The HotSpot JVM uses this word to store identity                                                                                                        
                                                    hashcode, biased locking pattern, locking information,
                                                    and GC metadata. 
 8   4        (object header: class)    N/A     ->  The class word encapsulates the language-level class
                                                    information such as class name, its modifiers,
                                                    superclass info, and so on. 
 12   4    int A.a                      N/A     ->  The class level variable 'a'.
 Instance size: 16 bytes
 Space losses: 0 bytes internal + 0 bytes external = 0 bytes total

Padding

Not Present in the current class but sometimes there is padding also in classes to make their size a multiple of 8. It is shown like this:

OFF  SZ    TYPE DESCRIPTOR              VALUE
25   3       (alignment/padding gap)    N/A  

Important :

Also, there is no value for the object header and the state because we're parsing a class layout, not an instance layout. Internally it uses the instrumentation class for this calculation.

Source:

Baeldung Article : Memory Layout of Objects in Java