public byte[] bytes=new byte[1000]; 上面的bytes换算过来是:
public class Array {
 public int length;
 public byte byte0;
 public byte byte1;
 ...
 public byte byte999;
}
上面的bytes占用的内存是:
4+[8+4 + 1*1000] = 4+ [1012]=4+1016=1020
4是 bytes这个引用,8是Object基占的,4是length属性占的
1000是1000个成员占的,本来是 1012,但要求是8的倍数,变成 1016了
总共是 1020
再如:
byte[] bytes=new byte[4];
的内存占用是:
4+[8+4+4*1]=4+[16]=20;byte[] bytes=new byte[3];  也是 20Byte[] bytes=new Byte[1000];
这个 bytes的定义相当于:
public class Array {
  public int length;
  public Byte byte0;
  .....
  public Byte byte999;
}
占用空间是:
4+[8+4+4*1000]+16*1000= 4+ 4016 + 16000  = 20020推论:用  Byte[]  差不多有20倍的差距!!!!!!!
就是那个jvm对object大小8倍数的限制 还没时间探究他设计的初衷 肯定也有一定深意

解决方案 »

  1.   

    本人刚从vc转到java开发,感觉java稍微松散一些。vc开发大部分时间都是研究msdn,找接口,一想到用的全是微软人家开发好的东西就觉得郁闷的很。但vc做的程序运行效率没得说。
    真是不知道到底该用啥,公司安排用啥就用啥吧。
      

  2.   

    而且我想在这次2008-12-01日的技术大会,有人会提出java其它核心错误设计,我提的问题可能是冰山一角,可能java有更严重,更深的设计问题。