回答:
垃圾回收(Garbage Collection,GC)是 Java 中自动内存管理的一个关键特性。它负责识别和清除不再使用的对象,从而释放内存资源供其他对象使用。Java 虚拟机(JVM)使用垃圾回收器来执行这一任务。
在 Java 中,垃圾回收主要依赖于对象的引用状态来决定其生命周期。如果一个对象没有任何引用指向它,那么它就被认为是“垃圾”,可以被回收。
垃圾回收器的工作原理通常涉及以下几个步骤:
Java 提供了多种垃圾回收器,如 Serial、Parallel、Concurrent Mark Sweep(CMS)和 G1 垃圾回收器,每种回收器都有其特定的使用场景和性能特点。
回答:
Java 8 引入的 Stream API 提供了一种声明式处理数据集合的新方式。它的好处包括:
示例:
假设我们有一个包含学生信息的列表,我们想要找到所有年龄大于 18 岁的学生,并计算他们的平均分数。
List<Student> students = Arrays.asList(
new Student("Alice", 19, 90),
new Student("Bob", 17, 85),
new Student("Charlie", 20, 92)
);
double averageScore = students.stream()
.filter(s -> s.getAge() > 18)
.mapToInt(Student::getScore)
.average()
.orElse(0);
回答:
在 Java 中,同步和并发是多线程编程中的核心概念。
同步是指在多线程环境中,控制对共享资源的访问,以防止同时被多个线程修改。Java 提供了多种同步机制,如:
java.util.concurrent.locks 包提供了更灵活的锁机制,如 ReentrantLock。并发是指系统中同时存在多个线程,它们可以并行执行。并发编程的目标是提高程序的效率和响应性。为了实现有效的并发,Java 提供了多种工具和框架,如:
ConcurrentHashMap,提供了线程安全的集合实现。探讨:
同步和并发需要仔细设计,以避免常见的并发问题,如死锁、竞态条件和资源饥饿。
回答:
在 Java 中,注解(Annotation)是一种特殊的接口,它可以用来标记类、方法、变量、参数或包。注解不会直接影响代码的执行,但它们可以被编译器或运行时框架所使用,以提供元数据或改变程序的行为。
注解在 Java 中有几个主要用途:
@Override 表示一个方法重写了超类的方法。Java 提供了几种预定义的注解类型:
@Override:检查是否正确重写父类的方法。@Deprecated:标记过时的元素。@SuppressWarnings:关闭特定的编译器警告。注解还可以自定义,以满足特定的需求。自定义注解需要使用 @Retention 和 @Target 两个元注解来指定注解的保留策略和使用位置。
示例:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String value();
}