Learn about object overhead in JVM

后端 未结 3 1447
离开以前
离开以前 2021-01-12 04:52

I am studying java, and I remember reading somewhere that java objects, had some overhead inside the JVM, which was used for administration reasons by the virtual machine. S

相关标签:
3条回答
  • 2021-01-12 05:03

    You can't get the overhead directly. The amount of overhead is implementation dependent, and can vary based on a number of factors (e.g. the precise JVM version, and whether you are on a 32 or 64bit JVM).

    However it is reasonably safe to assume that in typical modern JVM implementations like HotSpot, the overhead per object is between 8 and 16 bytes. Arrays typically have an overhead that is 4 bytes larger than other objects (to contain the integer array length).

    See also:

    • In Java, what is the best way to determine the size of an object?
    • Memory usage of Java objects: general guide
    0 讨论(0)
  • 2021-01-12 05:17

    I found this article rather informative, although I had some doubts by some of the values mentioned in the tables

    0 讨论(0)
  • 2021-01-12 05:21

    Here is a snippet for object header, object overhead, array header, object reference. Hope it helps someone, if not the OP as it is a quite old question.

        private static int OBJ_HEADER;
        private static int ARR_HEADER;
        private static int INT_FIELDS = 12;
        private static int OBJ_REF;
        private static int OBJ_OVERHEAD;
        private static boolean IS_64_BIT_JVM;
    
         static {
        String arch = System.getProperty("sun.arch.data.model");
    
        IS_64_BIT_JVM = (arch == null) || arch.contains("32");
        OBJ_HEADER = IS_64_BIT_JVM ? 16 : 8;
        ARR_HEADER = IS_64_BIT_JVM ? 24 : 12;
        OBJ_REF = IS_64_BIT_JVM ? 8 : 4;
        OBJ_OVERHEAD = OBJ_HEADER + INT_FIELDS + OBJ_REF + ARR_HEADER;
           }
    

    I should say that I know only the solution, but I haven't yet figured out why this works. This is why people should leave comments in their code... Oh, well, when I do figure it out, I will share the logic behind it.

    0 讨论(0)
提交回复
热议问题