Sun JDK 1.5 GC策略详解:串行与并行回收机制
需积分: 10 161 浏览量
更新于2024-08-18
收藏 1.03MB PPT 举报
"本文主要探讨了Sun JDK 1.5中的垃圾收集机制(GC),包括串行GC、并行回收GC、并行GC(ParNew)以及新生代可用GC,并涉及内存优化的相关知识。文章详细介绍了Java的自动内存管理、GC的作用、内存结构以及内存分配策略,同时也提到了内存回收的原理和不同类型的引用。"
在Java中,自动内存管理主要是通过垃圾收集器(GC)来实现的,它不仅负责回收不再使用的内存,还决定了内存如何被分配。对于开发者来说,理解GC的工作原理和优化方法对于提升应用程序性能和避免OOM(Out Of Memory)异常至关重要。
SunJDK 1.5中的GC主要包括几种类型:
1. **串行GC (Serial Copying)**:这是最基础的垃圾收集器,适合小内存应用,它在单线程环境下工作,进行完全的Stop-The-World暂停。
2. **并行回收GC (Parallel Scavenge)**:此GC着重于吞吐量,通过多线程并行回收,以提高整体应用程序的执行速度。
3. **并行GC (ParNew)**:它是新生代的并行收集器,与CMS(Concurrent Mark Sweep)配合使用,用于提高新对象的回收效率。
选择哪种GC通常取决于应用的特性和需求,例如,对于低延迟的应用,串行GC可能是更好的选择;而对于高吞吐量的应用,可能需要考虑并行回收GC。
内存结构在Hotspot JVM中分为以下几个部分:
- **程序计数器(PC Register)**:每个线程都有自己的程序计数器,用于记录下一条指令的位置。
- **局部变量区(Local Variables)** 和 **操作数栈(Operand Stack)**:存在于每个栈帧中,存储方法的局部变量和计算过程。
- **JVM方法栈**:存储每个线程的栈帧,每个方法调用对应一个栈帧。
- **JVM堆**:所有对象实例都在堆上分配,包括新生代(Young Generation)和老年代(Old Generation)。
- **本地方法栈**:支持JNI(Java Native Interface)调用,与JVM方法栈类似。
- **JVM方法区(或者叫做 PermGen Space)**:存储类信息、常量、静态变量等。
内存分配策略包括:
1. **堆上分配**:大部分对象在Eden区分配,少数直接进入Old区。使用TLAB(Thread Local Allocation Buffer)可以优化分配效率。
2. **栈上分配**:基本类型的局部变量和某些情况下通过逃逸分析后转化为基本类型的对象。
3. **堆外分配**:如DirectByteBuffer,但不推荐直接使用Unsafe进行分配。
内存回收主要判断对象是否可达,Hotspot将引用分为Strong、Soft、Weak、Phantom四种,它们在不同的GC策略下有不同的行为。例如,Soft引用在内存不足时会被回收,而Weak引用一旦标记为不可达,就会被放入ReferenceQueue。Phantom引用则在对象从JVM堆中彻底释放时通知。
根据IBM的研究,大部分对象是短暂存在的,因此Sun Hotspot采用了分代收集策略,分别针对新生代和老年代进行优化,以更高效地回收临时对象。通过调整JVM参数如-Xms、-Xmx、-XX:PermSize、-XX:MaxPermSize等,可以定制内存分配和垃圾收集的行为,以适应不同应用的需求。
2012-06-10 上传
2014-12-29 上传
2024-03-22 上传
2015-09-22 上传
2019-08-03 上传
2017-10-19 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
昨夜星辰若似我
- 粉丝: 48
- 资源: 2万+
最新资源
- Java集合ArrayList实现字符串管理及效果展示
- 实现2D3D相机拾取射线的关键技术
- LiveLy-公寓管理门户:创新体验与技术实现
- 易语言打造的快捷禁止程序运行小工具
- Microgateway核心:实现配置和插件的主端口转发
- 掌握Java基本操作:增删查改入门代码详解
- Apache Tomcat 7.0.109 Windows版下载指南
- Qt实现文件系统浏览器界面设计与功能开发
- ReactJS新手实验:搭建与运行教程
- 探索生成艺术:几个月创意Processing实验
- Django框架下Cisco IOx平台实战开发案例源码解析
- 在Linux环境下配置Java版VTK开发环境
- 29街网上城市公司网站系统v1.0:企业建站全面解决方案
- WordPress CMB2插件的Suggest字段类型使用教程
- TCP协议实现的Java桌面聊天客户端应用
- ANR-WatchDog: 检测Android应用无响应并报告异常