java堆内存诊断
- jps 工具
- jmap 工具
- 查看堆内存占用情况 jmap - heap 进程id
- jconsole 工具
- 图形界面的,多功能的监测工具,可以连续监测(不光可以监测堆,也可以监测线程和cpu等)
案例一
案例代码
public class Demo1_4 {
public static void main(String[] args) throws InterruptedException {
System.out.println("1...");
Thread.sleep(30000);
byte[] array = new byte[1024 * 1024 * 10];
System.out.println("2...");
Thread.sleep(20000);
array = null;
System.gc();
System.out.println("3...");
Thread.sleep(1000000L);
}
}
jmap的使用
使用jps查看进程
在输出1,2,3后分别使用jmap命令查看堆内存情况
输出1后占用堆内存为6.4m
输出2后占用堆内存为16.4m
进行gc输出3后堆内存只占用1.2m
jconsole的使用
在控制台输入jconsole后会出现图形界面,选择当前我们想看的进程即可
案例二
描述:垃圾回收后,内存占用仍然很高
案例代码
import java.util.ArrayList;
import java.util.List;
public class Demo1_13 {
public static void main(String[] args) throws InterruptedException {
List<Student> students = new ArrayList<>();
for (int i = 0; i < 200; i++) {
students.add(new Student());
}
Thread.sleep(1000000000L);
}
}
class Student {
private byte[] big = new byte[1024*1024];
}
使用jvisualvm工具
在监视界面点击堆Dump,截下堆的快照
可以看见文件的大小为204MB,点击查找
右面会出现占用堆内存的信息,可以点击分别查看堆内存的详细信息
看见文件的大小为204MB,点击查找 右面会出现占用堆内存的信息,可以点击分别查看堆内存的详细信息
|