Java面试必备:2023年高并发与线程安全知识点总结

需积分: 5 0 下载量 150 浏览量 更新于2024-08-03 收藏 9KB MD 举报
"Java最新2021年面试题大汇总,附答案" ### Java垃圾收集器与内存管理 1. **ParallelOld收集器** ParallelOld是Java虚拟机(JVM)中的一个垃圾收集器,它针对老年代区域采用了多线程的标记-整理算法。这种收集器是在JDK 1.6中引入的,目的是为了解决新生代使用ParallelScavenge收集器时,仅能保证新生代的吞吐量,但无法保证整体吞吐量的问题。当系统对整体吞吐量有较高要求时,可以将新生代的ParallelScavenge与老年代的ParallelOld搭配使用,以实现高效的垃圾回收。 2. **对象分配内存线程安全** 对象创建过程中,内存分配在并发环境下可能存在线程安全问题。为了解决这个问题,JVM引入了两种策略: - **CAS(Compare and Swap)**:通过原子性操作保证更新指针位置的线程安全。 - **本地线程分配缓冲(TLAB, Thread Local Allocation Buffer)**:每个线程在Java堆中预先分配一小块内存,线程间互不影响,降低了线程同步开销。 3. **synchronized关键字的使用** 当一个线程进入对象的synchronized实例方法后,如果没有同步其他方法,其他线程仍可以进入该对象的非synchronized方法。因此,如果希望对象线程安全,必须确保所有方法都使用synchronized关键字,或者采用其他线程安全策略。 4. **Serial与Parallel GC的区别** Serial和Parallel垃圾收集器在执行垃圾收集时都会触发全局停顿(stop-the-world)。两者的主要区别在于: - **Serial收集器**:是JVM的默认复制收集器,使用单线程进行垃圾回收。 - **Parallel收集器**:使用多线程执行垃圾回收,提高了并行度,提升了性能。 5. **wait(), notify(), notifyAll()方法的位置** 这些线程通信方法被定义在`Object`类中,因为所有Java类都直接或间接继承自`Object`。这样设计的目的是为了让任何对象都可以作为锁来使用。`wait()`、`notify()`和`notifyAll()`用于线程间的协作,让线程等待对象锁或唤醒其他线程。如果这些方法定义在`Thread`类中,那么只有`Thread`对象才能使用它们,这将限制其灵活性和通用性。 此外,面试中可能还会涉及到其他Java内存模型、垃圾收集器的工作原理、线程状态转换、内存泄漏、死锁问题、JVM调优、类加载机制、异常处理、多线程同步机制等内容。对于Java开发者来说,理解这些核心概念和机制至关重要,因为它们直接影响到程序的性能、稳定性和可维护性。