【问题标题】:List of performance improvement features that we can implement in java我们可以在 java 中实现的性能改进特性列表
【发布时间】:2014-02-27 18:29:42
【问题描述】:

可能这是一个众所周知的问题,但我没有找到这个问题的最佳参考...

  1. 计算和分配默认 u-limit、verbose(用于 gc)和最大堆内存值的公式是什么?

  2. 如果没有特定公式,为特定机器指定此公式的标准是什么。

如果可能的话,谁能解释一下这些概念

  1. 我们还需要考虑其他什么概念来提高性能?

  2. 如何调整 JVM 以获得更好的性能,

【问题讨论】:

    标签: java performance garbage-collection ulimit verbose


    【解决方案1】:

    立即停止你正在做的事情。

    调整 JVM 可能是您应该担心的最后件事。在您完成本书中的所有其他性能技巧之前,默认设置应该没问题。

    首先,您需要概要分析您的应用程序并找出瓶颈所在。具体来说,您会想知道:

    • 哪些函数/方法占用了大部分 CPU 时间?
    • 所有内存分配发生在哪里?
    • 哪种对象在堆上占用的空间最多?

    然后您应该对导致问题的区域应用有针对性的优化。有数以千计的有效技术,但以下是我认为最有用的技术:

    • 改进算法 - 任何占用大量 CPU 时间并且复杂度为 O(n^2) 或更糟的东西都可能是改进的好候选。尝试将其发送至O(n log n) 或更好的地址。
    • 共享不可变数据 - 如果您有很多相同数据的副本,那么将这些副本转换为不可变对象并共享一个实例是有意义的。这样可以节省大量内存(并且对提高线程安全/并发性有很好的效果)
    • 使用原始类型 - 将 Integer 替换为 int 等。这样可以节省内存并使数值运算更快。
    • 懒惰 - 在绝对需要之前不要计算东西。
    • 缓存事物 - 如果计算成本高但请求频繁,则在第一次请求后将其存储在缓存中。使用由SoftHashMap 支持的缓存,以便在需要时仍可以释放内存。
    • 卸载工作 - 你可以使用多个内核吗?客户端应用程序可以为您完成一些工作吗?

    进行任何更改后,您需要再次配置文件。至少,您需要确认您的优化确实有帮助。此外,修复一个瓶颈通常会将瓶颈转移到应用程序的另一部分。因此,您需要确定接下来要关注的新位置。

    重复直到您的应用程序足够快(由您自己或客户的要求定义)。

    【讨论】:

    • Mikera,如果可能,您能否指定默认公式来分配 ulimit 和垃圾回收。我的意思是设置默认值。
    • 嗨,Harry,我认为没有“公式”。您需要根据您的环境和应用程序工作负载进行试验。但一般来说,默认值就可以了。
    • Mikera,你对详细有什么想法吗...它在 GC 收集中有什么用...
    猜你喜欢
    • 2017-08-07
    • 1970-01-01
    • 2016-09-11
    • 2011-05-09
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多