Jam*_*Tam 5 java memory heap stack
我试图完全理解Java如何与其内存安排一起工作.关于互联网的讨论非常困惑,有时互相矛盾,所以我找不到任何我可以相信的人.如果它与静态,静态方法,局部变量,线程,易失性等混合,这个事情可能会非常复杂.所以我在想是否有一种方法可以让我自己研究一下Java编码实验.一个类MemoryTrack做这样的事情,
public myMethod(){
int i = 0;
MemoryTrack.show(new myClass()); //print out "Heap at address 111"
MemoryTrack.show(new myClass()); //print out "Heap at address 222"
MemoryTrack.show(i); //print out "Stack at address 333"
MemoryTrack.show("a static method"); //print out "stack at address 444"
}
Run Code Online (Sandbox Code Playgroud)
Java虚拟机规范的第2.5节中描述了内存的使用.堆栈存储堆栈帧(包含局部变量和部分结果).堆是所有类实例和数组的来源.堆栈帧也可以从堆中分配(然后推入堆栈).还有方法区域和运行时常量池内存.细节在规范中详细说明.
就监视内存使用情况而言,有几个分析器可以使用它们.要从程序中进行监视,请查看MemoryMXBean类(以及java.lang.management程序包中的相关类).它非常易于使用.虽然它可能不会给你听起来像你想要的一切,但它可能是最好的东西.