-
Arthas的dashboard和thread命令不直接监控变量值,而是通过CPU占用、老年代内存增长、线程数异常等全局指标定位问题线程与内存泄漏线索,再结合vmtool、ognl、getstatic等命令深入检查具体变量。
-
Deque.peek()返回队首元素但不移除,poll()则移除并返回队首元素;二者配合实现“先预览后消费”的非破坏性预检逻辑,需始终配对使用且先判空再调用。
-
Stream.sorted配合Comparator.reversed仅对整个比较器取反,无法实现各字段独立升/降序;真正多级反向排序需为每个字段显式指定顺序,如升序省略、降序用Comparator.reverseOrder()。
-
firstKey()返回排序后最小键而非插入顺序键;TreeMap基于红黑树按自然序或Comparator排序,firstKey()直接返回最左节点引用,时间复杂度接近O(1),但需注意Comparator逻辑与线程安全性。
-
Reference.reachabilityFence并非修复NPE的万能药,而是防止JVM过早判定对象不可达的编译器屏障;它仅在对象本应可达但因激进优化(如逃逸分析)被误回收时生效,且必须紧邻最后一次使用、在同一栈帧内调用,配合Cleaner或PhantomReference使用才有效。
-
桥接方法不直接提升分布式系统稳定性,它是Java编译器为解决泛型类型擦除导致的多态语义问题而生成的JVM内部机制,作用限于单JVM方法分派,与网络容错、消息一致等分布式核心问题无关。
-
局部变量复用本身不会导致垃圾回收器“误判”,真正需防范的是因复用延长对象强引用生命周期;应将临时变量声明在最小作用域块内、避免循环外声明赋值、检查隐式强引用链,并借助逃逸分析与GC日志验证效果。
-
弱一致性迭代指迭代器创建后不阻塞、不加锁、不同步变更,可能漏读、重复或不反映新增/删除,但不抛ConcurrentModificationException,是JUC为兼顾性能与开销做的主动设计。
-
Java模块系统不支持多版本共存,requires仅声明编译期可见性与运行时强制存在性,无版本选择能力;实战中应通过requiresstatic+SPI+ServiceLoader或ModuleLayer分层实现逻辑隔离。
-
关键在于按需分层控制:exports决定类是否可见,opens限定反射访问权限;典型做法是exportsAPI包、opens内部实现包并用to指定接收方,禁用--add-opens生产部署。
-
Map.merge()仅在键已存在时调用remappingFunction;键不存在则直接put,不执行函数;返回null会删除该键;多线程需用ConcurrentHashMap保证原子性。
-
JavaAgent通过Instrumentation接口实现运行时字节码增强,核心是拦截类加载并修改字节码,支持premain启动时或agentmain运行时挂载;提供addClassTransformer(针对新加载类)和retransformClasses(刷新已加载类)两种方式,仅允许修改方法体,需注意限制与稳定性。
-
线程池未关闭会导致JVM无法退出和RejectedExecutionException异常;应先调用shutdown()再配合awaitTermination()等待终止,超时后可shutdownNow();推荐使用AutoCloseable封装或Spring的destroyMethod自动管理。
-
泛型抽象工厂通过类型参数统一管理业务实体创建,以TypeRegistry维护抽象类型到具体实现的映射关系,支持命名注册与运行时按名创建,实现解耦与灵活切换。
-
Java序列化是将对象及其类结构、字段值、继承链等完整转为字节流,反序列化则逆向还原;NotSerializableException源于字段引用不可序列化类型;需用transient或自定义write/readObject处理;未显式声明serialVersionUID会导致类变更时InvalidClassException;JDK原生序列化因格式私有、安全风险、兼容性差、性能低,生产环境应慎用。