Java高级面试题解析:并发与并行差异,SessionFactory线程安全,内存泄漏剖析

需积分: 5 0 下载量 64 浏览量 更新于2024-08-03 收藏 14KB MD 举报
本文档主要涵盖了Java高级面试中常见的三个关键问题,涉及并行和并发的区别、Hibernate中的SessionFactory和Session的线程安全性,以及Java内存泄漏的相关概念。 1. 并行与并发的区别 并发和并行是计算机编程中的两个核心概念。并发强调的是多个任务在单个处理器或多核处理器上交替执行,如多线程环境下的执行。例如,"并发=俩个人用一台电脑,轮流操作",每个任务虽然看起来同时在运行,但实际上是在时间片轮转中执行。而并行则是指真正的并行处理,多个处理器同时执行独立的任务,如同"俩个人分配了两台电脑,各自独立操作",这是物理层面的同步执行。 2. Hibernate中的SessionFactory与Session SessionFactory是Hibernate的核心组件,负责管理数据库连接池,是线程安全的,可以被多个线程同时访问。它通常在应用启动时创建,采用单例模式确保只有一个实例。Session则是个体化的工作单元,每个请求一个Session用于操作数据库,它不是线程安全的,不适合在多线程环境中直接共享。为了提高效率,可以使用ThreadLocal将Session绑定到当前线程,例如Hibernate3的`getCurrentSession()`方法。然而,频繁创建和关闭Session可能会导致性能问题,因此推荐在合适的时候使用和管理。 3. Java内存泄漏 尽管Java有垃圾回收(GC)机制,理论上可以自动回收不再使用的对象,但仍然存在内存泄漏的可能性。当一个长生命周期的对象持有短生命周期对象的引用,即使短生命周期对象已经结束,但由于引用的存在,GC无法回收这部分内存,从而导致内存泄漏。这种内存泄漏通常发生在多线程程序中,如果线程之间的资源管理不当,比如在异步操作后忘记取消引用,或者定时器任务没有正确清理,都可能导致内存占用持续增加,对系统性能造成影响。 总结来说,掌握并发和并行的区别,理解SessionFactory和Session的使用方式,以及识别和避免Java内存泄漏,对于Java开发者在面试和日常开发中都是非常重要的知识点。这些知识可以帮助开发者编写出更加高效、健壮的代码,并避免常见的性能问题。