Java 面试问题及答案
1. 什么是Java内存模型(JMM)?它如何影响并发编程?
答案:
Java内存模型(JMM)是一个抽象的概念,它定义了Java程序中各种变量(线程共享变量)的访问规则,以及在并发环境下,这些变量如何与内存之间交互。JMM规定了线程之间如何通过主内存(共享内存)进行通信,以及如何保证数据的可见性、有序性和原子性。
在并发编程中,JMM确保了在多线程环境中,对共享变量的访问能够按照一定的顺序进行,从而避免出现数据不一致的问题。例如,它通过使用内存屏障(memory barriers)来禁止特定类型的编译器优化和处理器重排序,以确保指令的执行顺序。
2. 解释一下什么是Java中的强引用、软引用、弱引用和虚引用?
答案:
在Java中,引用类型决定了对象的生命周期以及垃圾回收器如何回收对象。
- 强引用(Strong Reference):这是最常见的引用类型,只要强引用存在,对象就不会被垃圾回收器回收。
- 软引用(Soft Reference):如果一个对象只具有软引用,那么在内存充足时不会被回收,但是当内存不足时,垃圾回收器会回收这些对象以释放内存。
- 弱引用(Weak Reference):弱引用不会阻止对象的垃圾回收,也就是说,只要垃圾回收器发现了弱引用,不管当前内存空间足够与否,都会回收其指向的对象。
- 虚引用(Phantom Reference):一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来获取一个对象的实例。对于虚引用,垃圾回收器回收对象时会收到一个系统通知。