SunJDK1.5 GC优化:并发旧生代回收与内存管理

需积分: 10 1 下载量 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行为,并根据具体应用需求调整相关参数。