聊一聊比synchronized更强大的同步锁:ReentrantLock
01、背景介绍
采用synchronized进行加锁,这种锁一般都比较重,里面的实现机制也非常复杂,同时获取锁时必须一直等待,没有额外的尝试机制,如果编程不当…
【技术探秘】深度解析对象在 JVM 中的创建过程!
01、背景介绍
在之前的文章中,我们介绍了类加载的过程和 JVM 内存布局相关的知识。本篇我们综合之前的知识,结合代码一起推演一下对象的真实创建过程,以及对象…
【技术探秘】一文读懂类的加载过程及双亲委派设计
01、背景介绍
我们知道 Java 是先通过编译器将.java类文件转成.class字节码文件,然后再通过虚拟机将.class字节码文件加载到内存中来实现应用…
【技术探秘】图解 JVM 内存模型,超硬核!
01、背景介绍
熟悉 Java 语言特性的同学都知道,相比 C、C++ 等编程语言,Java 无需通过手动方式回收内存,内存中所有的对象都可以交给 Java …
深入java 分析 volatile 关键字的用法和实现原理,硬核干货!
01、背景介绍
在上篇浅析 synchronized 的用法文章中,我们介绍到在多线程环境下,如果编程不当,可能会出现程序运行结果混乱的问题。
出现这个原因主…
浅谈 Synchronized 的几种用法,超多干货!
01、背景介绍
说到并发编程,总绕不开线程安全的问题。
实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量进行同时访问和操作,如果编程处理不当,会…
推荐几款常用的 JVM 调优工具,最后一个特别好用!
对于绝大部分开发者而言,都希望有一个可视化的界面来展示当前服务的性能指标,当需要的时候,直接将线上服务的 dump 文件导出,然后导入到相关工具中通过界面来查询…
3分钟带你看懂 GC 日志!
01、背景介绍
如何分析当前虚拟机性能呢?其中 GC 日志起到至关重要的作用。
实际上,每种垃圾收集器都有它独立的日志格式,尽管如此,虚拟机为了方便用户阅读,…
SpringBoot整合RabbitMQ实现邮件异步发送(修正版)
在之前的文章中,我们详细介绍了 SpringBoot 整合 mail 实现各类邮件的自动推送服务。
但是这类服务通常不稳定,当出现网络抖动的时候,会导致邮件自动…
推荐几款实用的 GC 日志可视化分析工具!
01、背景介绍
通常情况下,运维人员并不会直接在服务器端通过命令方式实时打印当前应用程序的 GC 日志来分析服务的性能,通常的做法是导出当前服务的 GC 日志…
线上Java应用导致CPU占用率过高的排查和解决方案
在我们日常开发中,如果Java程序在运行中占用大量的CPU资源,此时就会导致系统性能急剧下降、系统的响应变慢甚至会导致系统由于大量请求打过来而承受不住进而崩溃。…
Java对象都是堆上分配?看完Java中对象逃逸分析就知道答案了
随着JIT编译期的发展与逃逸分析技术逐渐成熟,所有的对象都分配到堆上也渐渐变得不是一定的。在编译期间JIT会对代码做很多优化,其中有一部分优化是减少内存堆分配压…
3分钟理清Java对象头里面的那些杂事
对象头是一个对象用于保存自身状态的区域,在HotSpot虚拟机中,对象在堆内存中存储的布局可以划分为三个部分:对象头(Header)、实例数据(Instance…
线上JVM OOM问题,如何排查和解决?
JVM(Java虚拟机)中的内存不足错误(Out of Memory Error, OOM)是许多Java开发者在生产环境中遇到的常见问题。这个问题可能出现在不…