What is the memory consumption of an object in Java?

前端 未结 12 2575
眼角桃花
眼角桃花 2020-11-22 03:20

Is the memory space consumed by one object with 100 attributes the same as that of 100 objects, with one attribute each?

How much memory is allocated for an object?<

12条回答
  •  生来不讨喜
    2020-11-22 03:31

    It depends on architecture/jdk. For a modern JDK and 64bit architecture, an object has 12-bytes header and padding by 8 bytes - so minimum object size is 16 bytes. You can use a tool called Java Object Layout to determine a size and get details about object layout and internal structure of any entity or guess this information by class reference. Example of an output for Integer on my environment:

    Running 64-bit HotSpot VM.
    Using compressed oop with 3-bit shift.
    Using compressed klass with 3-bit shift.
    Objects are 8 bytes aligned.
    Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
    Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
    
    java.lang.Integer object internals:
     OFFSET  SIZE  TYPE DESCRIPTION                    VALUE
          0    12       (object header)                N/A
         12     4   int Integer.value                  N/A
    Instance size: 16 bytes (estimated, the sample instance is not available)
    Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
    

    So, for Integer, instance size is 16 bytes, because 4-bytes int compacted in place right after header and before padding boundary.

    Code sample:

    import org.openjdk.jol.info.ClassLayout;
    import org.openjdk.jol.util.VMSupport;
    
    public static void main(String[] args) {
        System.out.println(VMSupport.vmDetails());
        System.out.println(ClassLayout.parseClass(Integer.class).toPrintable());
    }
    

    If you use maven, to get JOL:

    
        org.openjdk.jol
        jol-core
        0.3.2
    
    

提交回复
热议问题