|
|
1
19
首先:通过代码优化,我假设您已经完成了正确的算法和算法的正确实现。在这种情况下,您将使用探查器并查看您的垃圾收集器(GC)收集垃圾的频率以及它用于收集垃圾的时间。然后,您开始处理GC选项——但是要注意,如果您不知道自己在做什么,您可能会遇到麻烦。
除此之外,看看您可以消除多少try/catch块。看看是否可以消除不必要的异常抛出。 尽可能使用缓存,但不要过度使用。 阅读有效的Java,第一版和/或第二版 剖析者:我用你的工具。对于Java1.5和更高版本来说,它非常好。你可以申请个人驾照。其他分析器也很好。 就像您有单元测试和集成测试一样,有一些作为持续集成(CI)构建的一部分运行的性能测试也没有坏处。通过这种方式,您可以知道何时回归,特别是如果您使用的是良好的CI构建服务器。 |
|
|
2
12
确保您的日志级别不会意外地留在调试:) |
|
|
3
11
“测量,不要猜测。”
对于较旧的应用程序,简单地迁移到Java6可能会提高性能。看见 this whitepaper 有关Java6中性能改进的信息。 |
|
|
4
8
使用最新的虚拟机——他们一直在进步。 配置文件和测试。永远不要优化你的代码,除非你绝对确定你需要。 如果它是一个GUI应用程序,从Swing切换到AWT或者Eclipse的工具包,它应该非常快。这在较旧的虚拟机上更为重要(我已经在嵌入式方面工作了一段时间,实际上我们在1.0.x虚拟机中,swing甚至不可用) 我知道这并不是Java特有的,但不是分配对象——这包括循环中的字符串连接(在循环之外,这是可以接受的。这是您可能能做的最大的事情)。 也可以保留对象,而不是释放/重新分配它们。有一些“引用”类可以用来保存您不需要但可能希望重用的对象——GC不会删除它们,除非它需要空间。 如果需要,使用-MX参数分配更多空间。 Java的速度很难提高很多——HotSpot已经为您做了很多事情,您认为可能会提高代码速度的任何事情都可能会降低代码的速度。 |
|
|
5
5
使用StringBuilder代替大型字符串连接集可以极大地提高性能。 然而,我不能不说,常规做法的性能得到了好处,分析。我现在还不知道Java评测(只在学术上使用这种语言),但是评测可以帮助您识别代码中的问题部分,而且修复特定部分要容易得多,因为您需要查找一些内容。 |
|
|
6
5
不要盲目优化。 使用您的工具包或任何其他优秀的探查器找出应用程序中的“热点”。 您不仅需要查看CPU时间,还需要查看分配了多少内存以及 为某一步释放。 您还需要确保没有内存泄漏或高内存消耗。 据我所知,分析内存消耗的最佳工具是Eclipse内存分析器( http://www.eclipse.org/mat ). 其他方面是线程争用和IO问题。 要了解分析争用问题的简单方法,请访问我的旧博客 https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/4737 |
|
|
7
3
另一个潜在的性能增益可以通过切换到更快的VM来实现。它们并非都相等,有些更适合不同类型的应用。它们还可以具有各自支持的特定类型的自定义,以及标准的自定义。 另外,要小心使用微基准测试性能,因为大多数虚拟机的工作方式都没有意义。因此,由于不明显的原因,一些非常简单的性能测试可能会表现出不同的行为。 简单地运行一个测试,然后更改一小段代码或VM选项并再次运行,可能会产生不同的结果,但与您所做的更改无关。 |
|
|
8
2
对于评测,请尝试使用JAMON进行时间监控,使用NetBeans分析器进行一般性能和内存监控。 |
|
9
2
你也问了关于C#的问题,我也会给出同样的答案,而且一开始就针对特定语言是错误的。一旦你用一般的技术和方法压缩了你能得到的每一个周期,那么语言特定的东西可能会有所不同。 |
|
10
2
与任何语言一样,使用适当的算法和数据结构。 OOP的一个好处是,您可以在不更改接口的情况下更改对象的实现。这使您可以开始使用nave实现进行编码,并在需要时替换它们。 |
|
11
1
我已经看到,有时候只给JVM更多堆内存将有助于缓慢的应用程序。这是由
|
|
12
1
从项目一开始就应该做一件事,这将是一个巨大的帮助:编写可读的代码。 不要试图编写长方法来避免方法调用。编译器将在必要时内联,但可能会为长方法生成糟糕的代码。如果代码很难阅读,通常性能问题会由它做一些你在混乱中看不到的事情引起。 |
|
|
13
1
Java1.6_07+自带了自己的分析器。它被称为Java VisualVM。如果路径上有%JAVA\u HOME%/bin,只需在命令提示符下键入jvisualvm。 |
|
|
14
0
以下是Peter Sestoft的(较旧)文件,值得一读: Performance in java .有些建议可能不再正确,因为Java在更新版本的优化中变得更好了。但是当探查器发现一些你用其他方法无法做到的事情时(例如,在算法上进行更改),仍然有一组很好的宝石可以利用和尝试。 |
|
|
15
0
这似乎无关紧要,但有一个原因 list of speed tips 在Android开发者网站上。它在手机上运行时使用的是非标准的dalvik字节码,但这里列出的许多技巧普遍适用于Java。 |
|
|
giantjenga · 优化整数向量到二进制向量的转换 1 年前 |
|
|
Daniel Lobo · 使用约束进行优化 1 年前 |
|
Sergio · python中大量数字的乘法 1 年前 |
|
|
Sergey Dev · 临时表与表变量 2 年前 |
|
|
John · 减少C中的内存消耗++ 2 年前 |