摘要:内存溢出和内存泄漏的不同:内存泄漏是因为使用不当丢掉了一部分内存导致这部分内存不可用。
内存溢出和内存泄漏的不同:内存泄漏是因为使用不当丢掉了一部分内存导致这部分内存不可用。
当在堆中创建了对象但是后来没有使用这个对象,有没有把整个对象的相关引用设为null。此时垃圾收集器会认为这个对象是需要的就不会清理这部分内存而导致这部分内存不可用。所以会导致内存泄漏进而可用的内存减少进而会导致内存溢出。
内存泄露问题排查方法。
用visualVM工具分析堆快照 如果发生内存泄漏:
1、找出泄漏的对象
2、找到泄漏对象的GC Root
3、根据泄漏对象和GC Root找到导致内存泄漏的代码
4、想法设法解除泄漏对象与GCRoot的连接
如果不存在泄漏:看下是否能增大jvm堆的最大容量、优化程序、减小对象的生命周期。
前期准备:当发生堆溢出的时候可以让程序在崩溃时产生一份堆内存快照
产生堆内存快照的方法:给jvm加上参数XX:+HeapDumpOnOutofMemoryError这样就会在程序崩溃的时候产生一份堆内存快照
分析堆内存快照我建议用jdk自带的可视化监视工具visualVM位置在jdk安装目录下的bin,如果是在Linux环境的话可以把快照传到window因为分析工具会占用很大的内存不建议在服务端进行分析。
以上就是小编对于虚拟机调优问题的简单分析。