Is there any sizeof-like method in Java?

后端 未结 15 991
暗喜
暗喜 2020-11-27 15:03

Is there any built-in method in Java to find the size of any datatype? Is there any way to find size?

相关标签:
15条回答
  • 2020-11-27 15:41

    yes..in JAVA

    System.out.println(Integer.SIZE/8);  //gives you 4.
    System.out.println(Integer.SIZE);   //gives you 32.
    
    //Similary for Byte,Long,Double....
    
    0 讨论(0)
  • 2020-11-27 15:43

    You can do bit manipulations like below to obtain the size of primitives:

    public int sizeofInt() {
        int i = 1, j = 0;
        while (i != 0) {
            i = (i<<1); j++;
        }
        return j;
    }
    
    public int sizeofChar() {
        char i = 1, j = 0;
        while (i != 0) {
            i = (char) (i<<1); j++;
        }
        return j;
    }
    
    0 讨论(0)
  • 2020-11-27 15:43

    Just some testing about it:

    public class PrimitiveTypesV2 {
    
    public static void main (String[] args) {
        Class typesList[] = {
                Boolean.class , Byte.class, Character.class, Short.class, Integer.class,
                Long.class, Float.class, Double.class, Boolean.TYPE, Byte.TYPE, Character.TYPE,
                Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE
            };
        
        try {               
            for ( Class type : typesList ) {
                if (type.isPrimitive()) {
                    System.out.println("Primitive type:\t" + type); 
                }
                else {
                    boolean hasSize = false;
                    java.lang.reflect.Field fields[] = type.getFields();
                    for (int count=0; count<fields.length; count++) {
                        if (fields[count].getName().contains("SIZE")) hasSize = true;
                    }
                    if (hasSize) {
                        System.out.println("Bits size of type " + type + " :\t\t\t" + type.getField("SIZE").getInt(type) );
                        double value = type.getField("MIN_VALUE").getDouble(type);
                        long longVal = Math.round(value);
                        if ( (value - longVal) == 0) {
                            System.out.println("Min value for type " + type + " :\t\t" + longVal );
                            longVal = Math.round(type.getField("MAX_VALUE").getDouble(type));
                            System.out.println("Max value for type " + type + " :\t\t" + longVal );
                        }
                        else {
                            System.out.println("Min value for type " + type + " :\t\t" + value );
                            value = type.getField("MAX_VALUE").getDouble(type);
                            System.out.println("Max value for type " + type + " :\t\t" + value );
                        }
                    }
                    else {
                        System.out.println(type + "\t\t\t type without SIZE field.");
                    }
                } // if not primitive
            } // for typesList
        } catch (Exception e) {e.printStackTrace();}
    } // main
    } // class PrimitiveTypes
    
    0 讨论(0)
  • 2020-11-27 15:49

    EhCache provides a SizeOf class that will try to use the Instrumentation agent and will fall back to a different approach if the agent is not loaded or cannot be loaded (details here).

    Also see the agent from Heinz Kabutz.

    0 讨论(0)
  • 2020-11-27 15:50

    There's a class/jar available on SourceForge.net that uses Java instrumentation to calculate the size of any object. Here's a link to the description: java.sizeOf

    0 讨论(0)
  • 2020-11-27 15:53

    You can use Integer.SIZE / 8, Double.SIZE / 8, etc. for primitive types from Java 1.5.

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