Java面试深度解析:ThreadLocal与垃圾回收
需积分: 5 28 浏览量
更新于2024-08-04
收藏 32KB DOCX 举报
Java面试题常常关注核心概念和最佳实践,包括并发控制、垃圾收集、以及Spring框架的应用。以下是对这些关键知识点的详细解释:
**ThreadLocal**
ThreadLocal是Java中一个非常有用但经常被误解的工具,它提供了线程局部变量,也就是说,每个线程都有它自己的变量副本,互不影响。ThreadLocal内部通过一个线程相关的Map来存储每个线程的变量副本,键是线程对象,值是变量副本。在Spring框架中,ThreadLocal被广泛用于管理Request作用域的Bean,确保每个请求有自己的独立实例,避免在多线程环境下出现数据污染。
**Java垃圾收集(GC)**
Java的垃圾收集机制自动回收不再使用的内存,以防止内存泄漏。GC主要关注三个问题:“在什么时候”、“对什么东西”、“做什么”。
1. **在什么时候**:GC启动的时机主要有三种:
- Eden区满时触发Minor GC,清理新生代。
- 老年代空间不足,无法容纳新生代晋升的对象时触发Major或Full GC。
- System.gc()被显式调用(尽管不推荐)。
2. **对什么东西**:GC主要清理的是那些不可达的对象,即从GC Roots出发无法到达的对象。GC Roots包括虚拟机栈中的引用、方法区的静态属性引用、本地方法栈中JNI引用的对象。
3. **做什么**:根据不同的内存区域,GC有不同的策略:
- 新生代:通常使用复制算法,将存活对象移动到另一块空间,清空原空间。
- 老年代:可能采用标记-清除或标记-压缩算法,以减少碎片。
- 永久代(在较新的JVM版本中已替换为元空间):存储类元数据和类加载器。
**Synchronized与Lock**
- **Synchronized** 是一种内置的、非公平的、独占式的锁,属于悲观锁。它确保同一时刻只有一个线程访问同步代码块,用于实现线程安全。Synchronized可以作用于方法或代码块,具备可重入性,意味着一个线程可以多次进入它已获得锁的同步代码。
- **Lock** 是Java.util.concurrent包下的接口,提供了比synchronized更细粒度的锁控制,如ReentrantLock(可重入锁)。Lock通常需要手动获取和释放,允许尝试获取锁(tryLock)、中断等待、以及锁的公平性设置。Lock相比synchronized更灵活,但使用不当可能导致死锁。
在面试中,理解并能详细解释这些概念是展示Java基础和并发控制能力的关键。同时,面试者还需要掌握如何在实际项目中合理使用这些工具和机制,以优化程序性能和保证线程安全。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-03-13 上传
2024-09-02 上传
2024-03-08 上传
2023-08-24 上传
2023-02-02 上传
2023-01-29 上传
海澜明月
- 粉丝: 28
- 资源: 6837
最新资源
- transformers:收集资源以深入研究《变形金刚》
- Shopify spy - shopify store parser & scraper-crx插件
- node-friendly-response:进行JSON响应的简单方法
- 致敬页面
- brazilian-flags:显示 ListActivity 和 TypedArrays 的简单 Android 代码。 旧代码迁移至顶级 Android Studio
- chat-test
- 使用Temboo通过Amazon实现简单,健壮的M2M消息传递-项目开发
- 格塔回购
- pg-error-enum:没有运行时相关性的Postgres错误的TypeScript枚举。 还与纯JavaScript兼容
- textbelt:用于发送文本消息的Node.js模块
- SaltStack自动化运维基础教程
- FreeCodeCamp
- BurnSoft.Applications.MGC:My Gun Collection应用程序的主库,其中包含与数据库交互的大多数功能
- CoreFramework:实施全球照明技术的通用核心框架
- 数据库mysql基本操作合集.zip
- auto-decoding-plugin:以OWASP ModSecurity Core Rule Set插件的形式自动解码有效载荷参数