SunJDK1.5 GC优化:并发旧生代回收与内存管理
需积分: 10 163 浏览量
更新于2024-08-18
收藏 1.03MB PPT 举报
"旧生代可用GC—并发-sun_GC回收机制及内存等优化"
Java的垃圾收集(Garbage Collection, GC)是自动内存管理的关键部分,它负责识别并回收不再使用的对象,以防止内存泄漏并优化应用程序的性能。本资源主要探讨了Sun JDK 1.5中的GC机制,特别是针对旧生代的并发GC策略。
1. **并发GC(Concurrent Mark Sweep GC)**
- 可通过 `-XX:+UseConcMarkSweepGC` 参数启用,以实现旧生代的并发垃圾收集。
- 并发GC的线程数默认计算方式为 `(并行GC线程数 + 3) / 4`,也可以通过 `-ParallelCMSThreads` 参数自定义设置。
2. **内存分配**
- **JVM内存结构**:包括程序计数器、虚拟机栈(包含局部变量区和操作数栈)、堆、本地方法栈(在Hotspot中与虚拟机栈合并)、方法区(也称为永久代,存储类信息)。
- **内存参数**:如 `-Xss` 控制栈大小,`-XX:PermSize` 和 `-XX:MaxPermSize` 设置方法区的初始和最大大小,`-Xms` 和 `-Xmx` 分别设定堆的最小和最大大小。
- **分配策略**:
- **堆分配**:大部分对象在Eden区分配,某些情况下直接分配到Old区。使用线程本地分配缓冲区(Thread Local Allocation Buffer, TLAB)可以优化分配效率。
- **栈分配**:原子类型局部变量或经过标量替换的局部变量在栈上分配。
- **堆外分配**:例如使用 `DirectByteBuffer` 或 `Unsafe.allocateMemory` 进行直接内存分配,但不推荐后者,因为它可能导致内存碎片。
3. **内存回收(Garbage Collection)**
- **判断对象是否死亡**:Hotspot认为无引用指向的对象为死亡。
- **引用类型**:四种引用类型(Strong、Soft、Weak、Phantom),其中Strong是最常见的引用,其他三种是基于`Reference`类的子类。
- **特殊处理**:
- Soft引用:在内存不足或长时间未使用时会被回收,可使用 `-XX:SoftRefLRUPolicyMSPerMB` 调整策略。
- Weak引用:在下一次GC时一定会被回收,回收时会添加到`ReferenceQueue`。
- Phantom引用:对象无直接引用,当从Java堆中释放时,会通知。
4. **分代垃圾收集**
- Sun Hotspot采用分代收集策略,因为大多数对象生命周期短,新生代(Young Generation)和老年代(Tenured Generation/Old Generation)的区分有助于提高GC效率。
通过对这些知识点的理解和调整,开发者可以优化Java应用程序的内存使用,减少垃圾收集对应用性能的影响,尤其是对于高并发场景,良好的内存管理和GC策略至关重要。进行GC调优通常包括分析常见问题、监控GC行为,并根据具体应用需求调整相关参数。
2018-03-23 上传
2012-06-10 上传
2018-09-25 上传
2020-04-24 上传
2018-03-06 上传
2021-05-03 上传
2021-08-30 上传
2011-04-25 上传
2021-07-21 上传
劳劳拉
- 粉丝: 20
- 资源: 2万+
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明