前面的10篇 都是基础的知识,包括类加载的过程 类加载的细节,jvm内存模型 垃圾回收 等等,
这一篇我们开始实战了解一下 各种疑难杂症:怎么监控 怎么发现 怎么解决
内存溢出 内存泄漏
这两个概念在垃圾回收器里面已经讲过了,
当一个对象我们已经不再使用 但是我们又没有明确的断掉它 可达性分析法觉得他不能回收 一直存在堆内存里面——这就是内存溢出
随着内存溢出 越来越多 最后吧内存撑爆 造成OOM ——这就是内存泄漏
下面介绍一款企业级的JVM监控 :Prometheus 负责收集监控数据 grafana负责可视化显示
首先当我们看到内存趋势图 要会分辨,内存图频繁上升是正常的 因为程序的运行过程就会创建对象,但是一直上升下不来 这就是有问题的 说明有对象没回收 然后越积越多
JVM内存问题经典案例
先来一个最经典的,大家学习线程池的时候 书或者博客资料上面 都会有这个例子;
就是 线程池中使用 threadlocal