-
标记整理算法是老年代碎片整理的标准实现路径,通过标记存活对象、计算新地址、移动并更新引用三步闭环,将存活对象紧凑排列至堆一端,生成连续空闲空间,从而高效支持大对象分配。
-
Deque接口通过支持两端O(1)增删解决Queue单向操作局限;推荐ArrayDeque而非LinkedList,因其循环数组结构更高效;操作应优先选用offer/poll系列以避免异常。
-
IDE识别不到javac或java命令的主因是启动时未加载JAVA_HOME或PATH中的JDKbin目录;需手动配置ProjectSDK(IntelliJ)、JRESystemLibrary(Eclipse)或java.home(VSCode)。
-
Executors类提供创建线程池的静态方法:newFixedThreadPool创建固定大小线程池,适用于稳定负载;newCachedThreadPool创建可缓存线程池,适合短期异步任务;newSingleThreadExecutor创建单线程池,保证任务顺序执行;newScheduledThreadPool和newSingleThreadScheduledExecutor分别用于定时及周期性任务调度。
-
抽象类与模板方法模式通过定义算法骨架并延迟具体步骤到子类,提升代码复用性与系统可维护性。1.抽象类封装共性结构,包含抽象方法和具体实现;2.模板方法为final,固定流程,调用可变的抽象或钩子方法;3.子类实现抽象方法以定制行为,如GameTemplate中play()定义流程,startPlay()由Football、Chess实现;4.钩子方法提供默认行为,可选覆盖;5.适用于框架设计,如Spring的JdbcTemplate,将不变逻辑(连接管理)固化,变化部分(SQL执行)交由回调;6.实际应用中
-
本文讲解如何将Java中过度依赖static的矩阵填充程序改造为符合面向对象原则的实例化结构,通过移除static修饰符、引入构造与实例方法,提升代码可维护性与可测试性。
-
使用Jackson的ObjectMapper将Java字符串写入输出流时,会自动将其作为JSON字符串序列化,导致双引号和斜杠被转义;若目标是直接输出原始JSON文本,不应使用writeValue(),而应选择直写或结构化建模方式。
-
Java不可变集合指由Collections.unmodifiableXXX()或JDK10+ImmutableCollections生成、运行时抛UnsupportedOperationException的实例;它非只读视图,也不等价线程安全,仅拦截写操作,底层引用仍可被修改。
-
使用Maven初始化Java项目需先安装配置Maven,再通过mvnarchetype:generate命令创建项目,生成标准结构后编辑pom.xml添加依赖,最后用mvncompile、test、package等命令构建项目。
-
Java为基本类型提供包装类以支持对象操作,如Integer、Double等,位于java.lang包中。1.每种基本类型有对应包装类,均继承自Object,可参与面向对象操作。2.JDK5引入自动装箱(基本类型转包装类)与拆箱(反之),简化转换但需防null导致的NullPointerException。3.包装类提供parseInt、valueOf、toString、compareTo等方法,用于解析、转换和比较。4.使用时注意:包装类可能为null,应判空;用equals而非==比较值;-128到1
-
Charset.forName()不抛UnsupportedEncodingException,而是抛IllegalArgumentException;真正抛该异常的是String.getBytes(String)等老式API;JDK7+内置常见编码,但需传标准IANA名称(如"UTF-8"),避免别名或拼写错误。
-
Java对象引用赋值本质是地址复制,即一个引用变量中存储的堆内存地址被复制给另一个引用,使二者指向同一对象实例。例如:MyClassobj1=newMyClass();MyClassobj2=obj1;此时并未创建新对象,也未复制对象数据,仅复制了地址值。因此obj1和obj2共享同一对象,通过任一引用修改对象状态,另一引用可见变化,如obj1.setName("Tom");则obj2.getName()也返回"Tom"。若某引用设为null,仅断开其连接,不影响其他引用;只有当所有引用均断开且对象不可达
-
答案是双击jar文件无法运行因未关联javaw,需手动设置默认打开方式并确保使用"javaw-jar"命令执行,可通过修改注册表或创建批处理脚本解决。
-
断言适用于检测内部程序错误,如私有方法参数非法、控制流异常等,默认关闭,仅开发测试启用。1.用于私有方法参数校验、控制流断言、算法状态验证;2.语法为assertcondition或assertcondition:expression;3.运行时需加-ea参数开启;4.不同于异常,断言属Error类型,不捕获,不可替代公共方法的输入校验。
-
ThreadLocal内存泄漏的根本原因是其内部的ThreadLocalMap中键为弱引用、值为强引用,当ThreadLocal实例被回收后,值仍无法被释放,导致内存泄漏。1.ThreadLocal的每个线程都有一个私有ThreadLocalMap,其中键是ThreadLocal实例的弱引用,值是强引用;2.当外部对ThreadLocal实例的引用消失时,GC会回收该实例,但值仍存在,形成键为null的无效条目;3.若线程为长生命周期(如线程池中的线程),这些无效条目将持续占用内存,最终引发内存泄漏;4.