java - 通过代码实现 Java 性能?

标签 java performance optimization

首先,我应该提到,我知道性能优化可能是非常特定于项目的。我现在基本上没有面临这些特殊问题。我面临着 JVM 本身的一系列性能问题。

我现在想知道:

  • 哪些代码优化有意义 从编译器的角度来看: 支持垃圾的例子 收集器我将变量声明为 最终 - 非常遵循PMD 来自 Eclipse 的建议。
  • 有哪些最佳实践:vmargs、 堆和其他东西传递给 JVM 用于初始化。如何得到 这里的值(value)观正确吗?有没有 公式还是尝试错误?

Java 实现了很多自动化,在字节码级别和其他方面做了很多优化。然而我认为其中大部分必须由开发人员计划才能发挥作用。

那么如何加速 Java 程序呢? :)

最佳答案

Which code-optimization make sense from a compiler perspective: for example to support the garbage collector I declared variables as final - very much following PMD's suggestions here from Eclipse.

假设您正在谈论可以对代码进行潜在的微观优化,那么答案几乎是否定的。提高应用程序性能的最佳方法是运行分析器来找出性能瓶颈所在,然后找出是否可以采取任何措施来加快速度。

在大多数情况下,所有经典技巧(例如将类、变量和方法声明为 Final、重新组织循环、更改基本类型)几乎都是浪费精力。 JIT 编译器通常可以比您做得更好。例如,最近的 JIT 编译器将分析所有加载的类,以确定哪些方法调用不会受到重载,而无需将类或方法声明为 final 。然后它将使用更快的调用序列,甚至内联方法主体。

事实上,Sun 专家表示,一些程序员的优化尝试失败了,因为它们实际上使 JIT 编译器更难应用它所了解的优化。

另一方面,更高级别的算法优化绝对是值得的......只要您的分析器告诉您您的应用程序在该代码区域花费了大量时间。

在异常情况下,使用数组而不是集合可能是一种值得优化的方法,在极少数情况下,使用对象池也可能是一种值得优化的方法。但这些优化 1) 会使您的代码更加复杂且容易出现错误,2) 如果使用不当,可能会减慢您的应用程序速度。这些类型的优化只能作为最后的手段来尝试。例如,如果您的分析显示某某 HashMap<Integer,Integer>是 CPU 瓶颈还是内存占用过多,那么最好寻找现有的专用 MapMap - 类似库类,而不是尝试使用数组自己实现 map 。换句话说,在高层进行优化。

如果您花费的时间足够长或者您的应用程序足够小,那么仔细的微优化可能会给您带来比仅仅依赖 JIT 编译器更快的应用程序(在给定的 JVM 版本/硬件平台上)。如果您正在使用 Java 实现一个小型应用程序来进行大规模数字运算,那么微优化的返回可能会非常可观。但这显然不是典型案例!对于典型的 Java 应用程序,工作量足够大,而性能差异足够小,因此微优化是不值得的。

(顺便说一句,我不明白声明一个变量会对 GC 性能产生任何可能的影响。每次遇到变量时,GC 都必须跟踪它,无论它是否是最终的。此外,这是一个公开的 secret 最终变量在某些情况下实际上可以改变,因此 GC 假设它们不会改变是不安全的。不安全就像“创建一个悬空指针导致 JVM 崩溃”。)

关于java - 通过代码实现 Java 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226149/

相关文章:

java - Android 解析主机名到 ip 地址转换

performance - 确定网格游戏中是否没有剩余移动的最有效方法?

mysql - 让LEFT JOIN查询更高效

algorithm - 用于排序的成对数组(整数,字节)的紧凑数据结构?

javascript - 如果我将所有 JavaScript 都放在页面底部,是否需要 $(document).ready ?

c++ - SSE 优化的 64 位整数模拟

java - 使用 Thread.sleep 来减慢脚本的缺点?

java - java中使用Blob触发器的azure函数的传入内容应声明哪个类

java - 如何接收短信

java - 调查垃圾收集周期原因