-
ArrayList采用1.5倍扩容而非2倍,是为了降低连续内存碎片率:2倍扩容(如100→200)导致闲置空间激增(如存120个元素浪费80位),加剧老年代碎片化和GC压力;1.5倍(100→150)闲置更少(仅浪费30位),内存利用率稳定在70%~85%,旧数组更易被完整回收。
-
OperatingSystemMXBean.getTotalSwapSpaceSize()返回操作系统交换空间理论总容量(字节),仅适用于Linux/macOS等Unix-like系统,Windows及容器中常返回0;需结合getFreeSwapSpaceSize()计算使用率,不可单独用于内存压力判断。
-
WeakReference和SoftReference用于解决本地缓存内存泄漏与资源僵化问题,WeakHashMap适合作为key弱化的元数据映射,SoftReference需配合ReferenceQueue主动清理,二者均不适用于强一致性业务场景。
-
CopyOnWriteArrayList适合读多写少场景,读操作无锁、线程安全、迭代器不抛ConcurrentModificationException;写操作复制整个数组、开销大、内存翻倍、ReentrantLock串行化。
-
Java方法重载不考虑返回类型,仅依据方法名和参数列表(个数、类型、顺序)判断;voidfoo()与intfoo()在同个类中非法共存,编译直接报错。
-
本文介绍如何绕过自动监听机制,使用RabbitTemplate的receive()和invoke()方法,在HTTP请求触发时精确消费指定数量的RabbitMQ消息,适用于批处理、管理端点或事件驱动的“按需消费”场景。
-
不该直接newThread()而要用ThreadPoolExecutor,因其避免频繁创建销毁线程的开销与OOM风险,通过复用、限流、队列缓冲和拒绝策略保障稳定性;核心在于合理配置corePoolSize、maximumPoolSize、workQueue和RejectedExecutionHandler四个参数。
-
本文介绍如何在SpringBoot的BeanValidation中,通过自定义注解与约束验证器,将字段名(如email)、校验参数(如min=8)动态注入到messages.properties的国际化提示中,避免重复定义消息,提升可维护性与本地化能力。
-
本文详解如何使用Java的compute方法,将默认值Map中的条目有条件地合并到目标Map中——仅当目标Map中对应键不存在,或其值为null或空白字符串(isBlank())时才覆盖,同时规避不可变Map导致的运行时异常。
-
notify只唤醒一个线程且不可控,易导致虚假唤醒或死锁;notifyAll唤醒所有等待线程并重检条件,更安全通用;实际开发中应优先使用java.util.concurrent工具类。
-
实现Serializable接口是对象序列化的基础前提,需配合ObjectOutputStream/ObjectInputStream操作,并显式定义serialVersionUID、处理transient字段、确保依赖类型可序列化,必要时可通过自定义writeObject/readObject方法增强控制。
-
序列化能实现深度克隆,因其将对象及其嵌套结构递归写入字节流,反序列化时重新分配内存并重建全新对象图,彻底断开引用关系;前提为类实现Serializable且所有非transient非static字段均可序列化。
-
Java中FileTime类以纳秒精度统一处理文件时间戳,基于纪元时间且平台无关;通过from(Instant)等静态方法创建,用Files读写属性,跨平台建议优先比较和使用lastModifiedTime。
-
最清晰通用的解决变量遮蔽方式是使用this.前缀明确访问成员变量;配合命名约定(如成员变量加前缀)、IDE警告及静态分析工具可有效预防和识别遮蔽问题。
-
compactconstructor是record中唯一能做前置校验的位置,它在canonicalconstructor调用后、字段final赋值前执行,可访问全部参数且校验失败能中断实例化;必须声明为publicRecordName{...},校验逻辑须在this()前完成,不可赋值字段,需对可变组件做防御性拷贝。