1.测试代码
public class Person {
private Integer pId;
private String pName;
...
}
public static void main(String[] args) throws InterruptedException {
int pid = 0;
while(pid < 1000000){
Person person = new Person(pid,"person_" + pid );
pid++;
Thread.sleep(100);
System.out.println("person = " + person);
}
}
2.总体界面介绍
2.1 Overview总览
主要显示内存、垃圾回收激活统计、类加载、线程、CPU负载等信息
2.2 内存Memory
- Heap 堆(新生代+老年代):
Java堆内存=新生代(Eden伊甸园_80%&Servivor_20%)33%+老年代(old)66%,Survivor会分为from(10%)和to(10%)两部分,但是JProfiler只显示一个Survivor,应该是总和。
可以设置年轻代和老年代的分配比值 -XX:NewRatio=2,表示年轻代占1份,老年代占2份,总共3份。 - Non-Heap 方法区(持久带):
不深入了
2.3 Recorded Objects记录活动对象
2.4 Recorded Throughput吞吐量
freed/second:表示每秒回收了多少对象
2.5 Classes类
2.6 Threads线程
2.7 CPU LoadCPU负载
2.8 GC
2.9 Custom Telemetries自定义遥测数据面板(略)
3 Live memory 活动内存
3.1 All objects
所有对象,可以查看依据分类classes/package;
若添加如下代码
则就会造成内存泄漏,垃圾回收不了
3.2 Recorded Objects
记录的活动对象
3.3 Allocation Call Tree
分配调用树:可以查看方法内存消耗(占用百分比),可按Methods/Classes/Packages进行查看,View Mode可以选择树或图的表现方式
3.4 Allocation Hot Spots
分配热点:可查看分配触发在什么方法上,主要消耗
3.5 Class Tracker
类追踪
4 Heap Walker 堆内存轨迹分析
对一定时间内收集的内存对像信息进行静态分析(可进行复杂的运算),所以功能很强大。包含对象的outgoing reference(外部引用), incoming reference(内部引用), biggest object(大对象)等。
隔10秒钟,再抓拍一次,进行对比