透彻理解JVM系列 JVM

透彻理解JVM系列

我们正式进入Java虚拟机阶段的学习。整个系列包括两部分:基础篇和实战篇。基础篇针对JVM相关的基础知识进行介绍,核心内容是JVM内存模型、JVM垃圾回收机制,以及三种核心的垃圾回收器。实战篇则专注于JVM生产实践,主要解决JVM生产环境的参数优化,JVM GC问题和JVM OOM问题的处理。
阅读全文

JVM实战(34)——内存溢出之消息队列处理不当

本章,我们将分析一个因为内存队列处理不当引起的内存泄漏问题,本质是程序逻辑没写好,这也是本系列的最后一章。通过本系列的各个实战案例,相信读者也积累了不少JVM优化的经验,最重要的还是要归纳总结、举一反三,在实践中去印证自己所学的知识,然后再总结完善,最终融会贯通。
阅读全文

JVM实战(33)——内存溢出之内存使用率过高

本章,我们将讲解一个已经稳定运行的系统的内存溢出问题,本章介绍的案例和之前有点区别,程序其实并没有发生OOM异常,但又确实是因为内存占用过多而被OS杀死。这个案例告诉大家,无论如何优化分析,它们背后的原理都是一套东西,掌握分析问题的思路才是最重要的。
阅读全文

JVM实战(30)——模拟堆内存溢出

本章,我们通过代码示例模拟了堆内存溢出的场景,Java堆内存也是最容易出现内存溢出的区域。基本的分析思路就是dump出事发现场的内存快照,然后通过MAT进行查看,分析出内存占用最多的对象,然后分析线程调用栈,找到代码位置,最后进行优化即可。
阅读全文

JVM实战(29)——模拟栈内存溢出

本章,我们将通过示例代码演示Java虚拟机栈区域是如何发生内存溢出的,并根据内存快照进行分析。 我们回顾下栈内存溢出的一个场景:每个线程的栈内存是固定的,如果某个线程不停的无限制调用方法,每次方法调用都会有一个栈帧入栈,此时就会导致线程的栈内存被耗尽。
阅读全文

JVM实战(28)——模拟Metaspace内存溢出

本章,我们将通过示例代码演示Metaspace区域是如何发生内存溢出的,并根据内存快照进行分析。 我们回顾下Metaspace区发生内存溢出的一个场景:程序不停的动态生成类,然后不停的加载类到Metaspace区域,而且这些动态生成的类必须得是不能被回收的,一旦Metaspace区满了,就会触发Full GC,而由于Metaspace区中的对象无法被回收,此时就触发了Metaspace内存溢出。
阅读全文

JVM实战(27)——内存溢出概述

从本章开始,我们将介绍JVM中的内存溢出异常——Out of Memory。我们运行Java程序时,本质是创建了一个JVM进程,然后在里面执行Java字节码。既然是进程,就一定有内存限制,当Java程序使用的内存空间超过限制时,就可能发生内存溢出异常。 在JVM中,一共有三种可能出现OOM的地方:方法区(元数据区)、Java栈内存、Java堆内存。本章,我们就来一一看一下各个区域内存溢出的情况。
阅读全文

JVM实战(26)——SystemGC

本章将介绍一个因为程序员同学不懂JVM的GC机制而导致的系统卡死的案例。针对本章案例中的问题,我们平时自己写代码时,不要自己去调用`System.gc()`方法随便触发GC,一方面可以通过在JVM参数中加入`-XX:+DisableExplicitGC`显示禁止代码中的GC操作,另一方面也要加强对开发人员的JVM相关知识的培训。
阅读全文
本文目录
    Loading...