您现在的位置是:首页 >

Java进阶:讨论关于Java占用内存的研究[1]

火烧 2021-08-12 15:40:09 1045
Java进阶:讨论关于Java占用内存的研究[1]   最近对程序占用内存方面做了一些优化 取得了不错的效果 总结了一些经验   简要说一下 相信会对大家写出优质的程序有所帮助   下面的论述针对 位

Java进阶:讨论关于Java占用内存的研究[1]  

  最近对程序占用内存方面做了一些优化 取得了不错的效果 总结了一些经验

  简要说一下 相信会对大家写出优质的程序有所帮助

  下面的论述针对 位系统 对 位系统不适用 后叙经常你写了一个程序 一测试 功能没问题 一看内存占用也不多 就不去考虑其它的东西了 但可能程序使用了一个什么数据结构 会当数据规模变大时 内存占用激增

  基本&&关键的问题是 Java里各种东东占多少内存?

  对于primitive类型 有 个 byte short int long float double char boolean 它们的长度分别是

  这个不罗嗦了 举例来说

  long[] data=new long[ ];

  占用内存 * bytes

  此外 data本身是一个Object 也占用内存若干 后叙 当然它针对 * 来说 忽略不计 再说Object的占用 在说这个之前 先说说引用 一惯的说法是Java里没有指针了 只有引用 引用是安全的

  这个说法没错 但是从机理上来说 引用就是指针 只是jvm对指针的使用检查和限制很多 这个引用/指针变得很安全

   直接来结论 一个引用占 byte 在 位系统上

  Object obj=null; // byte  Object[] objs=new Object[ ]; //至少 * byte

  你看我定义了一个 obj 还是null 就占 byte

  定义了一个 objs 个元素 但都是null啊 就都每个占 byte

  虽然obj==null 但它已经是 一个引用 或者说一个指针了

  指针也要占地方

  接下来 直接给另一个结论 Object占 byte 注意 纯Object

  Object obj=new Object(); //多少????

   byte?? 错!! byte 忘了还有一个引用 byte是Object的内容

  记住 Object obj=new Object(); 占 byte

Java进阶:讨论关于Java占用内存的研究[1]

  Object[] objs=new Object[ ];  for(int i= ;i< ;i++) {  objs[i]=new Object();  }

  至少占用 * bytes

  推论 Object占 bytes 似乎和上面的结论矛盾??!!

  没有!! 不管Object 没有被垃圾回收之前 总得被别人引用吧?总的有指针指它吧? 既然指 那个引用or指针就要占地方啊 byte 加起来是 byte 反正一个Object至少 bytes 还是直接给结论 推导的过程我就都包办了 咱不是脏活累活抢著干么!!

  一个Integer占 bytes

  这时您可能会有疑问 Integer=Object+int 就是

  public class Integer {  public int value;  }

  Integer应该占 + = bytes啊

  你说的有道理 但是jvm对所有的Object有限制!这个限制被我发现了 就是不管什么Object占的空间 要是 的倍数 不是 的倍数 只能是 了!

  推论 Byte也占 bytes!

  问 Byte[] bytes=new Byte[ ];占用空间多少?

  答 约为(至少为) ( + )* bytes

  论题 数组空间占用怎么算?

  我这里直接给结论了 推导这个花了更长的时间 对于数组来说 数组这个Object有一个length属性 数组的元素相当于其成员

  public class Array {  public int length;  // 其它成员  }

lishixinzhi/Article/program/Java/hx/201311/27226  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码