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

标签 java performance garbage-collection ulimit verbose

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

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

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

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

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

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

最佳答案

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

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

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

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

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

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

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

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

关于java - 我们可以在 java 中实现的性能改进功能列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21541446/

相关文章:

memory-leaks - Lua 弱表内存泄漏

java - 在 Java 中编码 URL 的最佳方式

haskell - 在对其运行 IO 操作时收集列表的垃圾

java - 如何从类类型转换为接口(interface)类型

php - 如何高效使用DirectoryIterator?

php - 从 PHP : Grab entire table first, 添加/替换 SQL 表中的记录或根据需要使用 SELECT?

performance - 哪个更有效,atan2 或 sqrt?

c++ - C++中未分配对象的垃圾收集

java - hibernate 避免数据库中的重复项

java - @Transactional 保存 Spring Boot JPA