知识大全 讨论关于Java占用内存的研究[2]

Posted

篇首语:人起心发,树起根发。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 讨论关于Java占用内存的研究[2]相关的知识,希望对你有一定的参考价值。

Java进阶:讨论关于Java占用内存的研究[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  对于数组 我们不是直接可以取length属性么 源于此

  public byte[] bytes=new byte[ ];  System out println(bytes length); // 看 有length属性

  上面的bytes换算过来是

  public class Array   public int length;  public byte byte ;  public byte byte ;     public byte byte ;  

  上面的bytes占用的内存是

   +[ + + * ] = + [ ]= + =

   是 bytes这个引用 是Object基占的 是length属性占的 是 个成员占的 本来是 但要求是 的倍数 变成 了 总共是

  再如

  byte[] bytes=new byte[ ];

  的内存占用是:

   +[ + + * ]= +[ ]= ;  byte[] bytes=new byte[ ]; 也是

  对于元素是Object的数组 Object也是当作其成员 (注意只有引用这个数组的空间 这个可以推到普通Class上)

  Byte[] bytes=new Byte[ ];

  这个 bytes的定义相当于:

  public class Array   public int length;  public Byte byte ;     public Byte byte ;  

  占用空间是

   +[ + + * ]+ * = + + = 你自己算吧

  推论 千万不要用 Byte[] 有 倍的差距!你可能一下子没明白过来 没关系多琢磨一下 对于普通的class来说 内容占用就是基加成员的占用 Object成员只记引用

  public class Abc   public int n;  public byte b;  public Object obj;  

  它的内容占用是 [ + + + ]=

  所以 Abc one=new Abc()的占用是 + =

  提醒 对于 Abc的成员 obj没有计 如果要计入的话 循环这个过程就可以了 (琢磨一下)

  举例

  public class Abc   public byte b;  public Object obj=null;  

  public class Def   public int n;  public byte b;  public Abc obj=new Abc();  

  问 Def one=new Def(); //占多少?

  答 +[ + + + ]+[ + + ]= + + =   public class Abc   public byte b;  public Object obj=null;    public class Def   public int n;  public byte b;  public Abc[] objs=new Abc[ ];    for(int i= ;i< ;i++)   objs[i]=new Abc();      

  问 Def one=new Def(); //占多少?

  答 kao 一下我也算不出来 不过我写了程序 可以算出来 你给它一个Object 它就能递归的算出总共占了多少内存 这个程序不复杂 你也可以写出来 我等机会合适了再放出 单独说一下String String的结构是

  public class String   private final char value[];  private final int offset;  private final int count;  private int hash; // Default to   

  所以 不考虑那个char[]的占用 一个String最少占用 [ + + + + ]= bytes 加上引用 共 bytes 所以

  String s= ;

  占用 bytes!!!!! 尽管它的长度为 如果精确的算 加上引用一个String的占用是

   + +[ + + *length]  String s= ; 的占用是 + =   String s= ab 的占用是 + =   String s= abc 的占用是 + =

  要说的是 String是常用的类 这么看 String耗内存很多 所以jvm有优化 同样的内容尽量重用 所以除了 是必须的外 那个char[] 很可能一样 比方说

  String[] s=new String[ ];  for(int i= ;i< ;i++)   s[i]=new String( abcdefasdjflksadjflkasdfj );  

  的占用的数量级是 * 那 个字符串本身基本上不占内存 只有一份!反正String 至少是 最多也可能是 !比较占内存的数据结构 这个很重要 基本上就是 primitive的包装

  实例

  我以前用一个

  Hashtable的结构 有 万个元素 改为String[]+int[]后 内存占用改观不少 速度也很快 万的String[] 快排一下 也就 秒多 查找用 分 和hash也差不多少

cha138/Article/program/Java/hx/201311/27227

相关参考

知识大全 Java常规类型占用内存大小

Java常规类型占用内存大小  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  byte(字节型) 

知识大全 如何计算java对象占用的内存

  Java有一个很好的地方就是java的垃圾收集机制这个机制集成于jvm的对程序员来说是隐藏且不透明的这种情况下如何得到某个对象消耗的内存呢?      曾经看到过有人用以下方法来计算在生成该obj

知识大全 关于MSSQL占用过多内存的问题

关于MSSQL占用过多内存的问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常看见有人问M

知识大全 SQL Server执行SQL语句时内存占用特点[2]

SQLServer执行SQL语句时内存占用特点[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 关于设置Java虚拟机(JVM)的内存问题

关于设置Java虚拟机(JVM)的内存问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近做

知识大全 SQL Server占用内存的解决方法

SQLServer占用内存的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常有网友会

知识大全 减少.NET应用程序内存占用的一则实践

减少.NET应用程序内存占用的一则实践  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近一周比

知识大全 SQL Server执行SQL语句时内存占用特点[3]

SQLServer执行SQL语句时内存占用特点[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server执行SQL语句时内存占用特点[4]

SQLServer执行SQL语句时内存占用特点[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 SQL Server执行SQL语句时内存占用特点[1]

SQLServer执行SQL语句时内存占用特点[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!