Sun JDK 1.6内存调优实战与技巧-毕玄

需积分: 10 0 下载量 14 浏览量 更新于2024-07-23 收藏 522KB PDF 举报
"这篇文章是关于Sun JDK 1.6版本的内存管理与调优的专题,由专家毕玄分享。内容涵盖了GC(垃圾收集)调优的基础知识、编写对GC友好的代码方法、调优步骤以及相关工具的使用。文章强调了测量、设定目标和调优的重要性,并探讨了不同场景下选择32位或64位JVM的影响,以及如何根据性能需求选择合适的垃圾收集器。此外,还介绍了减少Full GC (FGC)执行频率和缩短其导致的暂停时间的策略。" 在Java内存管理中,垃圾收集(GC)是一项关键任务,它自动处理不再使用的对象,释放内存。Sun JDK 1.6提供了多种GC算法,如Parallel Old GC和Concurrent Mark Sweep (CMS)。调优的目标可以是提高吞吐量(Throughput)或降低延迟(Latency),这取决于应用的需求。 调优过程通常包括以下步骤: 1. **测量(Measure)**:通过分析GC日志、使用`jstat`、`jmap`等工具来了解系统的当前状态,如内存占用、分配速率、垃圾收集暂停时间和吞吐量等。 2. **设定目标(Set Goal)**:明确优化目标,是提高整体运行速度还是减少响应时间。 3. **调优(Tuning)**:基于测量结果调整JVM参数,如设置合适的堆大小(`-Xms`, `-Xmx`),优化对象晋升策略等。 对于JVM的选择,32位JVM在Linux上受限于3GB的地址空间,建议堆大小不超过2GB;而64位JVM虽然占用更多内存,但若硬件条件允许,通常能提供更好的性能,开启`-XX:+UseCompressedOOPS`可以减少指针开销。 垃圾收集器的选择依据目标不同而变化: - **追求吞吐量**:通常采用Parallel Old GC,它能在大部分时间内保持较高的运行速度。 - **重视低延迟**:首先尝试Parallel Old GC,如果不满足要求,可以转向CMS,CMS更专注于减少暂停时间。 为了降低FGC的频率,可以: - **增大Old区大小**:防止新生代对象过早晋升到老年代。 - **调整Tenuring Threshold和Survivor Space Size**:控制对象晋升策略,减少不必要的晋升。 同时,减小FGC暂停时间的策略可能包括减小堆大小,以减少每次GC需要扫描的对象数量。此外,优化系统性能,例如减少不必要的对象创建,也可以帮助降低GC压力。 案例展示部分可能详细讨论了某些特定应用场景(如ItemDetail和TC服务、促销中心)中如何运用上述原则和策略进行内存管理优化,以实现更高效、更稳定的系统运行。