0

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

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

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

如果可能的话,任何人都可以解释这些概念

  1. 为了提高性能,我们还需要考虑其他任何概念吗?

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

4

1 回答 1

2

停止你现在正在做的事情。

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

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

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

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

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

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

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

于 2014-02-04T02:15:17.330 回答