更新了java性能调优的资源

时间:2010-05-29 23:22:06

标签: java performance

有人可以推荐一个包含Java最新性能提示的网站吗?我发现的大多数网站看起来都很旧,我想新版本(1.5 - 1.7)可能已经淘汰了一些建议。

修改

我最关心的是减少内存使用/垃圾收集,并确保在必要时可以内联简单的方法。

代码涉及使用大量小对象在线程中处理大量数据。为每个数据项创建了一些对象,而其他对象的寿命更长。这些对象通常实现接口或扩展抽象类。

2 个答案:

答案 0 :(得分:3)

更新:对我来说,调整Sun虚拟机的参考文档是Java SE 6 HotSpotTM Virtual Machine Garbage Collection Tuning(这也会为您提供方法)。

正如评论中所提到的, ergonomics 功能在调优现代JVM方面做得非常出色,应该先测试一下,然后再测试更详细的控件。

如果您没有获得满意的结果,请设置最大堆大小并开始使用生成大小,更准确地说是Young Generation。来自FAQ about Garbage Collection in the HotspotTM JavaTM Virtual Machine

  

年轻一代的体型应足够大,以便在下一代年轻一代之前,短命物体有机会死亡。这是一个权衡,因为较大的年轻一代将有更多的时间让物体死亡,但也可能需要更长的时间来收集。尝试年轻一代的规模,以优化年轻一代的收集时间或应用程序吞吐量。

我会遵循建议的方法:

  

服务器的经验法则   应用程序是:

     
      
  • 首先确定您可以承担的最大堆大小   机。然后绘制你的表现   针对年轻一代规模的指标   找到最好的设置。      
        
    • 注   最大堆大小应该   总是小于金额   内存安装在机器上,到   避免过多的页面错误和   抖动。
    •   
  •   
  • 如果总堆大小是固定的,则增加年轻代的大小   要求减少终身职位   世代大小。保持终身   一代人足以容纳所有人   应用程序使用的实时数据   在任何给定的时间,加上一些   松弛空间(10-20%或更多)。
  •   
  • 受限于终身代的上述限制:      
        
    • 格兰特   给年轻人留下了充足的记忆   代。
    •   
    • 增加年轻人   生成大小随着你增加   自分配以来的处理器数量   可以并行化。
    •   
  •   

然后,如果应用程序仍未达到所需的性能,请从另一个收集器开始(参见Selecting a Collector)。

  

除非您的应用程序具有相当严格的暂停时间要求,否则首先运行您的应用程序并允许VM选择收集器。如有必要,请调整堆大小以提高性能。如果性能仍然无法达到您的目标,请使用以下指南作为选择收集器的起点。

     
      
  1. 如果应用程序的数据集很小(最多约100MB),那么      
        
    • 使用-XX:+UseSerialGC选择序列收集器。
    •   
  2.   
  3. 如果应用程序将在单个处理器上运行,并且没有暂停时间要求,那么      
        
    • 让VM选择收集器,或
    •   
    • 使用-XX:+UseSerialGC选择序列收集器。
    •   
  4.   
  5. 如果(a)峰值应用性能是第一优先级,(b)没有暂停时间要求或暂停一秒或更长时间是可以接受的,那么      
        
    • 让VM选择收集器,或
    •   
    • 选择带有-XX:+UseParallelGC的并行收集器,并(可选)启用与-XX:+UseParallelOldGC的并行压缩。
    •   
  6.   
  7. 如果响应时间比总吞吐量更重要,那么垃圾收集暂停必须保持短于大约一秒钟      
        
    • 选择-XX:+UseConcMarkSweepGC的并发收集器。如果只有一个或两个处理器可用,请考虑使用增量模式,如下所述。
    •   
  8.   

实际上,只需仔细阅读整篇文档(并确保理解错误决定的含义:)并且不要忘记:

  

如果无法衡量,则无法改善。 - Lord Kelvin

参考

在我的初步答案之下,一些读者可能仍然感兴趣:


Java Performance Tuning是Java性能的众所周知的参考,仍然更新。您可能还想查看Kirk Pepperdine的blog(实际上是以前网站的贡献者)。

答案 1 :(得分:0)

我在WebLogic上的Web应用程序中遇到内存泄漏问题。 http://middlewaremagic.com中的文章非常有用,我从中学到了很多关于JVM,GC,Coherence等的知识。

以下是本网站中有关JVM调优的有用链接:

Basic JVM Tuning tips