如题

解决方案 »

  1.   

    查看一个对象到底需要使用多少内存Runtime runtime = Runtime.getRuntime();
    long before, after;
    System.gc();before = runtime.freeMemory();
    Object newObject = new String();
    after = runtime.freeMemory();long size = before - after;
      

  2.   

    就是仅仅System.gc();并不能真正完成垃圾收集,也就是说实际上jvm的内存此时并不是稳定的。 
    所以,只有当内存不再发生大的变动,或者说已经稳定,我们才可能说垃圾收集已经完成。
    private static final Runtime s_runtime =
      Runtime.getRuntime ();
    private static long usedMemory ()
        {
          return s_runtime.totalMemory () -
           s_runtime.freeMemory ();
           }
    private static void runGC () throws Exception
     {
    long usedMem1 = usedMemory (), usedMem2 = Long.MAX_value;
    for (int i = 0; (usedMem1 < usedMem2) && (i < 500); ++ i)
            {
                s_runtime.runFinalization ();
                s_runtime.gc ();
                Thread.currentThread ().yield ();
                usedMem2 = usedMem1;
                usedMem1 = usedMemory ();
             }
         }
      

  3.   

    顶一下 呵呵
    你可以参考一下和jvm相关的书
      

  4.   

    用runtime.totalMemory和runtime.freeMemory不一定能确定实例的占用空间的,因为系统本身的运算和函数调用也需要内存空间的,即runtime.totalMemory也需要内存空间的,不信你可以试试,多进行些运算或多调用几次函数,得到的结果都不一样的
    可以试试用数组
    比如
    Object []obj;
    obj = new Object[2];
    System.out.prntln(obj[0]);
    System.out.prntln(obj[1]);
    自己看一下内存的分配,两个内存地址之差,应该就是实例占用的空间吧
    仅仅是推测,没测试过
      

  5.   

    class文件里面好像定义了大小,改天帮你找找。