-
MinorGC发生在年轻代,触发快、停顿短但频率高,由Eden区满触发,存活对象复制到Survivor区或晋升老年代;MajorGC非标准术语,实为老年代回收;FullGC是全局STW事件,扫描整个堆与元空间。
-
Java数组只有length字段,无length()方法;多维数组的length仅表示第一维大小;合法索引范围为0到arr.length-1。
-
本文介绍如何使用JavaStreamAPI从对象列表中提取某一字段(如名称),并将其转换为无重复的Set<String>,重点讲解map()的正确用法、类型安全实践及常见陷阱。
-
Java中Scanner读取数据需注意缓冲区残留和类型匹配:nextInt()等不消费换行符,后续nextLine()会返回空串;应在数值读取后加scanner.nextLine()清空缓冲区,或统一用nextLine()配合parseXxx()转换;hasNextXxx()用于循环读取;Scanner关联System.in时无需close()。
-
吞吐量优先应选ParallelGC,因其专为最大化吞吐量设计,全程STW但效率高、无协调开销;G1GC仅在兼顾吞吐与软实时停顿(≤200ms)时才适用。
-
会出事,JVM明确禁止“this引用逸出”,对象未初始化完就暴露引用会导致读取未初始化字段、NPE或逻辑错乱。
-
必须是第一条语句,因为JVM要求对象在执行任何字段赋值、变量声明或方法调用前,必须由某个构造器完成初始状态设定,否则可能访问未初始化字段或破坏构造顺序。
-
catch(Exceptione)危险因吞掉空指针等代码缺陷异常,掩盖bug致线上难定位;应捕获具体类型或用catch(Throwablet)打全量日志后重抛。
-
notifyAll()用于唤醒所有在对象上等待的线程,避免信号丢失和假死锁;必须在synchronized块中调用,配合while循环检查条件,不可用if,适用于多条件共享锁场景如生产者-消费者模型。
-
LinkedHashMap默认按插入顺序迭代,仅当构造时指定accessOrder=true才启用访问顺序;此时get()和put()会将节点移至尾部,而containsKey()不触发重排;removeEldestEntry()判断依据变为最久未访问项。
-
答案:使用ArrayList和面向对象设计实现学生成绩管理,包含学生类封装、动态添加成绩、计算平均分及班级整体分析功能,支持灵活扩展。
-
循环里取数组元素总报ArrayIndexOutOfBoundsException?先看索引算对没绝大多数ArrayIndexOutOfBoundsException不是数组真越界,而是循环变量和数组长度关系没理清。Java数组下标从0开始,最大合法索引是array.length-1,但很多人写for(inti=0;i=0;i--),起点必须减一如果用增强for(for(Typee:array)),彻底绕开索引——但前提是不需要知道当前下标多维数组嵌套循环的边
-
答案:通过SimpleDateFormat解析时间字符串并转换为Date对象,结合当前时间计算毫秒差并换算为分钟,判断是否在10分钟内触发提醒;使用ArrayList管理多个日程,遍历并检查未提醒且接近时间的事件输出提示;需处理ParseException异常并注意输入格式一致性,推荐后续升级至Java8的LocalDateTime以提升线程安全与时区处理能力。
-
创建Exception对象开销显著,因需填充堆栈跟踪;实测比普通对象慢10–100倍,栈越深越慢;避免在循环等热点路径中频繁newException。
-
先使用setx命令永久配置Java环境变量。确认JDK安装路径后,用setxJAVA_HOME设置根目录,再用setxPath添加%JAVA_HOME%\bin到系统Path,最后重新打开cmd验证java-version和javac-version输出。