Moralok's Blog

你在幼年时当快乐

我们知道 Java 扩充了“引用”的概念,引入了软引用、弱引用和虚引用,它们都属于 Reference 类型,也都可以配合 ReferenceQueue 使用。你是否好奇常常被一笔带过的“引用对象的处理过程”?你是否在探究 NIO 堆外内存的自动释放时看到了 Cleaner 的关键代码但不太能梳理整个过程?你是否好奇在研究 JVM 时偶尔看到的 Reference Handler 线程?本文将分析 ReferenceReferenceQueue 的源码带你理解引用对象的工作机制。

阅读全文 »

Unsafe 类位于 sun.misc 包中,它提供了一组用于执行低级别、不安全操作的方法。尽管 Unsafe 类及其所有方法都是公共的,但它的使用受到限制,因为只有受信任的代码才能获取其实例。这个类通常被用于一些底层的、对性能敏感的操作,比如直接内存访问、CASCompare and Swap)操作等。本文将介绍这个“反 Java”的类及其方法的典型使用场景。

阅读全文 »

本文详细介绍了 Javasynchronized 锁的机制、存储结构、优化措施以及升级过程,并通过 jol-core 演示 Mark Word 的变化来验证锁升级的多个 case

阅读全文 »

印象里每次安装 ElK 组件的体验都不是很好,或多或少都遇到过奇奇怪怪的问题。本文几乎完全按照官方文档:Getting started with the Elastic Stack and Docker Compose: Part 1 通过 docker compose 安装 elasticsearchkibanametricbeatfilebeatlogstash,但是移除了 ssl 相关的配置。你可以直接按照原文档进行安装,但是对照本文可以帮助你更快速地移除不需要的配置以及绕开可能踩到的坑。
此安装方式尽量使用环境变量代替编写配置文件,便于在备份和分享时将敏感信息留存在本地。本次安装时间为 2023-12-14,使用官方镜像,版本为 8.11.2

阅读全文 »

@ComponentScan 注解是 Spring 中很常用的注解,用于扫描并加载指定类路径下的 Bean,而 Spring Boot 为了便捷使用 @SpringBootApplication 组合注解集成了 @ComponentScan 的能力。也许你听说过使用后者会覆盖前者中关于包扫描的设置,但你是否质疑过这个“不合常理”的结论?是否好奇过为什么它们不像其他注解在嵌套使用时可以同时生效?又是否好奇过 @SpringBootApplication 可以间接设置 @ComponentScan 属性的原因?本文从源码角度分析 @ComponentScan 的工作原理,揭示它独特的检索算法和注解层次结构中的属性覆盖机制。

阅读全文 »

@ConfigurationProperties@EnableConfigurationPropertiesSpring Boot 中常用的注解,提供了方便和强大的外部化配置支持。尽管它们常常一起出现,但是它们真的必须一起使用吗?Spring Boot 的灵活性常常让我们忽略配置背后产生的作用究竟是什么?本文将从源码角度出发分析两个注解的作用时机工作原理

阅读全文 »

Spring 中,AutowiredAnnotationBeanPostProcessor 是一个非常重要的后处理器,它可以自动装配标注注解的字段和方法,默认使用 @Autowired@Value 注解,可以支持 JSR-330@Inject 注解。本文通过分析源码介绍它的调用时机和工作原理。

阅读全文 »

@PropertySource 注解提供了一种方便的声明性机制,用于将 PropertySource 添加到 Spring 容器的 Environment 环境中。该注解通常搭配 @Configuration 注解一起使用。本文将介绍如何使用 @PropertySource 注解,并通过分析源码解释外部配置文件是如何被解析进入 SpringEnvironment 中。

阅读全文 »

在分析 Spring Boot 自动配置的工作原理时,我们并没有深入“如何获得配置在 spring.factories 中的自动配置类”。本文将从图解和源码两个角度分析 Spring Boot SPI 机制,了解 spring.factories 中的配置是如何被加载和解析成为缓存中的“接口-实现”键值对。

阅读全文 »
0%