随笔分类 - JVM
摘要:上周晚上,某环境 ES 出现阻塞, 运行缓慢。于是开始排查问题的过程。 开始 思路:现象是阻塞,通常是 CPU 彪高,导致业务线程分配不到 CPU 时间片,或者内存吃紧,频繁 GC 导致的 STW。 登录到目标服务器,由于 ES 的用户不是 LZ,因此找运维要了 root 权限,登录到服务器。sud
阅读全文
摘要:楼主学习 JVM 总结的知识点,用思维脑图串起来,温故而知新,其中含有类加载器,内存布局,GC(右侧)。 最多的就是 GC 的内容了。 内容有错误之处,还请指正。 "大图地址"
阅读全文
摘要:前言 让我们继续探秘 Java 热部署。在前文 "探秘 Java 热部署二(Java agent premain)" 中,我们介绍了 Java agent premain。通过在main方法之前通过类似 AOP 的方式添加 premain 方法,我们可以在类加载之前做修改字节码的操作,无论是第一次加
阅读全文
摘要:前言 在之前的 "深入浅出 JVM ClassLoader" 一文中,我们说可以通过修改默认的类加载器实现热部署,但在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。对于
阅读全文
摘要:前言 在前文 "探秘 Java 热部署" 中,我们通过在死循环中重复加载 ClassLoader 和 Class 文件实现了热部署的功能,但我们也指出了缺点 不够灵活。需要手动修改文件等操作。 如果有那么一种功能,当你需要重新加载类并修改类的时候,有那么一个转换器自动帮你修改已有的 Class 文件
阅读全文
摘要:前言 对于后端程序员,特别是 Java 程序员来讲,排查线上问题是不可避免的。各种 CPU 飚高,内存溢出,频繁 GC 等等,这些都是令人头疼的问题。楼主同样也遇到过这些问题,那么,遇到这些问题该如何解决呢? 首先,出现问题,肯定要先定位问题所在,然后分析问题原因,再然后解决问题,最后进行总结,防止
阅读全文
摘要:前言 从前面的3篇文章中,我们分析了5个垃圾收集器,还有一些 GC 的算法,那么,在 GC 调优中,我们肯定会先判断哪里出现的问题,然后再根据出现的问题进行调优,而调优的手段就是 JVM 提供给我们的那些参数或者说选项,这些参数将会改变 GC 的运行方式。因此,他们显得极为重要。 我们将每一个垃圾收
阅读全文
摘要:前言 在 JVM 综述里面,我们说,JVM 做了三件事情,Java 程序的内存管理, Java Class 二进制字节流的加载(ClassLoader),Java 程序的执行(执行引擎)。我们也说,我们大部分情况下只关注前2个。在前面的文章中,我们已经分析了内存关系相关的,包括运行时数据区,GC 相
阅读全文
摘要:前言 在 "深入浅出 JVM GC(2)" 中,我们介绍了一些 GC 算法,GC 名词,同时也留下了一个问题,就是每个 GC 收集器的具体作用。有哪些 GC 收集器呢? 1. Serial 串行收集器(只适用于堆内存 256M 以下的 JVM ) 2. ParNew 并行收集器(Serial 收集器
阅读全文
摘要:前言 在 "深入浅出 JVM GC(1)" 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题。 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲解。在此,我将大纲复制过来。 垃圾回收算法 1. 标记清除算法 2. 复制算法 3. 标记整理算法
阅读全文
摘要:前言 初级 Java 程序员步入中级程序员的有一个无法绕过的阶段 GC(Garbage Collection)。作为 Java 程序员,说实话,很幸福,不用像 C 程序员那样,时刻关心着内存,就像网上有句名言 生活从来都不容易,只不过是有人替你负重前行! 是的,GC 在替我们做这些脏活累活,GC 像
阅读全文
摘要:引自《深入理解Java 虚拟机》 前言 JVM 运行时数据分为几大部分 1. 程序计数器 2. Java 虚拟机栈 3. 本地方法栈 4. Java 堆 5. 方法区(永久代) 6. 运行时常量池 7. 直接内存 JVM 内存区域 Java 虚拟机在执行Java 程序的过程中会把它所管理的内存划分为
阅读全文
摘要:概览 从 JVM 的总体上看,它解决了3个问题: 1. Java 程序的内存管理(GC & 运行时数据区)。 2. Java Class 二进制字节流的加载(ClassLoader)。 3. Java 程序的执行(执行引擎)。 如下图所示: 在我们的日常开发中,最和我们息息相关的就是1和2了,比如
阅读全文