Java Heap和Stack实验

测试代码:

public class TestHeapDumper {

//该属性也从Heap上new出来

public Integer testInt= new Integer(1);

//测试方法

public static void main(String args[]) throws InterruptedException{

System.out.println("yes");

//在Heap堆上,new一个对象出来

TestHeapDumper testHeapDumper = new TestHeapDumper();

//程序等待,不要退出

Thread.sleep(1000000L);

//这里再次使用到testHeapDumper,防止GC掉;

System.out.println(testHeapDumper.testInt);

}

}

Java Heap和Stack实验_第1张图片

p0为dump文件的路径,后缀名为.hprof

然后再Memory Analyser工具中打开

Java Heap和Stack实验_第2张图片

可以发现在TestHeapDumper实例中,有TestInt变量。

如果把testInt申明为:

//测试是否能够在Heap堆上分配

public int testInt= 1;

可以发现并没有在Heap上分配。

Java Heap和Stack实验_第3张图片


Memory Analyser工具用起来很不错,可以通过outgoing reference 和incoming refence 引用来找到相互引用,如一张网; shallow Heap,Retained Heap表示对象自己大小和包括引用迭代出来的大小。具体可以参见 Eclipse  Memory Analyser帮助文档

参见:http://www.ibm.com/developerworks/cn/java/j-lo-langref/

有对StrongReference, SoftReference, WeakReference 以及 PhantomReference 的特性及用法

的讲解。

你可能感兴趣的:(java,stack,heap,memory,anlayzer)