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

需积分: 10 6 下载量 164 浏览量 更新于2024-07-27 1 收藏 522KB PDF 举报
"Sun JDK 1.6内存管理--调优篇-毕玄" 在Java开发中,Sun JDK 1.6的内存管理是至关重要的,尤其是对于系统的性能和稳定性而言。内存调优的目标通常分为两个主要方面:吞吐量(Throughput)和延迟(Latency)。吞吐量关注的是程序在单位时间内处理的工作量,而延迟则关注的是响应时间,特别是对于那些对实时性要求较高的应用。 调优步骤包括测量(Measure)、设定目标(SetGoal)、调优(Tuning),以及再次测量(Measure)以评估效果。测量过程中需要考虑的因素有: 1. 垃圾收集器(GC)因素:堆的大小(Footprint)、分配速率(AllocateRate)、年轻代生存空间(LDS)、暂停时间(Pause)以及吞吐量(Throughput)。 2. 应用程序因素:响应时间(ResponseTime)和每秒查询量(QPS)。 3. 系统因素:负载(Load)、CPU利用率、I/O性能等。 为了进行测量,开发者可以使用一系列工具,如: - GC日志(GCLog):记录垃圾收集活动。 - jstat:监控JVM的各种统计信息,包括GC情况。 - jmap:用于获取堆内存映射或dump堆信息。 - sar:系统活动报告,用于监控系统资源使用。 - top:实时显示系统中各个进程的资源占用状况。 调优过程中存在一些误区,即"GC Myth",需要通过实践和理解来破除。选择合适的JVM版本也很关键,32位JVM在Linux上受到3GB地址空间的限制,通常建议堆大小不超过2GB;而64位JVM虽然占用更多内存,但能提供更大的地址空间,且开启`-XX:+UseCompressedOOPS`选项可以减少指针的内存消耗。 针对不同的性能需求,可以选择不同的垃圾收集器: - 如果吞吐量更重要,可以选择Parallel Old GC,它能有效地处理大量数据并提高整体运行效率。 - 如果延迟更重要,通常先尝试Parallel Old GC,若不满意,可以转向Concurrent Mark Sweep (CMS) GC,它在低延迟方面表现更佳。 内存大小的设置是调优的关键,首先确定堆大小(HeapSizeStartingPoint),然后计算活对象大小(LiveDataSize),并将-Xms和-Xmx设置为活对象大小的3到4倍,以减少Full GC的发生。 降低Full GC执行频率的策略: - 增大老年代(Old Generation)的大小,但这可能导致其他问题,如内存碎片。 - 减少从新生代(New Generation)晋升到老年代的对象,可以通过调整TenuringThreshold和Survivor Space Size来实现。 案例展示中,比如ItemDetail、TC和Promotion Center等应用,可能需要采取特定的优化策略来降低Full GC的频率和暂停时间,这可能包括进一步减小堆大小,或者调整垃圾收集器的参数设置,以达到理想的性能指标。在实践中,这些模式需要根据具体的应用场景和性能需求进行灵活应用和调整。