Java内存模型与垃圾回收
下载需积分: 9 | PDF格式 | 487KB |
更新于2024-07-09
| 63 浏览量 | 举报
"这是一份关于Java面试的笔记,涵盖了美团和蚂蚁金服可能考察的Java相关技术点,包括Java内存模型、线程、垃圾回收和各种垃圾收集器的介绍。"
在这份Java面试笔记中,主要讨论了以下几个关键知识点:
1. **Java内存模型**:
Java内存模型(JMM)规定了线程如何访问和共享内存中的数据。它包括了堆、方法区、虚拟机栈、本地方法栈和程序计数器。其中,方法区(也称为永久代)存储类信息,如字段、方法和常量池。堆是所有线程共享的内存区域,用于对象实例的分配。如果方法区或堆空间不足,会导致内存溢出。
2. **堆内存管理**:
- **新生代与老年代**:Java对象首先在Eden区分配,经历多次Minor GC后仍存活的则进入Survivor区,并通过年龄阈值(默认15)判断是否进入老年代。
- **空间分配担保机制**:在大量对象创建时,如果Eden区不足以容纳,会检查老年代是否有足够的空间直接分配,如果没有,则触发Full GC。
- **大对象直接进入老年代**:避免频繁的内存复制操作。
- **对象晋升策略**:当Survivor区中相同年龄的对象大小超过其一半时,年龄大于或等于这个年龄的对象可以直接晋升到老年代。
3. **虚拟机栈与本地方法栈**:
- **虚拟机栈**:每个线程都有一个独立的虚拟机栈,包含局部变量表、操作数栈、动态连接和方法返回地址。局部变量表存储方法参数和局部变量。
- **本地方法栈**:为JNI(Java Native Interface)方法服务,处理Native方法调用。
4. **可达性分析算法**:
用于判断对象是否存活,主要关注方法区的类静态属性引用、常量引用、虚拟机栈的本地变量表引用以及本地方法栈JNI引用的对象。
5. **垃圾回收算法**:
- **引用计数**:简单但无法处理循环引用。
- **复制算法**:用于新生代,效率高但浪费空间。
- **标记清除算法**:会产生内存碎片。
- **标记整理算法**:无碎片但效率较低。
6. **垃圾收集器**:
- **Serial**:单线程,新生代和老年代都采用串行收集。
- **ParNew**:新生代的并行收集器,常与CMS配合。
- **CMS (Concurrent Mark Sweep)**:并发标记清除,减少STW时间。
- **G1 (Garbage-First)**:新一代的垃圾收集器,目标是实现可预测的停顿时间。
这些知识点是Java面试中常见的问题,对于理解和优化Java应用程序的性能至关重要。在面试过程中,了解这些概念并能结合实际应用进行讨论,将有助于展示你的专业技能和深入理解。
相关推荐









raymonyang1121
- 粉丝: 5
最新资源
- 法国原创ActionScript乒乓球游戏代码解析
- Android WebView实战教程与案例分析
- 安卓4.0环境下安装Java模拟器的详细步骤
- 三维遗传算法代码用于解2011年数模问题
- VB6.0打造简易图片浏览功能实现指南
- AU6256 8口USB-HUB电路设计及原理解读
- OpenGL游戏编程源代码入门指南
- 深入解析Java连接MySQL数据库的源码
- 使用VB语言实现地球图绘制及代码解析
- VC6.0完全自学手册:MFC开发实用指南
- 多种校验功能的串口调试工具与源代码发布
- iOS通讯录功能的四个实用案例分析
- Java算法练习集:40题经典入门小案例
- 30天内打造个性系统光盘教程
- TSP算法优化与应用分析
- Android平台的FileSplit文件分割工具使用教程
- 电路板圆形电池封装库文件应用指南
- Dynamsoft SAWVPlugin v6.2.0 版本更新分析
- WebTrends网页跟踪功能实现及源码解析
- C#开发技巧:使用按钮创建选项卡功能示例
- 如何安装ADT插件以支持Android开发环境
- Android中使用Handler实现计数器功能
- YangPHP框架:PHP开发新选择
- 深入浅出架构师成长路径(第18-23天实践)