陈树义的博客

分享我的所思所想

为什么要用消息队列:应用场景与缺点

消息队列中间件可以说是Java开发中最常使用的一块技术了,基本上上了规模的系统都会使用消息队列来优化系统架构。那么为什么要使用消息队列?我们使用消息队列来解决什么问题呢?消息队列的优点对于大多数系统来说,我们使用消息队列来做下面三件事情:解耦、削峰、异步。[1]第一个作用:解耦。在多个系统中,如果使

JVM基础系列第12讲:JDK性能监控命令

查看虚拟机进程:jps 命令jps 命令可以列出所有的 Java 进程。如果 jps 不加任何参数,可以列出 Java 程序的进程 ID 以及 Main 函数短名称,如下所示。$ jps6540 Jps64447 Main除此之外,还可以指定下面的参数自定义输出信息:参数含义-q指定jps只输出进程

JVM 基础系列第 11 讲:JVM 常见参数配置(堆栈配置等)

堆栈空间配置JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError。因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要。tips:本文所有配置,如无特别说明,均基于JDK1.8。堆配置我们使用 -Xms 设置堆的初始空

JVM基础系列第10讲:垃圾回收的几种类型

我们经常会听到许多垃圾回收的术语,例如:Minor GC、Major GC、Young GC、Old GC、Full GC、Stop-The-World 等。但这些 GC 术语到底指的是什么,它们之间的区别到底是什么?今天我们就来详细说说。Minor GC从年轻代空间回收内存被称为 Minor GC

JVM基础系列第9讲:JVM垃圾回收器

前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器。总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收器、并行回收器、CMS 回收器、G1 回收器。串行回收器串行回收器是指使用单线程进行垃圾回收的回收器。

JVM基础系列第8讲:JVM 垃圾回收机制

在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由《Java 虚拟机规范》指定的,每个 Java 虚拟机可能都有不同的实现。其实涉及到 Java 虚拟机的内存,就不得不谈到 Java 虚拟机的垃圾回收机制。因为内存总是有限的,我们需要一个机制来不断地回收废弃的内存,从而实

JVM基础系列第7讲:JVM 类加载机制

当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析、运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制。JVM 虚拟机执行 class 字节码的过程可以分为七个阶段:加载、验证、准备、解析、初始化、使用、卸载。在开始聊之前,先给大家看一道面

JVM基础系列第6讲:Java 虚拟机内存结构

看到这里,我相信大家对于一个 Java 源文件是如何变成字节码文件,以及字节码文件的含义已经非常清楚了。那么接下来就是让 Java 虚拟机运行字节码文件,从而得出我们最终想要的结果了。在这个过程中,Java 虚拟机会加载字节码文件,将其存入 Java 虚拟机的内存空间中,之后进行一系列的初始化动作,

JVM基础系列第5讲:字节码文件结构

温馨提示:此篇文章长达两万字,图片50多张,内容非常多,建议收藏后再看。前面我们说到 Java 虚拟机使用字节码实现了跨平台的愿景,无论什么系统,我们都可以使用 Java 虚拟机解释执行字节码文件。但其实字节码是有一套规范的,而规定字节码格式的就是《Java 虚拟机规范》。《Java 虚拟机规范》规

JVM基础系列第4讲:从源代码到机器码,发生了什么?

在上篇文章我们聊到,无论什么语言写的代码,其到最后都是通过机器码运行的,无一例外。那么对于 Java 语言来说,其从源代码到机器码,这中间到底发生了什么呢?这就是今天我们要聊的。如下图所示,编译器可以分为:前端编译器、JIT 编译器和AOT编译器。下面我们逐个讲解。前端编译器:源代码到字节码之前我们