Java 共 80 篇文章

Java Class-Data Sharing加速JVM启动的预热优化
2026-05-01 13:23:04
Java ClassData Sharing(CDS,类数据共享)通过将一组类预处理为共享归档文件,让多个 JVM 进程可以共享这部分内存数据。这避免了每次启动时重复加载类、验证类和解析符号的开销,从而显著缩短应用启动时间并降低内存占用。以下分为“动态 CDS(推荐,JDK 13+)”和“静态 CD
Java JVM CDS
55 0
Java ThreadPoolExecutor.CallerRunsPolicy的饱和处理风险
2026-05-01 01:14:00
Java ThreadPoolExecutor.CallerRunsPolicy的饱和处理风险 CallerRunsPolicy 是 Java 线程池中一种看似“温柔”的饱和拒绝策略。当线程池队列满了,且线程数达到最大值时,它既不抛异常,也不丢任务,而是让调用者线程自己去执行这个任务。 这种设计原本
Java 线程池 拒绝策略
54 0
Java Spring循环依赖的三级缓存解决方案原理
2026-04-30 01:26:07
Java Spring循环依赖的三级缓存解决方案原理 Spring 框架通过其 IoC 容器管理 Bean 的生命周期,但在面对两个或多个 Bean 互相引用(例如 A 依赖 B,B 依赖 A)的“循环依赖”场景时,直接的实例化会导致无限递归,最终抛出 StackOverflowError。为了解决
Spring 循环依赖 三级缓存
53 0
Java volatile为什么能禁止指令重排序:内存屏障原理
2026-04-29 23:15:22
Java volatile为什么能禁止指令重排序:内存屏障原理 在Java多线程编程中,代码的执行顺序往往并不等同于源代码的编写顺序。编译器和处理器为了优化性能,会对指令进行重排序。在单线程环境下,这种优化不会影响结果,但在多线程环境下,指令重排会导致严重的并发安全问题。volatile 关键字正是
Java volatile 指令重排序
56 0
Java ThreadLocal在线程池复用时的内存泄漏风险
2026-04-29 03:19:15
Java ThreadLocal在线程池复用时的内存泄漏风险 Java中的 ThreadLocal 是实现线程隔离的利器,但在使用线程池的场景下,如果处理不当,它会变成内存泄漏的元凶。线程池的核心特性是“线程复用”,这导致ThreadLocal的生命周期变得不可控。本文将手把手带你分析其原因,并提供
Java 线程池 内存泄漏
57 0
Java Integer缓存池:为什么-128到127用==比较是true
2026-04-28 12:26:11
Java Integer缓存池:为什么128到127用==比较是true 在Java开发中,使用 == 比较两个 Integer 对象时,经常会遇到一个令人困惑的现象:数值在 128 到 127 之间时结果为 true,超出这个范围结果却变成了 false。这并非系统Bug,而是Java为了优化性能
Java Integer 缓存池
65 0
Java类加载器双亲委派模型打破与热部署实现
2026-04-27 21:17:17
Java类加载器双亲委派模型打破与热部署实现 Java 默认的类加载机制遵循双亲委派模型,这保证了 Java 核心类的安全性和唯一性。但在实际开发中,为了实现热部署、模块隔离或动态更新功能,我们需要打破这一模型。本文将直接介绍如何通过自定义类加载器打破双亲委派,并基于此实现一个简单的热部署功能。 1
Java 类加载器 双亲委派
49 0
Java线程池为什么不建议用Executors创建?参数配置的坑
2026-04-27 19:23:58
Java线程池为什么不建议用Executors创建?参数配置的坑 在Java并发编程中,线程池是提升性能、管理资源的重要工具。然而,很多开发者在创建线程池时,习惯直接使用 Executors 工具类提供的静态方法。这种做法在生产环境中极具风险,可能导致内存溢出(OOM)或资源耗尽。了解这些隐患并掌握
Java 线程池 并发编程
52 0
Java 密封类sealed class限制继承层次的模式匹配
2026-04-27 12:13:58
Java 密封类sealed class限制继承层次的模式匹配 Java 密封类(Sealed Classes)和接口在 Java 17 中正式确立,旨在限制哪些类或接口可以扩展或实现它们。通过明确控制继承层次结构,开发者可以构建更安全、更易维护的代码,并配合模式匹配实现穷尽性检查。 1. 定义密封
Java 密封类 模式匹配
83 0
Java偏向锁撤销时的安全点停顿问题分析
2026-04-27 04:19:44
Java偏向锁撤销时的安全点停顿问题分析 Java偏向锁是为了在无竞争情况下减少获取锁性能损耗而引入的优化机制,它假设锁通常由同一线程多次获得。然而,一旦出现第二个线程尝试获取锁,偏向锁就必须撤销,这个过程并非瞬间完成,而是依赖于JVM的全局安全点,这会导致系统性能出现不可预测的停顿。 一、 理解偏
Java 偏向锁 安全点
49 0
Java ThreadPoolExecutor的prestartCoreThread预启动机制
2026-04-26 14:16:16
Java ThreadPoolExecutor的prestartCoreThread预启动机制 在Java并发编程中,ThreadPoolExecutor 默认采用“懒加载”策略来管理核心线程,即只有在任务到来时才创建线程。这种机制虽然节省了资源,但在高并发初始化或对延迟敏感的场景下,会导致第一个任
Java 并发编程 线程池
52 0
Java StructuredTaskScope结构化并发的子任务管理
2026-04-26 07:25:11
Java StructuredTaskScope结构化并发的子任务管理 Java 21 正式推出了结构化并发,它通过 StructuredTaskScope 将一组相关的子任务视为一个单元进行管理。这种方式极大地简化了多线程编程,特别是当主任务需要等待多个子任务完成或任意一个完成时。本文将详细介绍如
Java StructuredTaskScope 结构化并发
54 0
Java Thread.setDaemon守护线程的终止时机
2026-04-25 07:19:14
Java Thread.setDaemon守护线程的终止时机 Java 程序的退出并不取决于所有线程是否结束,而是取决于“非守护线程”(用户线程)是否全部结束。理解 Thread.setDaemontrue 的行为,对于编写后台服务、垃圾回收模拟或心跳检测等任务至关重要。 1. 理解核心机制 守护线
Java 多线程 守护线程
51 0
Java ReentrantLock的公平锁与非公平锁性能差异实测
2026-04-25 05:21:49
Java ReentrantLock的公平锁与非公平锁性能差异实测 Java并发包中的ReentrantLock提供了两种锁获取模式:公平锁与非公平锁。了解两者的性能差异对于编写高并发程序至关重要。虽然公平锁听起来更符合直觉,但在实际的高性能场景中,非公平锁往往才是默认且更优的选择。 1. 理解核心
Java ReentrantLock 并发编程
58 0
Java 类加载器的命名空间隔离与ClassCastException
2026-04-24 04:13:37
Java 类加载器的命名空间隔离与ClassCastException 在 JVM 中,判断两个类是否相同,不仅看类的全限定名(包名+类名),还要看加载它们的类加载器是否相同。如果全限定名相同,但类加载器不同,JVM 会认为它们是两个完全不同的类。这种机制称为“类加载器的命名空间隔离”。理解这一机制
Java 类加载器 JVM
55 0
Java JIT编译器的热点代码优化与逃逸分析
2026-04-23 20:18:57
Java JIT编译器的热点代码优化与逃逸分析 Java 程序在运行初期通常较慢,但随着时间的推移,速度会显著提升。这种性能飞跃的核心机制在于即时编译器(JIT)及其对热点代码的深度优化。理解并利用这一机制,能让你写出性能极致的 Java 代码。 1. 理解 JIT 编译与热点代码 Java 代码首
Java JIT编译器 性能优化
51 0
Java CompletableFuture的orTimeout与completeOnTimeout超时处理
2026-04-23 16:15:29
Java CompletableFuture的orTimeout与completeOnTimeout超时处理 1. 基础概念介绍 创建一个基本的CompletableFuture实例是开始超时处理的第一步。CompletableFuture是Java 8引入的异步编程工具,它提供了丰富的API来处理
Java CompletableFuture 异步编程
55 0
Java VarHandle替代Unsafe进行原子操作的安全方案
2026-04-23 11:14:03
Java VarHandle替代Unsafe进行原子操作的安全方案 Unsafe是Java中一个强大的工具类,但存在诸多安全风险和限制。Java 9引入的VarHandle提供了一种更安全、更灵活的替代方案,用于进行底层的原子操作。 Unsafe的问题和限制 Unsafe类位于sun.misc包中,
Java VarHandle 原子操作
49 0
Java ReentrantReadWriteLock的锁降级机制实现
2026-04-23 06:16:13
Java ReentrantReadWriteLock的锁降级机制实现 在Java并发编程中,ReentrantReadWriteLock 提供了一种比互斥锁更灵活的锁机制,允许多个线程同时读取,但写入时独占。锁降级是一种重要的优化策略,它指的是持有写锁的线程在释放写锁之前,先获取读锁,随后再释放写
Java 并发编程 读写锁
44 0
Java LongAdder在高并发计数场景下的分段锁优化
2026-04-23 04:25:28
Java LongAdder在高并发计数场景下的分段锁优化 在并发编程中,统计计数(如点击量、请求数)是极其常见的需求。JDK 8 之前,我们通常使用 AtomicLong 或 synchronized 来实现线程安全计数。然而,在极高的并发场景下,这两种方案都会遇到性能瓶颈。LongAdder 是
Java LongAdder 高并发
54 0