-
Java将类元数据从永久代移至元空间,旨在解决PermGen内存固定、易OOM、GC耦合度高及职责混乱等问题;元空间基于本地内存按需分配、支持动态扩容与即时回收,提升JVM稳定性、可维护性及对动态语言的支持能力。
-
Java采用1:1内核线程模型,即每个Java线程对应一个操作系统内核线程,由JVM通过LWP委托内核调度;该模型支持真正并行、避免I/O阻塞全局化,但带来栈空间占用大和创建开销高等代价。
-
本地缓存需要UUID是为了在多实例部署下保证缓存key的全局唯一性,避免键冲突,适用于一次性令牌、节点隔离等场景;应优先使用UUID.randomUUID()生成v4版本,并规范用于临时性key。
-
Java中对象销毁由GC自动管理,无法手动触发;应显式关闭资源、避免强引用泄漏,弃用finalize(),改用Cleaner或PhantomReference;System.gc()仅是建议且影响性能。
-
Java包装类自动装箱对象相等性需区分==和equals():==比较引用是否指向常量池同一对象(仅Byte/Short/Integer/Long/Character/Boolean有缓存,Float/Double无),equals()比较数值且更安全,推荐用Objects.equals()。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
IllegalStateException由程序逻辑错误导致对象状态非法引发,常见于遍历中修改集合、操作已关闭资源或未初始化即使用对象;应通过检查状态、使用安全集合、合理管理资源生命周期及主动抛出异常来预防,避免依赖捕获处理。
-
答案:在JavaGUI编程中,Swing和JavaFX的UI更新必须在专用线程(如EDT或JavaFXApplicationThread)中执行,直接在普通线程修改UI会导致线程安全问题;应使用SwingUtilities.invokeLater()或SwingWorker等机制确保UI操作在正确线程执行,从而避免界面卡顿、异常或数据不一致。
-
自动装箱发生在哪些地方自动装箱不是“运行时偷偷转换”,而是编译器在编译期就插入了Integer.valueOf()、Boolean.valueOf()这类调用。只要类型匹配且上下文需要包装类,就会触发——比如赋值给包装类型变量、作为泛型参数传入、放进集合(ArrayList)、或者调用接收包装类的方法。常见错误现象:NullPointerException在看似安全的算术操作中爆发,比如Integera=null;intb=a+1;——这里解包时才会抛异常,不是装箱时。
-
notify只唤醒一个线程且不可控,易导致虚假唤醒或死锁;notifyAll唤醒所有等待线程并重检条件,更安全通用;实际开发中应优先使用java.util.concurrent工具类。
-
守护线程的执行优先级与普通线程相同,取决于优先级设置而非守护状态;其核心特性是当所有用户线程结束时,JVM退出并自动终止守护线程,无论其优先级高低。
-
编译器优先选择非varargs的精确匹配方法,其次选更具体类型的重载,varargs仅作最后备选;多个等效varargs或数组与varargs重载共存时将导致编译错误。
-
怎么看synchronized对应的字节码指令Java里synchronized块或方法在编译后不会留下“synchronized”字样,而是转成monitorenter和monitorexit两条JVM指令。直接看源码看不出锁行为,必须用javap-v反编译。对类文件执行javap-vMyClass.class|grep-A5-B5monitor,能快速定位到monitorenter/monitorexit所在行注意:普通synchronized方法会在方法属性里标ACC_SYNCH
-
偏向锁撤销是JVM在安全点自动触发的锁状态降级过程,将“绑定线程ID”的偏向状态安全恢复为可竞争的轻量级锁初始态,以应对竞争、线程退出、wait/notify调用等场景。
-
本文介绍如何在SpringDataJPA中不编写原生SQL或自定义查询,仅通过方法命名约定即可根据关联实体(如Trainer)的ID高效检索目标实体(如Client),并涵盖实现原理、使用示例及关键注意事项。