首页
JAVA笔记
数据库笔记
混乱记忆
小站记
您现在的位置
java 对象所占内存计算心得
简介: java 程序可以自动的垃圾回收,但是我们知道自己定义的对象产生实例后占用了多少内存吗?知道java对象占用内存计算的方法吗?

利用java 代码计算对象实例所占内存代码如下:

public class Main {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Runtime rt = Runtime.getRuntime();
  long i = 0,j = 0;
  //为什么要先new 一遍?因为对象在被实例化之前会被classLoad加载一次,被加载的文本对象也是需要消耗内存的
  Test t = new Test();
  //释放下内存
  System.gc();
  //计算已经用内存数
  i = rt.totalMemory() - rt.freeMemory();
  System.out.println(i);
  //注意这里哦,这里至少会创建两个对象,一个是  Test 的引用对象,一个是通过new 产生的对象实例。
  Test users = new Test();
  //在new 操作时也会产生一些垃圾内存,所以需要回收下
  System.gc();
  //计算已经用内存数
  j = rt.totalMemory() - rt.freeMemory();
  System.out.println(j);
  //计算内存消耗差,得到的结果是  Test 的引用对象与 Test 对象实例 所占用的内存总和
  System.out.println((j-i));
 }
}

 

计算心得(在win7 64 位 java 1.6 64 位下获得)

  1. main 函数中的空对象引用可能会在java编译时被优化掉。
  2. 对象引用占用4字节。
  3. 无其他字段的对象实例占4字节。
  4. 内存的增长的步长数是8,该现象可能和系统环境有关。
    (例如:创建一个int数据后计算得到内存消耗8字节,再创建一个int数据后计算得到内存消耗还是8字节,再创建一个int数据后计算得到内存消耗8字节)
  5. 在对象被 new 时会多消耗一定量的内存,多消耗的内存应该是 ClassLoader 把 class 文件load到内存后需要消耗的内存数。

 

最近更新