-
Java中不存在“上下文加载器”标准术语,实际问题是ThreadLocal持有ClassLoader导致的类污染;需通过比对getClassLoader()、检查异步调用路径、排查ThreadLocal中ClassLoader残留来定位,并在任务边界显式清理。483 收藏 -
定义方法需使用publicstatic返回值类型方法名(参数列表),基本类型传参不改变原值,引用类型则影响原对象,可通过重载模拟默认参数。483 收藏 -
CMS低延迟核心在于分阶段并发标记与写屏障协同:初始标记仅STW标记GCRoots直连对象(10–100ms);并发标记靠写屏障记录引用变更,保障准确性;重新标记STW修补变动,耗时取决于并发期引用修改频率;浮动垃圾可容忍,但并发模式失败将触发FullGC,需保守设置启动阈值并监控。482 收藏 -
Java中用for循环校验多层括号配对需模拟栈:单类型用depth计数器,遇'('加1、')'减1并检查越界;多类型用char数组栈,遇左括号入栈、右括号匹配弹出,最后栈空则合法。482 收藏 -
应使用枚举配合switch实现状态分流,显式覆盖所有枚举值、禁用default兜底,Java14+推荐switch表达式,旧版default抛AssertionError;case仅调度不实现业务;状态变量须强类型绑定枚举;优先考虑在枚举内定义抽象方法实现行为穷尽。481 收藏 -
Thread.enumerate()仅返回当前线程组活跃线程快照数组,需配合getState()逐个判断状态;统计时应先用activeCount()预估并扩容数组,再enumerate填充,遍历非null线程计数各State频次。481 收藏 -
安全获取Stream首个元素应始终基于Optional的存在性做显式分支处理:用ifPresent()执行无返回操作,orElse()/orElseGet()提供默认值,map()+orElse()链式转换,orElseThrow()仅用于业务强制非空场景。481 收藏 -
Optional.or()提供惰性、可组合的备选值获取机制,接收Supplier<Optional<T>>,仅在为空时调用并返回Optional,支持链式操作与多级fallback。481 收藏 -
基本类型必须通过包装类才能存入Java集合,因集合只支持引用类型;自动装箱/拆箱简化操作,但需注意==比较陷阱、null值检查及字符串转换异常处理。481 收藏 -
逃逸分析本身不直接实现栈上分配,而是JVM或Go编译器在运行时或编译期识别出变量不会逃逸后,自动触发栈上分配;真正起作用的是编译器优化,不是开发者手动写“分配到栈上”的代码。481 收藏 -
DataInputStream读不到int或double是因它只按Java二进制格式(大端、定长)解析,必须由DataOutputStream配套写入;否则字节布局错位,导致EOFException或异常数值。481 收藏 -
JDK动态代理性能优化核心是缓存Method/Constructor、复用InvocationHandler、用MethodHandle替代反射调用,并调整inflation阈值。481 收藏 -
CopyOnWriteArraySet不适合保护“配置数组列表”,因其是Set、去重无序,底层依赖CopyOnWriteArrayList导致写操作需全量复制数组;高频读+极少写时可凑合用,但推荐按场景选CopyOnWriteArrayList或不可变List。480 收藏 -
并行流会加剧GC压力,因其将任务切分为多个ForkJoinTask,各线程在本地Eden区高频创建短命中间对象,导致Eden快速填满、MinorGC频次飙升。480 收藏 -
调试时发现方法返回正确值,但赋值后的变量仍为初始值(如空字符串),根本原因常是调试器在跨线程执行时无法准确反映主线索引的最新变量状态,而非赋值本身失败。480 收藏