堆内空间:
堆内分析工具:图形化工具,如 JConsole、VisualVM(jmc,jconsole在linux上用不了的问题,其实1可以远程连接,2可以使用xshell);命令行工具进行运行时查询,如 jstat 和 jmap 等工具;Tomcat、Weblogic内置功能;GC 日志
1、新生代:内部又分为 Eden 区域,作为对象初始分配的区域;两个 Survivor,有时候也叫 from、to 区域,被用来放置从 Minor GC 中保留下来的对象。JVM 会随意选取一个 Survivor 区域作为“to”,然后会在 GC 过程中进行区域间拷贝,也就是将 Eden 中存活下来的对象和 from 区域的对象,拷贝到这个“to”区域。这种设计主要是为了防止内存的碎片化,并进一步清理无用对象。
Hotspot JVM 还有一个概念叫做 Thread Local Allocation Buffer(TLAB)TLAB 仍然在堆上,它是分配在 Eden 区域内的。其内部结构比较直观易懂,start、end 就是起始地址,top(指针)则表示已经分配到哪里了。所以我们分配新对象,JVM 就会移动 top,当 top 和 end 相遇时,即表示该缓存已满,JVM 会试图再从 Eden 里分配一块儿。为了避免多线程同时分配内存时操作同一地址。