Java面试常考知识点:垃圾回收、线程同步与异常

需积分: 12 0 下载量 106 浏览量 更新于2024-09-17 收藏 142KB TXT 举报
这篇资源主要包含了三个Java相关的面试或笔试题目,涵盖了垃圾回收、线程同步以及Error和Exception的区别。下面将分别对这三个知识点进行详细解释。 1. **垃圾回收(Garbage Collection, GC)** - **优点**:垃圾回收自动化地管理程序内存,避免了内存泄漏和内存溢出的问题,简化了程序员的工作,使得程序员可以更专注于程序逻辑而不是内存管理。 - **原理**:垃圾回收器会定期检查不再被程序引用的对象,将这些无用的对象占用的内存空间回收。它通常通过可达性分析算法来判断对象是否可到达,不可达的对象即被认为是垃圾。 - **回收机制**:常见的有两种主要的回收机制: - 标记-清除(Mark-Sweep):标记所有活动对象,然后清除未标记的对象。 - 复制(Copying):将内存分为两块,每次只使用一块,当一块用完后,将存活的对象复制到另一块,然后清空已用的一块。 2. **线程同步方法** - **synchronized** 关键字:用于修饰方法或代码块,确保同一时间只有一个线程访问被修饰的代码,防止数据不一致。 - **Lock 接口**:提供比 synchronized 更细粒度的锁控制,如 ReentrantLock,支持公平锁和非公平锁,以及可中断和定时等待等特性。 - **volatile** 关键字:确保共享变量的值对于所有线程都是可见的,并且禁止指令重排序。 - **Atomic 类**:如 AtomicInteger 和 AtomicReference 等,提供原子操作,可以在不使用锁的情况下实现线程安全。 - **ThreadLocal**:每个线程都有自己的副本,避免了线程间的数据共享问题,但并不直接解决同步问题。 - **CountDownLatch**、**CyclicBarrier** 和 **Semaphore**:这些是并发工具类,用于协调多个线程的执行。 3. **Error 与 Exception 的区别** - **Error**:通常是系统级错误,如 OutOfMemoryError、StackOverflowError,它们表明程序遇到了无法恢复的严重问题,通常不应该由应用程序捕获,而是应该记录并尽快终止程序。 - **Exception**:表示程序运行时的异常情况,可以通过 try-catch 块进行捕获并处理,是可恢复的异常,程序员应尽可能处理这些异常以保证程序的健壮性。 - **共同点**:Error 和 Exception 都继承自 Throwable 类,都可以被抛出(throw)和捕获(catch)。 - **区别**:Error 是不可控的,通常表示系统级别的错误;而 Exception 是可控的,通常表示编程过程中的异常情况,可以通过适当的错误处理恢复程序运行。 以上是题目中涉及的三个核心知识点的详细解析,希望对你的学习或面试准备有所帮助。在面试或笔试中,深入理解并能灵活运用这些概念是非常关键的。