我们可以在java中实现的性能改进功能列表

时间:2014-02-04 01:40:32

标签: java performance garbage-collection ulimit verbose

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

  1. 计算和分配默认u-limit,verbose(对于gc)和max heap内存值的公式是什么?

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

  3. 如果有可能,任何人都可以解释这些概念

    1. 我们需要考虑哪些其他概念来提升绩效?

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

1 个答案:

答案 0 :(得分:2)

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

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

首先,您需要个人资料您的应用程序并找出瓶颈所在。具体来说,您需要知道:

  • 哪些功能/方法占用了大部分CPU时间?
  • 所有内存分配在哪里发生?
  • 什么样的对象占据了堆上的大部分空间?

然后,您应该针对导致问题的区域应用有针对性的优化。有成千上万的有效技术,但我发现这些技术最有用:

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

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

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