常见内存调优工具介绍及使用
原创
©著作权归作者所有:来自51CTO博客作者尚硅谷教育的原创作品,请联系作者获取转载授权,否则将追究法律责任
内存调优问题是面试过程中常被问到的问题,这篇文章就简单了解一下有哪些内存调优的工具 ,常见问题如下:
1,实际开发过程中你遇到过什么问题?你是如何解决的?
2,实际项目上线之后,如果出现了卡顿现象,你是如何分析,如何解决的?
3,你有用过内存诊断工具吗?
4,实际开发中你是如何进行GC调优的?
5,垃圾回收之后,内存占用仍然很高.该如何分析?
6,如何查看堆内存中对象的个数?
7,线上环境JVM排查与dump日志排查有做过吗?
常见的内存诊断工具如下表:
工具 含义
案例code
//jmap命令 通过断点形式演示
public class JmapTest {
@SuppressWarnings("unused")
public static void main(String[] args) {
System.out.println("1.......");
System.out.println("begin....");
byte[] array = new byte[1024*1024*10]; //10MB 监测是堆内存使用情况
System.out.println("2........");
System.out.println("mid....");
array = null;
System.gc();
System.out.println("3........");
System.out.println("end........");
}
}
//jvisualvm 命令
public class LhdDemo {
public static void main(String[] args) throws Exception {
List<Student> students = new ArrayList<Student>();
for (int i = 0; i < 200; i++) {
students.add(new Student());
}
Thread.sleep(1000000000L);
}
}
class Student{
private byte[] big = new byte[1024*1024];
}
//visualvm 插件案例
public class GcDemo {
public static void main(String[] args) {
List<byte[]> list = new ArrayList<byte[]>();
int i = 0;
boolean flag = true;
while (flag) {
try {
i++;
list.add(new byte[1024*1024]); // 每次增加1M
Thread.sleep(70);
} catch (Throwable e) {
e.printStackTrace();
flag = false;
System.out.println("count..." + i);
}
}
}
}
需要安装插件:
com-sun-tools-visualvm-modules-visualgc_1
步骤:
第一步:
第二步
第三步
第四步:
第五步: