如何测试内存泄漏
命令:
jps
jmap -histo:live [进程号] > [文件路径]
命令解释:
- jps:查看当前代码的进程号;
- jmap -histo:live [进程号] > [文件路径]:讲得到的信息放到某一个文件下,运行后打开此文件,查看还有多少个实例。
具体实现:
- 在测试代码中加上一句 Thread.sleep(1000); 并在这个地方打上一个断点,随后进入debug调试模式;
- 在键盘上菜单键+R进入cmd 命令环境;
- 输入 jps 命令查看当前运行的程序的进程号;
- 利用进程号,输入 jmap -histo:live [进程号] > [文件路径] 命令,其中文件路径可以随意定义但不要在项目里;
- 回到项目中,令debug调试进入下一步,在cmd中的上一个命令就会运行完成而产生对应的文件;
- 打开文件,Ctrl + F 查看程序运行完后引用对象的个数,不为0则代表存在内存泄漏。
实例
顺序表的插入:
package com.github.sqlist;
import java.lang.*;
import java.util.Arrays;
public class MySequenceImpl implements ISequence {
private Object[] elem;
// 有效数据个数
private int usedSize;
private static final int DEFAULT_SIZE = 10;
public MySequenceImpl() {
this.elem = new Object[DEFAULT_SIZE];
this.usedSize = 0;
}
// 判断是否为满
private boolean isFull() {
return this.usedSize == this.elem.length;
}
/**
* 在 pos 位置插入 val
* @param pos 要插入的位置
* @param data 插入的值
* @return 成功插