内存调优问题是面试过程中常被问到的问题,这篇文章就简单了解一下有哪些内存调优的工具 ,常见问题如下:

1,实际开发过程中你遇到过什么问题?你是如何解决的?

2,实际项目上线之后,如果出现了卡顿现象,你是如何分析,如何解决的?

3,你有用过内存诊断工具吗?

4,实际开发中你是如何进行GC调优的?

5,垃圾回收之后,内存占用仍然很高.该如何分析?

6,如何查看堆内存中对象的个数?

7,线上环境JVM排查与dump日志排查有做过吗?

常见的内存诊断工具如下表:

工具 含义

常见内存调优工具介绍及使用_i++


案例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

步骤:

第一步:

常见内存调优工具介绍及使用_System_02


第二步

常见内存调优工具介绍及使用_i++_03


第三步

常见内存调优工具介绍及使用_i++_04


第四步:

常见内存调优工具介绍及使用_i++_05


第五步:

常见内存调优工具介绍及使用_i++_06