JVM内存溢出及死锁定位及分析
Eclipse Memory Analyzer或者JProfiler)工具进行定位分析。
内存溢出与内存泄露
- 内存溢出,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
- 内存泄露,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
GitHub这个网址上找到与你jdk版本相对应的url。
jdk8可以用:https://visualvm.github.io/archive/uc/7u60/updates.xml.gz
然后就可以正常搜索插件
jdk8可以用:https://visualvm.github.io/archive/uc/7u60/updates.xml.gz
然后就可以正常搜索插件
2)编写测试代码
/**
* VM Args: -Xms5m -Xmx5m -XX:+HeapDumpOnOutOfMemoryError
*
* @author: dvomu
* @create: 2022-03-26
*/
public class TestHeap {
public static void main(String[] args) {
List userList = new ArrayList<>();
while (true) {
User user = new User();
user.setId(1L);
user.setUsername("user");
user.setPassword("pass");
if (System.currentTimeMillis() % 2 == 0) {
//加入到集合,不符合条件的就成了垃圾对象
userList.add(user);
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
@Data
class User{
private Long id;
private String username;
private String password;
}
3) 设置运行参数
启动应用。
4)查看Visual GC
可以看到,年轻代、老年代中的内存使用情况,运行一段时间后观察效果更佳明显。
当老年代满了后就会报OOM异常